ビッグデータ 101 AWS で始めるビッグデータパイプラインの設計と実装 アマゾンウェブサービスジャパン株式会社ソリューションアーキテクト内海英一郎 2016 年 6 月 3 日 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Twitter で AWS Summit に参加しよう! 公式アカウント @awscloud_jp をフォローしたお客様に フリクションボールペンをプレゼント! 配布場所 ロビーや展示会場のコンパニオンが配布中! お気軽にお声かけください
AWS Black Belt Online Seminar のご案内 AWSJ の Tech メンバーが AWS に関する様々な事を日本語で紹介 解説する無料のオンラインセミナー AWS についてもっと勉強したい方にオススメ! AWS イベント検索
うちうみえいいちろう内海英一郎 @eiichirouchiumi アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト Amazon Kinesis Java LMAX Disruptor
多くのお客様が AWS 上でビッグデータを利活用 Telecommunications A d vertising E d ucation Risk Simulation Healthcare F inancial Claims Healthcare L A BORATORY Risk A nalysis Non-Profit Media & E ntertainment F o o d Genomics O il & Gas Genomics Media & E ntertainment Media & E ntertainment
AdRoll 50 ミリ秒以下のレスポンスで 1 日 600 億のインプレッションを処理 us-west-2 ELB Bidders ELB ELB ELB Ad Servers us-east-1 Bidders Ad Servers eu-west-1 ELB Bidders ELB ap-southeast-1 ELB Bidders ELB ap-northeast-1 ELB Bidders ELB Ad Servers Ad Servers Ad Servers 60B Events/Day Kinesis S3 600k Files/Day SQS SQS SQS SQS Machine Learning Analytics Dynamic Creatives Profiles DynamoDB us-west-2 DynamoDB us-east-1 DynamoDB eu-west-1 DynamoDB ap-southeast-1 DynamoDB ap-northeast-1 AWS Summit 2015 San Francisco Keynote with Andy Jassy https://youtu.be/jrodd1_jbww
FINRA 5 ペタバイト超のストレージで 1 日最大 750 億イベントを処理 分析 EMR is Ubiquitous in our architecture Users Analytics App Auto Scaled EC2 Data Marts (Amazon Redshift) Adhoc Query Cluster (EMR) Query Cluster (EMR) Shared Metastore (RDS) Data Catalog & Lineage Services Auto Scaled EC2 Cluster Mgt & Workflow Services Auto Scaled EC2 Normalization ETL Clusters (EMR) Reference Data (RDS) Optimization ETL Clusters (EMR) Data Ingestion Services Auto Scaled EC2 Data Providers 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. BDT305 Amazon EMR Deep Dive & Best Practices Rahul Pathak, AWS Scott Donaldson, FINRA Clayton Kovar, FINRA October 2015 http://www.slideshare.net/amazonwe bservices/bdt305-amazon-emr-deepdive-and-best-practices Analytics App Auto Scaled EC2 Query Cluster (EMR) Query Optimized (S3) Source of Truth (S3) Shared Data Services Batch Analytic Clusters (EMR)
Hearst 250 以上のウェブサイトから 1 日 100 GB のクリックストリームを収集 Final Hearst Data Pipeline Getting Started with Amazon Kinesis API Ready Data Clickstream Users to Hearst Properties Node.JS AppProxy Rick McFarland, Chief Data Scientist, Hearst Corporation Adi Krishnan, Principal Product Manager, AWS April 2016 Amazon Redshift Amazon Kinesis Streams Data Science Application ETL on EMR 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Buzzing API Agg Data Models S3 Firehose LATENCY Milliseconds 30 Seconds 100 Seconds 5 Seconds THROUGHPUT 100 GB/Day 5 GB/Day 1 GB/Day 1 GB/Day http://www.slideshare.net/amazonwe bservices/getting-started-withamazon-kinesis
そのテクノロジーや開発方法論は 日々複雑化 高度化している Reference Architecture Store Search Data Amazon RDS ES ML BDT310 Amazon Redshift Amazon DynamoDB Amazon Warm Batch File Storage Logging File Data Amazon S3 Amazon Glacier Pig Cold Amazon Kinesis Amazon DynamoDB Hot Stream Processing Stream Data Stream Storage IoT Streaming Apache Kafka Fast Impala Hot A Predictions Amazon Kinesis AWS Lambda Analysis & Visualization Logstash Amazon ML Amazon QuickSight October 2015 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. http://www.slideshare.net/amazonwe bservices/bdt310-big-dataarchitectural-patterns-and-bestpractices-on-aws Slow Fast Big Data Architectural Patterns and Best Practices on AWS Siva Raghupathy, Principal Solutions Architect, Amazon Web Services Notebooks Transactional Data Consume IDE Android Hot Amazon Elastic MapReduce ios Mobile Apps Amazon ElastiCache Analyze ETL Interactive Web Apps Search SQL NoSQL Cache Applications Collect Apps & APIs
本セッションのテーマ アーキテクチャ全体のモデリング AWS サービスを選択する際の着眼点 典型的なユースケースの実装方法
モデリング
最も抽象的な概念から始める データの断片 価値を持った情報 問題領域 データの断片を価値を持った情報に変えること
データを収集するステージ 収集 データソースへのインターフェースを提供
情報を提供するステージ 提供 情報利用者へのインターフェースを提供
データを保存するステージ 保存 繰り返し利用されるデータを蓄積 保持
収集したデータを処理するステージ 前処理 収集したデータを保存用に変換 登録
保存したデータを処理するステージ 後処理 保存したデータを提供用に変換 展開
ストリームデータの収集 収集 ストリーム ペイロードサイズが小さい データの発生頻度が高い
ファイルデータの収集 収集 ファイル ペイロードサイズが大きい データの発生頻度が低い
収集したデータのリアルタイム処理 前処理 リアルタイム データを収集した時点で処理 レイテンシー重視
収集したデータのバッチ処理 前処理 バッチ 収集したデータをまとめて処理 スループット重視
関連データベースへの保存 保存 関連データベース ハードスキーマ アクセスパターンの制約なし
NoSQL データベースへの保存 保存 NoSQL データベース ソフトスキーマ アクセスパターンの制約なし
サーチエンジンへの保存 保存 サーチエンジン ソフトスキーマ 全文検索やスコアリング
データウェアハウスへの保存 保存 データウェアハウス ハードスキーマ 大容量データの複雑な問い合わせに最適化
ストリームストレージへの保存 保存 ストリームストレージ スキーマフリー データの到着順に一定期間のウィンドウを保持
データレイクへの保存 保存 データレイク スキーマフリー 後から自由に処理
保存したデータの機械学習処理 後処理 機械学習 保存したデータへのアルゴリズム適用 予測が主用途
保存したデータの問い合わせ処理 後処理 問い合わせ 保存したデータの抽出 比較や並び替え 分析が主用途
可視化による情報の提供 提供 可視化 人間向けのインターフェース スプレッドシートやグラフ
API による情報の提供 提供 API コンピューター向けのインターフェース HTTP 経由の JSON や XML
サービスの選択
サービスの選択における指針 Right Tools for the Job 機能的特性と性能的特性の両面から最適なサービスを見極めましょう Managed Services First インフラの運用を AWS に任せてアプリケーションの開発に集中しましょう
ストリームデータの収集に利用できるサービス 収集 ストリーム ペイロードサイズが小さい データの発生頻度が高い Amazon Kinesis Streams Amazon Kinesis Firehose
ファイルデータの収集に利用できるサービス 収集 ファイル ペイロードサイズが大きい データの発生頻度が低い Amazon S3 AWS Import/Export Snowball
収集したデータのリアルタイム処理に利用できるサービス 前処理 リアルタイム データを収集した時点で処理 レイテンシー重視 AWS Lambda Amazon EMR
収集したデータのリアルタイム処理に利用できるサービス 前処理 リアルタイム データを収集した時点で処理 レイテンシー重視 Amazon Kinesis Firehose
収集したデータのバッチ処理に利用できるサービス 前処理 バッチ 収集したデータをまとめて処理 スループット重視 Amazon EMR AWS Data Pipeline
関連データベースとして利用できるサービス 保存 関連データベース ハードスキーマ アクセスパターンの制限なし Amazon RDS
NoSQL データベースとして利用できるサービス 保存 NoSQL データベース ソフトスキーマ アクセスパターンの制限なし Amazon DynamoDB Amazon Elasticsearch Service
サーチエンジンとして利用できるサービス 保存 サーチエンジン ソフトスキーマ 全文検索やスコアリング Amazon CloudSearch Amazon Elasticsearch Service
データウェアハウスとして利用できるサービス 保存 データウェアハウス ハードスキーマ 大容量データの複雑な問い合わせに最適化 Amazon Redshift
ストリームストレージとして利用できるサービス 保存 ストリームストレージ スキーマフリー データの到着順に一定期間のウィンドウを保持 Amazon Kinesis Streams
データレイクとして利用できるサービス 保存 データレイク スキーマフリー 後から自由に処理 Amazon S3
保存したデータの機械学習処理に利用できるサービス 後処理 機械学習 保存したデータへのアルゴリズム適用 予測が主用途 Amazon Machine Learning Amazon EMR
保存したデータの問い合わせ処理に利用できるサービス 後処理 問い合わせ 保存したデータの抽出 比較や並び替え 分析が主用途 Amazon EMR Amazon QuickSight
保存したデータの問い合わせ処理に利用できるサービス 後処理 問い合わせ 保存したデータの抽出 比較や並び替え 分析が主用途 Amazon RDS Amazon DynamoDB
保存したデータの問い合わせ処理に利用できるサービス 後処理 問い合わせ 保存したデータの抽出 比較や並び替え 分析が主用途 Amazon Elasticsearch Service Amazon CloudSearch
保存したデータの問い合わせ処理に利用できるサービス 後処理 問い合わせ 保存したデータの抽出 比較や並び替え 分析が主用途 Amazon Redshift
可視化による情報の提供に利用できるサービス 提供 可視化 人間向けのインターフェース スプレッドシートやグラフ Amazon EMR Amazon Elasticsearch Service
可視化による情報の提供に利用できるサービス 提供 可視化 人間向けのインターフェース スプレッドシートやグラフ Amazon QuickSight
API による情報の提供に利用できるサービス 提供 API コンピューター向けのインターフェース HTTP 経由の JSON や XML Amazon API Gateway AWS Lambda
実装例
ユースケース 1 リアルタイムモニタリング 数千のセンサーが毎秒アップロードするデータをリアルタイムにダッシュボード上でモニタリングしたい ただし モニタリングの対象とするデータは特異値を含むものに限定する データは JSON 形式で 特異値の判定ロジックは だ まずは 特異値を含むデータの発生件数がどのように推移しているのかだけでも時系列で把握できると助かるのだが
ユースケース 1 リアルタイムモニタリング 数千のセンサーが毎秒アップロードする JSON データ リアルタイム 特異値の検出 ダッシュボードで件数を時系列にモニタリング
リアルタイムモニタリングのモデリング例 収集 ストリーム 前処理 リアルタイム 保存 NoSQL データベース 後処理 問い合わせ 提供 可視化
リアルタイムモニタリングのサービス選択例 収集 ストリーム Kinesis Streams 前処理 リアルタイム Lambda + Kinesis Firehose 保存 NoSQL データベース Elasticsearch Service 後処理 問い合わせ Elasticsearch Service 提供 可視化 Elasticsearch Service
リアルタイムモニタリングの実装例 収集 ストリーム Kinesis Streams センサーは SDK で Kinesis Streams に直接データを送信
リアルタイムモニタリングの実装例 前処理 リアルタイム Lambda + Kinesis Firehose Kinesis Streams に Lambda ファンクションを関連付け Lambda ファンクション内で特異値を検出 Kinesis Firehose に特異値を含んだレコードを再送信 Kinesis Firehose が Elasticsearch にデータをロード
リアルタイムモニタリングの実装例 保存 NoSQL データベース Elasticsearch Service Elasticsearch で時系列にデータをインデックス化
リアルタイムモニタリングの実装例 後処理 問い合わせ Elasticsearch Service Elasticsearch で問い合わせを処理し結果を返却
リアルタイムモニタリングの実装例 提供 可視化 Elasticsearch Service Kibana で時系列に折れ線グラフを表示しデータを一定間隔で更新
ユースケース 2 ログアナリティクス データサイエンティストがアプリケーションのアクセスログを分析してみたいと言っている ログファイルは日付が変わった後に前日分が送られてくるのだが すぐに数百 TB 程度のストレージを消費するだろう とりあえず ワークベンチからアドホックなクエリーを実行してログに含まれる範囲の情報を確認できればいいらしい 急いで環境を用意してもらえないか?
ユースケース 2 ログアナリティクス 日次でファイルを受信 数百 TB のストレージ 分析範囲はログに含まれる情報のみ ワークベンチからアドホックにクエリーを実行
ログアナリティクスのモデリング例 収集 ファイル 前処理 バッチ 保存 データレイク 後処理 問い合わせ 提供 可視化
ログアナリティクスのサービス選択例 収集 ファイル S3 前処理 バッチ Data Pipeline + EMR 保存 データレイク S3 後処理 問い合わせ EMR 提供 可視化 EMR
ログアナリティクスの実装例 収集 ファイル S3 アプリケーションは定期的に CLI で S3 にログファイルを送信
ログアナリティクスの実装例 前処理 バッチ Data Pipeline + EMR Data Pipeline から HiveActivity を起動 ログファイルをテキスト形式で Hive テーブルへロード ロードしたログを ORC 形式で S3 上の Hive テーブルに再コピー
ログアナリティクスの実装例 保存 データレイク S3 ORC 形式で S3 上の Hive テーブルにログを保持
ログアナリティクスの実装例 後処理 問い合わせ EMR HiveQL で S3 上の Hive テーブルを問い合わせ
ログアナリティクスの実装例 提供 可視化 EMR Hue でスプレッドシート上に HiveQL 問い合わせの結果を表示
ユースケース 3 ラムダアーキテクチャ ウェブサーバー上のアクセスログからサイト訪問者のセグメントを特定したい アクセスログは対象となるウェブサーバーから常時収集する セグメントを更新するタイミングはリアルタイムと日次の 2 種類だ リアルタイムでの更新時にはロジック で高速に低精度の予測を行い 日次での更新時にはロジック で 1 日分のログ全体から時間をかけて高精度の予測を行う 予測したセグメント情報はユーザー単位に保存しておき 自社内にある様々なアプリケーションからいつでも利用できるようにしたい よろしく頼んだよ
ユースケース 3 ラムダアーキテクチャ ウェブサーバーのアクセスログを常時収集 リアルタイム更新と日次のバッチ更新 ユーザー単位にセグメント情報を保存 様々なアプリケーションからいつでも利用
ラムダアーキテクチャのモデリング例 収集 ストリーム 前処理 リアルタイム + バッチ 保存 NoSQL データベース 後処理 問い合わせ 提供 API
ラムダアーキテクチャのサービス選択例 収集 ストリーム Kinesis Streams 前処理 リアルタイム + バッチ Lambda + Data Pipeline + EMR 保存 NoSQL データベース DynamoDB 後処理 問い合わせ DynamoDB 提供 API API Gateway + Lambda
ラムダアーキテクチャの実装例 収集 ストリーム Kinesis Streams Kinesis エージェントから Kinesis Streams にログレコードを送信
ラムダアーキテクチャの実装例 前処理 リアルタイム Lambda Kinesis Streams に Lambda ファンクションを関連付け Lambda ファンクション内でセグメントを判定 DynamoDB のセグメント情報をアップデート
ラムダアーキテクチャの実装例 前処理 バッチ Data Pipeline + EMR Kinesis Streams と DynamoDB に Hive テーブルをマッピング Data Pipeline から HiveActivity を起動 HiveQL で Kinesis Streams を問い合わせてセグメントを判定 HiveQL で DynamoDB にセグメント情報をインポート
ラムダアーキテクチャの実装例 保存 NoSQL データベース DynamoDB ユーザーの識別子をハッシュキーにしてセグメント情報を保持
ラムダアーキテクチャの実装例 後処理 問い合わせ DynamoDB DynamoDB で問い合わせを処理し結果を返却
ラムダアーキテクチャの実装例 提供 API API Gateway + Lambda API Gateway でセグメント情報提供用の REST API を定義 公開 Lambda ファンクションで HTTP 要求を DynamoDB 呼び出しに変換 DynamoDB の問い合わせ結果を JSON 文字列へ変換して返却
本セッションのふりかえり アーキテクチャ全体のモデリング AWS サービスを選択する際の着眼点 典型的なユースケースの実装方法
Thank You! AWS Big Data Blog http://blogs.aws.amazon.com/bigdata/