(BDT306) Mission-Critical Stream Processing with Amazon EMR and Amazon Kinesis | AWS re:Invent 2014
Data Stream Processing and Analysis on AWS #awscasual
-
Upload
kenta-suzuki -
Category
Engineering
-
view
8.931 -
download
4
description
Transcript of Data Stream Processing and Analysis on AWS #awscasual
![Page 1: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/1.jpg)
Data Stream Processing and Analysis on AWS: Fluentd, Elasticsearch, DynamoDB, EMR and Amazon Kinesis
AWS Casual Talks #2 @suzu_v
![Page 2: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/2.jpg)
すずけん, @suzu_v
VOYAGE GROUPで働いてます
その中のadingoという会社でR&Dをしてます
http://suzuken.hatenablog.jp/
![Page 3: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/3.jpg)
![Page 4: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/4.jpg)
アンケート
![Page 5: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/5.jpg)
Amazon Kinesis ユーザの方?
![Page 6: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/6.jpg)
Fluentd使っている方?
![Page 7: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/7.jpg)
Elasticsearchユーザの方?
![Page 8: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/8.jpg)
DynamoDB使ってる方?
![Page 9: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/9.jpg)
EMR使ってる方?
![Page 10: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/10.jpg)
今日はログの解析基盤のアーキテクチャと Kinesisの検証をしている話をします
![Page 11: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/11.jpg)
Data Sources
App.4
[Machine Learning]
AWS
Endp
oint
App.1
[Aggregate & De-Duplicate]
Data Sources
Data Sources
Data Sources
App.2
[Metric Extraction]
S3
DynamoDB
Redshift
App.3 [Sliding
Window Analysis]
Data Sources
Availability Zone
Shard 1 Shard 2 Shard N
Availability Zone
Availability Zone
Amazon Kinesis Managed Service for Real-Time Processing of Big Data
http://www.slideshare.net/AmazonWebServices/amazon-kinesis-realtime-streaming-big-data-processing-applications-bdt311-aws-reinvent-2013
![Page 12: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/12.jpg)
Kinesis Architecture
log
loglog
log
loglog
log
loglog
log
loglog
Amazon Kinesis
Kinesis Application
stream
Data Record
shard
Partition key
DataStore
![Page 13: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/13.jpg)
Kinesis Architecture
log
loglog
log
loglog
log
loglog
log
loglog
Amazon Kinesis
Kinesis Application
stream
Data Record
shard
Partition key
DataStore
site_id2014/04/18 site_id: 1 user_id: 1
count by site 1~100
count by site 101~200
count by site 201~300 top ranking
![Page 14: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/14.jpg)
Kinesis Architecture
log
loglog
log
loglog
log
loglog
log
loglog
Amazon Kinesis
Kinesis Application
stream
Data Record
shard
Partition key
DataStore
user_id2014/04/18 item_id: 1 user_id: 1
coefficient: item visited by user 1-10000
update matrix (in near real time)
coefficient: item visited by user 10001-20000
coefficient: item visited by user 20001-30000
![Page 15: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/15.jpg)
Out System
![Page 16: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/16.jpg)
システム概要
広告ログを分析するための基盤
アドホックな分析&定常分析
ターゲティングにも使う
![Page 17: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/17.jpg)
カジュアルなシステム要件
複数サービスのログをひたすら取り込む。
過去ログをひたすら取り込み、快適に分析できるようにする。hot / cold dataの分析を両立する。
ターゲティングはベストエフォート。
![Page 18: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/18.jpg)
2012 mid.ELB
EC2
EC2 EC2
EC2
request
S3 MongoDB Cluster (EC2)
EMRELB
EC2
EC2 EC2
EC2
http api
crontab
hourly daily
php + apache
php + apache
![Page 19: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/19.jpg)
Arch. #1 / 2012 mid.
Cons
not real-time
MongoDBのwriteによる負荷が高い
MongoDBの集計処理が重い
MapReduceジョブを回さないと分析ができない
Pros
MongoDBの柔軟性
データの受け入れが安定
![Page 20: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/20.jpg)
2014 earlyELB
EC2
EC2 EC2
EC2
request
EC2
S3DynamoDB
EMR ELB
EC2
EC2 EC2
EC2
http api
Elastic search
Growth Forecast
fluentdfluentd
(aggregator)
exec_filter
out_elasticsearch
out_dynamodb
servlet (scala)
dynamic-dynamo
![Page 21: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/21.jpg)
ある日のトラフィックパターンと自動スケーリングの様子
sebdah/dynamic-dynamodb https://github.com/sebdah/dynamic-dynamodb
![Page 22: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/22.jpg)
Arch. #2 / 2014 early
Cons Fluentdが便利すぎるがために、aggregatorにいろいろやらせすぎてる。
Fluentdのバッファが詰まって死ぬ、とかある困る。
preノードを追加してストリームを逃がすこともしているが、fluentの設定が複雑化する
ストリーム処理をより柔軟に、多様に、疎結合に扱いたい
Elasticsearchに長期間の大量データを集計させるとそれなりにパワーが必要
Pros Elasticsearch + Kibanaにより、エンジニア以外のメンバーもhotなデータのドリルダウンを行えるように
DynamoDB導入によりwrite / readともに安定
dynamic-dynamodbを採用。throughputを自動調節するように。
EMR上のHiveから、s3にあるログとDynamoDBにある分析済みデータを組み合わせたクエリが可能に
準リアルタイムなターゲティングが可能に
![Page 23: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/23.jpg)
ここから検証中の話
![Page 24: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/24.jpg)
Next ?ELB
EC2
EC2 EC2
EC2
request
EC2
S3
DynamoDBEMR ELB
EC2
EC2 EC2
EC2
http api
Elastic search
Growth Forecast
Amazon Kinesis
Kinesis App.
![Page 25: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/25.jpg)
Amazon Kinesisの検証項目
求めているスループットはでるか?
どれくらいの負荷で書き込めるか?
書き込み失敗時にどのような挙動になるか?ハンドリングできるか?
KCL(Kinesis Client Library)での開発は楽か?
![Page 26: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/26.jpg)
ざっくりとした使用感 - producer
aggregatorを用意してwriteするのではなく、logの発生源から直接書くほうがthroughputを出しやすい。ただし、1レコードずつ書き込まなければならないため、fluentdのout pluginではthroughputが出しづらい。
1 shard 1000 put request / sec. の制限がある。大きなオブジェクトを書き込まない限り、byte制限よりこちらに引っかかるケースのほうが多い。とはいえ、シャードの追加は簡単なので、大きな問題にはならない。緩和申請は計画的に。
書き込み時の負荷を意識する必要がないので楽。とりあえず入れておけば、Consumer側でよしなにできる。
Kinesis内に24時間残ってくれるのは便利。ただし、Kinesisへの書き込み失敗時のハンドリングをする必要はある。
![Page 27: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/27.jpg)
ざっくりとした使用感 - consumer
DynamoDBが活躍する。Kinesis ApplicationからDynamoDBへの書き込みは楽。Scalingも問題ない。
readは1 shard 5 transaction / sec.の制限がある。なので1transactionである程度まとめてデータを取得する作りにする必要がある。そもそも足りないならshardを増やす。
失敗時のretryのため、Kinesis Applicationの各Workerで各Shardをどこまで処理したのかをCheckpointとして記録しておく必要がある。KCL(Kinesis Client Library)使うとこのへんはよしなにDynamoDBで管理するようにしてくれる。
EMRからもConnectorがあるので簡単に扱える。
EMR上のSpark Streamingから扱うのは手軽で良い。EMRでSparkクラスタを立てられるので、aliveにしてストリームに対してwindowクエリを流し続けるのは手軽なユースケースになりそう。
![Page 28: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/28.jpg)
Kinesisへの移行で発生する作業
fluentdのexec_filterとかexecとかでやっていたことをKinesis Applicationに置き換える必要がある
パーティションキーの考慮、consumeが失敗した場合のケア
fluentdでいうaggregatorノードを作るのではなくて、ログを出す各サーバから直接Kinesisに転送するような作りにしたほうが良さそう
1行のログごとの書き込みなので、1ノードからのKinesisへの書き込みスループットが現段階ではあまりでない。
![Page 29: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/29.jpg)
Kinesis, こうなったら良い
Kinesisのメトリクスも1min.ごとに見たい
DynamoDB同様、batchWriteが欲しい
ap-northeast-1! 東京リージョン!
![Page 30: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/30.jpg)
カジュアルなまとめ
Amazon Kinesisもっと使いましょう
東京リージョン待ってます
![Page 31: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/31.jpg)
参考資料
![Page 32: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/32.jpg)
Kinesis関連
Amazon Web Services ブログ: 【AWS発表】KinesisとElastic MapReduceを使ってストリーミングデータを処理する
http://aws.typepad.com/aws_japan/2014/03/process-streaming-data-with-kinesis-and-elastic-mapreduce.html
Amazon Kinesis: Real-time Streaming Big data Processing Applications (BDT311) | AWS re:Invent 2013
http://www.slideshare.net/AmazonWebServices/amazon-kinesis-realtime-streaming-big-data-processing-applications-bdt311-aws-reinvent-2013
https://www.youtube.com/watch?v=AXAaCG2QUkE
re:Invent 2013でのKinesisの紹介スライド及びビデオです。KeynoteでのKinesisのデモに利用されていたTwitterのhashtagをcountするデモの構築方法についてまとまっています。
ShardのマネジメントをDynamoDBを利用して行っているところなど、わかりやすく説明されています。
![Page 33: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/33.jpg)
Kinesis関連
Developing Record Consumer Applications - Amazon Kinesis
http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor-app.html
Kinesis Client Libraryを使ったConsumerの作成方法についてまとまっています
Tutorial: Analyzing Amazon Kinesis Streams with Amazon EMR and Hive - Amazon Elastic MapReduce
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/query-kinesis.html
Kinesis StreamをEMR上のHiveで取り扱う方法について説明されています。
![Page 34: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/34.jpg)
Log4jAppender for Kinesis
Download Log4J Appender for Amazon Kinesis Sample Application, Sample Credentials File, and Sample Log File - Amazon Elastic MapReduce
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/kinesis-pig-publisher.html
てっとりばやくKinesisに書き込みたいならこれがいいです
![Page 35: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/35.jpg)
Kinesis with EMR
Spark Streaming
http://www.cs.berkeley.edu/~marmbrus/sparkdocs/_site/streaming-programming-guide.html
cold dataとhot dataを組み合わせてwindowしたり
例)特定クライアントのキャンペーンにおける5分毎のクリック数
Run Spark and Shark on Amazon Elastic MapReduce : Articles & Tutorials : Amazon Web Services
https://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923
![Page 36: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/36.jpg)
credit
扉絵
https://www.flickr.com/photos/65220434@N02/13645528234/sizes/l
![Page 37: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/37.jpg)
fluent-plugin-elasticsearch
uken/fluent-plugin-elasticsearch
https://github.com/uken/fluent-plugin-elasticsearch
hostsオプションおすすめ
Kibana向けにオプション作れるの便利
chunkサイズはES側の設定と合わせておくと良い
![Page 38: Data Stream Processing and Analysis on AWS #awscasual](https://reader034.fdocuments.in/reader034/viewer/2022042700/558ce8d9d8b42a1d2b8b4634/html5/thumbnails/38.jpg)
fluent-plugin-kinesis
imaifactory/fluent-plugin-kinesis
https://github.com/imaifactory/fluent-plugin-kinesis
まだrubygemsには上がってない
fluentのchunkと、Kinesisのwrite APIの相性が…
throughput出すならbatchで書き込めないとつらそう