More Related Content Similar to Data Engineering at VOYAGE GROUP #jawsdays Similar to Data Engineering at VOYAGE GROUP #jawsdays (20) More from VOYAGE GROUP (20) Data Engineering at VOYAGE GROUP #jawsdays17. ELB
EC2
EC2 EC2
EC2
request
EC2
S3
DynamoDB
EMR ELB
EC2
EC2 EC2
EC2
http api
fluentd
fluentd
(aggregator)
out_exec_filter
out_dynamodb servlet (scala)
dynamic-dynamo
EC2
Growth
Forecast
EC2
EC2
VPC 1
VPC 1
VPC 2
(targeting)
VPC Peering
VPC Peering
ephemeral
cluster
Event Streamノード
c3.xlarge複数台
td-agent2
18. ELB
EC2
EC2 EC2
EC2
request
EC2
S3
DynamoDB
EMR ELB
EC2
EC2 EC2
EC2
http api
fluentd
fluentd
(aggregator)
out_exec_filter
out_dynamodb servlet (scala)
dynamic-dynamo
EC2
Growth
Forecast
EC2
EC2
VPC 1
VPC 1
VPC 2
(targeting)
VPC Peering
VPC Peering
ephemeral
cluster
out_exec_filterでログを加工
DynamoDBに書き込み
23. <match hoge.log>
type exec_filter
command ./our/special/filter/command
buffer_type file
buffer_path /path/to/ephemeral/disk/hoge
</match>
!
<match filtered.hoge.log>
type dynamodb
dynamo_db_table our_targeting_table
buffer_type file
buffer_path /path/to/ephemeral/disk/filtered
...
<secondary>
type s3
s3_bucket your-bucket
s3_region ap-northeast-1
s3_object_key_format ...
buffer_type file
buffer_path /path/to/ephemeral/disk/filtered.secondary
...
</secondary>
</match>
in_forwardでおくられてきた
ログをうけとり、フィルターする
filterしたログをDynamoDBに書き込む
batchWriteItemを利用
もし書き込みが失敗したらs3へ
書ききれてませんが、s3への転送もしてます
24. <match hoge.log>
type exec_filter
command ./our/special/filter/command
buffer_type file
buffer_path /path/to/ephemeral/disk/hoge
</match>
!
<match filtered.hoge.log>
type dynamodb
dynamo_db_table our_targeting_table
buffer_type file
buffer_path /path/to/ephemeral/disk/filtered
...
<secondary>
type s3
s3_bucket your-bucket
s3_region ap-northeast-1
s3_object_key_format ...
buffer_type file
buffer_path /path/to/ephemeral/disk/filtered.secondary
...
</secondary>
</match>
バッファは全てファイル
ephemeral diskに
35. プロセッサ
id: 1
k: 3
id: 1
k: 2
id: 1
k: 1
データ 条件がくるまで
滞留させる必要がある
あるidがk: 1とk: 2両方を満たしていたら通したい
留めるデータが増えるケース
37. ストリーム処理における状態
プロセッサ
id: 1
k: 3
id: 1
k: 2
id: 1
k: 1
データ 条件がくるまで
滞留させる必要がある
対象とする時間の幅(window)が長くなれば
なるほど多くのデータをストリーム処理可能
な場所に保持する必要がある。データの流量
が増えるとそれだけ多くのリソース(RAM
等)が必要になる。
あるidがk: 1とk: 2両方を満たしていたら通したい
40. ELB
EC2
EC2 EC2
EC2
request
EC2
S3
DynamoDB
EMR ELB
EC2
EC2 EC2
EC2
http api
fluentd
fluentd
(aggregator)
out_exec_filter
out_dynamodb servlet (scala)
dynamic-dynamo
EC2
Growth
Forecast
EC2
EC2
VPC 1
VPC 1
VPC 2
(targeting)
VPC Peering
VPC Peering
ephemeral
cluster
EMRでDynamoDBとS3からデータ抽出
再集計してDynamoDBへ書き込み
41. EMR / Hive
• Amazon Hadoop 2.4.0, Hive 0.13.1, core: m1.xlarge * 30,
task: c3かr3系統をspot instanceで。専用のSecurity Group
を用意。基本的にRCFileで扱う。
• 200クエリ / 日。1日1クラスタ立ち上げて、ひたすらそこに投
げている。DynamoDBとs3からデータを読み込み、集計し、s3
に書き出している。使うHiveクエリは管理ツールから自動生成
or リポジトリにコミットしてJenkinsからs3に上げている。
• アドホックに使う場合には都度別クラスタを立ち上げている。
分析者も手元からThrift経由で。
42. SET dynamodb.throughput.read.percent=0.8;
!
CREATE EXTERNAL TABLE IF NOT EXISTS users (
id string,
seg string,
created bigint
)
stored as rcfile
location 's3://path/to/my/user/table';
!
CREATE EXTERNAL TABLE if not exists
users_from_dynamodb (
id string,
seg string,
created bigint)
STORED BY
'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES (
"hive.jdbc.update.on.duplicate" = "true",
"dynamodb.table.name" = "our_special_user_table_name",
"dynamodb.column.mapping" = "id:id,seg:seg,created:created");
!
INSERT OVERWRITE TABLE users SELECT * FROM users_from_dynamodb;
DynamoDBのthroughputをどれくらい使うか
DynamoDBカラムとHiveテーブルの
カラム対応関係
DynamoDBから全データを
抽出してs3に書き込み
60. ELB
EC2
EC2 EC2
EC2
request
EC2
S3
DynamoDB
EMR ELB
EC2
EC2 EC2
EC2
http api
fluentd
fluentd
(aggregator)
out_exec_filter
out_dynamodb servlet (scala)
dynamic-dynamo
EC2
Growth
Forecast
EC2
EC2
VPC 1
VPC 1
VPC 2
(targeting)
VPC Peering
VPC Peering
ephemeral
cluster
out_exec_filterでログを加工
DynamoDBに書き込み
65. DynamoDB Tips
• 1Itemあたりのバイト数を小さくする(1KBを超え
ないように
• hot keyを作らないようにする(hash keyに同じID
が大量に存在する状態にしないようにする
• DynamoDB - EC2の新規コネクションはそれなり
にコストが高い( 10ms)ので、コネクションを
プールする(つながれば安定して速い
参考: http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-dynamodb
68. 部分的にBigQueryを利用
• EC2 -> S3 -> SQS -> EC2(worker) -> GCS
• アドホックな分析用はこちらに移行中
https://cloud.google.com/bigquery/?hl=ja
70. 現状の使い分け
• Large Batch: EMR + Hive
• Short Batch: BigQuery
• Stream Processing: Fluentd + out_exec_filter
参考: http://www.slideshare.net/tagomoris/hcj2014-sql
74. cf. Amazon
• Amazon Kinesis
Developer Managerの
Goさんの話
• AmazonのLeadership
PrinciplesのOwnership
について
• インフラチームもサービ
スチームもOwnershipを