【セッションレポート】Developers.IO 2015 Treasure DataのAWS活用法 #cmdevio2015B

2015.03.31

はじめに

Developers.IO 2015にスタッフとして参加しました。
trackBで行われた、「Treasure DataのAWS活用法」についてのレポートです。

セッション概要

Treasure Dataは、データの収集・蓄積・分析をクラウド上で提供するデータマネージメントサービスです。

現在はAWS/IDCF上でサービスを展開しているようです。

今回のセッションはTreasure DataのサービスがAWS上でどのようにスケーラブルなサービスを構築しているかお話をしていただきました。

skitch

スピーカーはトレジャーデータ株式会社中川 真宏さんです。

内容について

Treasure Data System Overview

skitch

Treasure Data Systemの概要です。

・Job Queue
RDB上に作られている

・worker
データのインポートやクエリを担当する
HadoopやPrestoにクエリを投げる

Plazmaについて

Plazmaとはデータを保管/処理する仕組みです。

skitch

・Data import
50万レコードが毎秒インポートされている
430億レコードが1日にインポートされている

・Hive Query
1日に2兆レコードを読んでいる
1日3ペタほどのデータを処理している

・Presto Query
1日、1万クエリ以上処理している

AWSのコンポーネント

AWSのコンポーネントは下記を使用しています。

EC2
・Hadoop / Presto Clusters
・API Servers

S3
・MessagePack Columnar Storage

RDS
・MySQL for service information
・PostgreSQL for Plazma metadata
・Distributed Job Queue / Schedular

Cloud Watch
・Monitor AWS service metrics

ELB
・Endpoint for APIs
・Endpoint for Heroku

ElastiCache
・Store TD monitoring data
・Event de-duplication for mobile SDKs

EMRやSQSは使用していないようです。

EMRを使用しない理由として下記があります。

■マシンリソースとストレージを分けた
・データ量が増えているがクエリ量は増えていない
・データ量を増やすためにはノードを増やす必要がある
・リソースは余っている状態になるのでコストがもったいない
・クラウドを使用しているのでリソースを分けた

■HDFSは結構問題があるのでできればHDFSは使用したくない
・HDFSがクラッシュする
・HDFS clusterのアップデートが難しい

そのためS3を使用している

データインポーティングの話

skitch

Fluentdにデータをあげるが
レイテンシーやスループットの問題があるので
1レコードずつではなくファイルにしてある程度チャンクにまとめている

FluentdはチャンクにUnique IDを付与するので
Import Queueで重複検証をすることができる

Import QueueはMySQLを使用している
SQSにしない理由はSQSで初め作った時にデータを投げ続けると
重複が発生したのでSQSは使用しないことにした。

skitch

ImoprtwokerからPostgreSQLにデータを入れる
・Realtime Storage
→リアルタイム性
→時間をベースに
・Archive Storage
→S3を使用しているので小さいデータを入れるのは効率が良くないのでまとめてアップ

データプロセッシング

skitch

列ごとに保存、データ解析の鉄板
独自絡むストレージを作っている

column-based partitioning
time-based partitioning
codeだけ読んで解決できる

S3の問題 Eventual Consistency

1. Writing data / metadata first
> At this time, data is not visible
2. Check S3 data is available or not
> GET, GET, GET…
3. S3 data become visible
> Query includes imported data!

ネットワークコスト

・TDの場合
1000以上のコネクションをS3に貼っている

・recoverable error
→エラーをtdにためて自動でリトライ

・stall checker
進捗をチェックしてkill

リトライ処理

・S3のエラー
500
503
404
→リトライする

syntax error semantic error
exceeded task memory size
→リトライしない

Internal failureはリトライする

リトライ使うことで安定したデータが取れる

 PostgreSQLの落とし穴

skitch

ミスマッチが起きる可能性がある
tcpのコネクションは切れるけど裏で動いている
そのためCloudWatchだけみてるとはまる
幾つかの拡張機能が使用されていない

結論

skitch

リソースとストレージは分ける
疎結合!
AWSはいくつか落とし穴があるけど避けることができる
たくさんのトレードオフがある
既存のコンポーネントを使用するか、新しいコンポーネントを使用するか
基本にこだわる!

 まとめ

ビッグデータについて初めてのセッションに参加しましたが、AWSを使用しているエンジニアとしてはどのようにAWSを使用してデータを解析、保存、分析しているか詳しく説明されておりとても興味深いセッションでした。

またセッションの中で50万レコードが毎秒インポートされているとお話がありとても驚きました。

 発表資料

[slideshare id=46410399&doc=developers-150329021913-conversion-gate01]