data stream processing and analysis on aws #awscasual

38
Data Stream Processing and Analysis on AWS: Fluentd, Elasticsearch, DynamoDB, EMR and Amazon Kinesis AWS Casual Talks #2 @suzu_v

Upload: kenta-suzuki

Post on 26-Jun-2015

8.931 views

Category:

Engineering


4 download

DESCRIPTION

AWS Casual Talks #2 での資料です。 http://www.zusaar.com/event/3817003

TRANSCRIPT

Page 1: Data Stream Processing and Analysis on AWS #awscasual

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

すずけん, @suzu_v

VOYAGE GROUPで働いてます

その中のadingoという会社でR&Dをしてます

http://suzuken.hatenablog.jp/

Page 3: Data Stream Processing and Analysis on AWS #awscasual
Page 4: Data Stream Processing and Analysis on AWS #awscasual

アンケート

Page 5: Data Stream Processing and Analysis on AWS #awscasual

Amazon Kinesis ユーザの方?

Page 6: Data Stream Processing and Analysis on AWS #awscasual

Fluentd使っている方?

Page 7: Data Stream Processing and Analysis on AWS #awscasual

Elasticsearchユーザの方?

Page 8: Data Stream Processing and Analysis on AWS #awscasual

DynamoDB使ってる方?

Page 9: Data Stream Processing and Analysis on AWS #awscasual

EMR使ってる方?

Page 10: Data Stream Processing and Analysis on AWS #awscasual

今日はログの解析基盤のアーキテクチャと Kinesisの検証をしている話をします

Page 11: Data Stream Processing and Analysis on AWS #awscasual

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

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

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

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

Out System

Page 16: Data Stream Processing and Analysis on AWS #awscasual

システム概要

広告ログを分析するための基盤

アドホックな分析&定常分析

ターゲティングにも使う

Page 17: Data Stream Processing and Analysis on AWS #awscasual

カジュアルなシステム要件

複数サービスのログをひたすら取り込む。

過去ログをひたすら取り込み、快適に分析できるようにする。hot / cold dataの分析を両立する。

ターゲティングはベストエフォート。

Page 18: Data Stream Processing and Analysis on AWS #awscasual

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

Arch. #1 / 2012 mid.

Cons

not real-time

MongoDBのwriteによる負荷が高い

MongoDBの集計処理が重い

MapReduceジョブを回さないと分析ができない

Pros

MongoDBの柔軟性

データの受け入れが安定

Page 20: Data Stream Processing and Analysis on AWS #awscasual

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

ある日のトラフィックパターンと自動スケーリングの様子

sebdah/dynamic-dynamodb https://github.com/sebdah/dynamic-dynamodb

Page 22: Data Stream Processing and Analysis on AWS #awscasual

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

ここから検証中の話

Page 24: Data Stream Processing and Analysis on AWS #awscasual

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

Amazon Kinesisの検証項目

求めているスループットはでるか?

どれくらいの負荷で書き込めるか?

書き込み失敗時にどのような挙動になるか?ハンドリングできるか?

KCL(Kinesis Client Library)での開発は楽か?

Page 26: Data Stream Processing and Analysis on AWS #awscasual

ざっくりとした使用感 - 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

ざっくりとした使用感 - 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

Kinesisへの移行で発生する作業

fluentdのexec_filterとかexecとかでやっていたことをKinesis Applicationに置き換える必要がある

パーティションキーの考慮、consumeが失敗した場合のケア

fluentdでいうaggregatorノードを作るのではなくて、ログを出す各サーバから直接Kinesisに転送するような作りにしたほうが良さそう

1行のログごとの書き込みなので、1ノードからのKinesisへの書き込みスループットが現段階ではあまりでない。

Page 29: Data Stream Processing and Analysis on AWS #awscasual

Kinesis, こうなったら良い

Kinesisのメトリクスも1min.ごとに見たい

DynamoDB同様、batchWriteが欲しい

ap-northeast-1! 東京リージョン!

Page 30: Data Stream Processing and Analysis on AWS #awscasual

カジュアルなまとめ

Amazon Kinesisもっと使いましょう

東京リージョン待ってます

Page 31: Data Stream Processing and Analysis on AWS #awscasual

参考資料

Page 32: Data Stream Processing and Analysis on AWS #awscasual

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

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

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

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

credit

扉絵

https://www.flickr.com/photos/65220434@N02/13645528234/sizes/l

Page 37: Data Stream Processing and Analysis on AWS #awscasual

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

fluent-plugin-kinesis

imaifactory/fluent-plugin-kinesis

https://github.com/imaifactory/fluent-plugin-kinesis

まだrubygemsには上がってない

fluentのchunkと、Kinesisのwrite APIの相性が…

throughput出すならbatchで書き込めないとつらそう