(レポート) BDT313: ビックデータのためのAmazon DynamoDB #reinvent

2015.10.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本セッションでは、ビックデータのデータ処理にAmazon Kinesis stream や Lambda関数という最新機能を応用して、耐久性に優れた、拡張性の高い、高可用性な Amazon DynamoDBの活用事例が紹介されています。

BDT313: Amazon DynamoDB For Big Data

このセッション

  • 「どのように」ではなく「何」に焦点を当てる
  • ビッグデータ・アーキテクチャの完全な機能の実装を見てください
  • AWSサービスがパワーとスケールを犠牲にすることなく、ビッグデータの多くの複雑さを抽象化する方法を学ぶ
  • AWSデータエコシステムのサービスの組み合わせで、分析データ用途の高機能なシステムを作ることができる方法を示します

「ビックデータ」は何か?

  • 多くのテクノロジーキャッチフレーズで、「ビックデータ」は多くの異なる考えによって定義される傾向がある
  • ほとんどの定義は、2つの主な特性の考えが含まれます:
    • サイズ
    • 速さ

ビッグデータの特性

  • データ量が急速な増加する傾向
  • さまざまなソースから生データは、ますます重要なビジネス上の疑問に解決するために利用されている
    • ログファイル
      • どのようにアプリケーションが使用されているかと、誰がそれらを使用していますか?
    • アプリケーションのパフォーマンス監視
      • パフォーマンスの悪いアプリがビジネスに影響を与えている範囲とは何か?
    • アプリケーションの計測
      • ユーザーがこの新機能にどのように反応するのだろうか?
    • セキュリティ
      • 私のインフラストラクチャへのアクセスを持って、どのようなへのアクセス権を持っているか、どのようにそれをアクセスしているか?
  • データ量の増加は、データの流れがあることを意味する
    • MB / sは正常
    • GB / sがますます一般的です。
  • 接続しているユーザーの数は驚くべきで成長している:
    • 2020年までに750億接続されたデバイスの推定値。
  • ビッグデータアプリケーションでは、秒間105または106トランザクションは珍しいことではない

ビッグデータの「スイートスポット」

dbt313-6

サイズ速度構造化の3つの要件を満たしているのが、DynamoDB です!

トランザクションデータ処理

DynamoDBのは、トランザクション処理に適しています:

  • 高い並行性
  • 強力な一貫性
  • 単一アイテムのアトミック更新
  • 重複排除と、オプティミスティック同時実行のための条件付きのアップデート
  • キー/値とJSON文書スキーマの両方をサポート
  • 低レイテンシのデータ・アクセスを持つ大規模なテーブルサイズを扱うことができる

※ オプティミスティック同時実行は、「楽観的同時実行」や「ゆるい同時実行」と訳される場合がありますが、ここではそのまま表記します。

Demo 1: S3に保存したオブジェクトのメタデータインデックスと保存

dbt313-8

ユースケース

S3に格納された数多くのデジタルオーディオファイルを検索できるようにしたい:

  • メタデータ用にプライマリ・データ・ストアとしてDynamoDBを利用する。
  • メタデータのインデックスと検索にElasticsearchを使用する。

実装手順

  1. ID3タグからメタデータを読み取り、 DynamoDBのテーブルに挿入死する、Lambda関数を作成する
  2. オーディオファイルを保存するS3バケットのS3通知(S3 notifications)を有効にする
  3. DynamoDBのテーブル上のストリームを有効にする
  4. DynamoDBからメタデータを取り出し、そしてElasticsearchのインデックスに使う、2つ目のLambda関数を作成する
  5. Lambda関数のイベントソースとしてストリームを有効にする

重要なポイント

  1. DynamoDB + Elasticsearch は、耐久性に優れた、拡張性の高い、高可用性で、豊富なクエリ機能を備えたデータベースです。
  2. Lambda関数は、暗黙的に存在する計算インフラストラクチャを管理することなく、 DynamoDBのストリームとAmazon S3の両方のイベントに応答する。

Demo 2: DynamoDBのとHiveを使用して複数のデータソースに対してクエリを実行する

dbt313-12

ユースケース

100万曲のデータセットからなる追加データで、DynamoDBに保存されているオーディオファイルのメタデータを豊かにしたい:

  • 百万曲のデータセットは、テキストファイルに格納されている
  • ID3タグのメタデータは、 DynamoDBのに格納されている
  • EMRのHiveを使い、クエリで2つのデータセットを一緒にする

実装手順

  1. EMRのHiveを使ってスピンアップする(?)
  2. DynamoDBStorageHandlerを使用して外部Hiveテーブルを作成する
  3. ミリオンソングプロジェクトのメタデータを含むテキストファイルのAmazon S3の位置を使用して、外部のHiveテーブルを作成する
  4. 2つの外部テーブルを結合するHiveクエリを作り・実行し、結合した結果をS3に書き込む
  5. Amazon の結果をS3からロードし、DynamoDBに入れる

重要なポイント

  1. HiveのHadoopクラスタの素早い構築と取り壊しをEMRで行う
  2. DynamoDBとHiveを使用すると、 DynamoDBのテーブル内の項目と、さまざまなソースからのデータと照会/結合することができる

Demo 3:  DynamoDBとRedshiftでセンサーデータを格納して、分析する

dbt313-16

ユースケース

  • 多数のセンサは、一定の間隔で測定値を取っている
  • 分析用のデータウェアハウスからそれぞれ読み込み、データを集計する必要がある
  • 生のセンサデータの読み込みにKinesisを使用する
  • 高速アクセス かつ リアルタイムダッシュボードのためのDynamoDBにセンサーの測定値を格納する
  • 耐久性とバックアップのために未加工のセンサー計測値をS3に保存する
  • Lambdaを使用してRedshiftにS3からデータをロードする

実装手順

  1. Amazon Kinesis streamからデータを読み込むために、2つのLambda関数を作成する
  2. 各Lambda関数のイベントソースとしてAmazon Kinesis streamを有効にする
  3. 一つのLambda関数でDynamoDBにデータを書き込む
  4. 他のLambda関数でS3にデータを書き込む
  5. バッチでS3のデータからRedshiftにロードするのにaws-lambda-redshift-loaderを使用する

重要なポイント

  1. Kinesis + Lambda + DynamoDB はスケーラブルで、耐久性があり、センサデータ取り込みの非常に運用オーバーヘッドが低い高可用性ソリューションです
  2. DynamoDBのは、直近のセンサデータ読み取りの準リアルタイムクエリに適している
  3. Redshiftは、長い時間軸とレコードの非常に多数に及ぶセンサデータ読み取りのより深い分析に適している
  4. Lambdaを使ってRedshiftにデータをロードは頻繁にETLを実行する方法を提供する

セッションのまとめ

  • DynamoDBの汎用性は、多くのデータ・アーキテクチャの基礎コンポーネントになる
  • 「ビッグデータ」のソリューションは、通常、ストレージ、処理、および分析のためのさまざまなツールを含む
  • AWSのエコシステムにより、簡単に拡張性と耐久性のある「ビッグデータ」のアーキテクチャを構築することを可能にするサービスの豊富で強力なセットを提供する

最後に

Redshiftへのデータの取り込みに Amazon Kinesis stream や Lambda関数 を応用しているところは、さすが今年の re:Invent 2015のセッションだなと感じました。

個人的に補足すると、Lambda関数は60秒以内という制限があることと、Redshiftはショートクエリーが向きではないので、用途を見定めて適用したほうが良いでしょう。

でも、ここまでムキになって、DynamoDBを使う必要もないような、、、そこかしこにDynamoDB愛が見られますが、大好きというのは良いことだと思います。