Data Stream Processing and Analysis on AWS #awscasual

10,595 views

Published on

AWS Casual Talks #2 での資料です。

http://www.zusaar.com/event/3817003

Published in: Engineering

Data Stream Processing and Analysis on AWS #awscasual

  1. 1. Data Stream Processing and Analysis on AWS: Fluentd, Elasticsearch, DynamoDB, EMR and Amazon Kinesis AWS Casual Talks #2 @suzu_v
  2. 2. すずけん, @suzu_v VOYAGE GROUPで働いてます その中のadingoという会社でR&Dをしてます http://suzuken.hatenablog.jp/
  3. 3. アンケート
  4. 4. Amazon Kinesis ユーザの方?
  5. 5. Fluentd使っている方?
  6. 6. Elasticsearchユーザの方?
  7. 7. DynamoDB使ってる方?
  8. 8. EMR使ってる方?
  9. 9. 今日はログの解析基盤のアーキテクチャと Kinesisの検証をしている話をします
  10. 10. Data Sources App.4 [Machine Learning] AWSEndpoint 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
  11. 11. Kinesis Architecture log log log log log log log log log log log log Amazon Kinesis Kinesis Application stream Data Record shard Partition key DataStore
  12. 12. Kinesis Architecture log log log log log log log log log log log log Amazon Kinesis Kinesis Application stream Data Record shard Partition key DataStore site_id 2014/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
  13. 13. Kinesis Architecture log log log log log log log log log log log log Amazon Kinesis Kinesis Application stream Data Record shard Partition key DataStore user_id 2014/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
  14. 14. Out System
  15. 15. システム概要 広告ログを分析するための基盤 アドホックな分析&定常分析 ターゲティングにも使う
  16. 16. カジュアルなシステム要件 複数サービスのログをひたすら取り込む。 過去ログをひたすら取り込み、快適に分析できる ようにする。hot / cold dataの分析を両立する。 ターゲティングはベストエフォート。
  17. 17. 2012 mid.ELB EC2 EC2 EC2 EC2 request S3 MongoDB Cluster (EC2) EMR ELB EC2 EC2 EC2 EC2 http api crontab hourly daily php + apache php + apache
  18. 18. Arch. #1 / 2012 mid. Cons not real-time MongoDBのwriteによる負荷 が高い MongoDBの集計処理が重い MapReduceジョブを回さな いと分析ができない Pros MongoDBの柔軟性 データの受け入れが 安定
  19. 19. 2014 earlyELB EC2 EC2 EC2 EC2 request EC2 S3 DynamoDB EMR ELB EC2 EC2 EC2 EC2 http api Elastic search Growth Forecast fluentd fluentd (aggregator) exec_filter out_elasticsearch out_dynamodb servlet (scala) dynamic-dynamo
  20. 20. ある日のトラフィックパターンと自動スケーリングの様子 sebdah/dynamic-dynamodb https://github.com/sebdah/dynamic-dynamodb
  21. 21. 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 にある分析済みデータを組み合わせたクエ リが可能に 準リアルタイムなターゲティングが可能に
  22. 22. ここから検証中の話
  23. 23. Next ?ELB EC2 EC2 EC2 EC2 request EC2 S3 DynamoDB EMR ELB EC2 EC2 EC2 EC2 http api Elastic search Growth Forecast Amazon Kinesis Kinesis App.
  24. 24. Amazon Kinesisの検証項目 求めているスループットはでるか? どれくらいの負荷で書き込めるか? 書き込み失敗時にどのような挙動になるか?ハン ドリングできるか? KCL(Kinesis Client Library)での開発は楽か?
  25. 25. ざっくりとした使用感 - producer aggregatorを用意してwriteするのではなく、logの発生源から直接書くほうが throughputを出しやすい。ただし、1レコードずつ書き込まなければならないた め、fluentdのout pluginではthroughputが出しづらい。 1 shard 1000 put request / sec. の制限がある。大きなオブジェクトを書き込まない 限り、byte制限よりこちらに引っかかるケースのほうが多い。とはいえ、シャー ドの追加は簡単なので、大きな問題にはならない。緩和申請は計画的に。 書き込み時の負荷を意識する必要がないので楽。とりあえず入れておけば、 Consumer側でよしなにできる。 Kinesis内に24時間残ってくれるのは便利。ただし、Kinesisへの書き込み失敗時の ハンドリングをする必要はある。
  26. 26. ざっくりとした使用感 - 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クエリを流し続けるのは手軽なユースケースになりそ う。
  27. 27. Kinesisへの移行で発生する作業 fluentdのexec_filterとかexecとかでやっていたことをKinesis Applicationに置き換える必要がある パーティションキーの考慮、consumeが失敗した場合のケア fluentdでいうaggregatorノードを作るのではなくて、ログを出す 各サーバから直接Kinesisに転送するような作りにしたほうが良さ そう 1行のログごとの書き込みなので、1ノードからのKinesisへの 書き込みスループットが現段階ではあまりでない。
  28. 28. Kinesis, こうなったら良い Kinesisのメトリクスも1min.ごとに見たい DynamoDB同様、batchWriteが欲しい ap-northeast-1! 東京リージョン!
  29. 29. カジュアルなまとめ Amazon Kinesisもっと使いましょう 東京リージョン待ってます
  30. 30. 参考資料
  31. 31. 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を利用して行っているところなど、わかりやすく説明され ています。
  32. 32. 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で取り扱う方法について説明されています。
  33. 33. 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に書き込みたいならこれが いいです
  34. 34. 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
  35. 35. credit 扉絵 https://www.flickr.com/photos/ 65220434@N02/13645528234/sizes/l
  36. 36. fluent-plugin-elasticsearch uken/fluent-plugin-elasticsearch https://github.com/uken/fluent-plugin- elasticsearch hostsオプションおすすめ Kibana向けにオプション作れるの便利 chunkサイズはES側の設定と合わせておくと良い
  37. 37. fluent-plugin-kinesis imaifactory/fluent-plugin-kinesis https://github.com/imaifactory/fluent-plugin-kinesis まだrubygemsには上がってない fluentのchunkと、Kinesisのwrite APIの相性が… throughput出すならbatchで書き込めないとつらそ う

×