Amazon ElasticMapreduceメモ
Amazon ElasticMapreduceのテストを兼ねて性能測定を行ったので分かったことをメモ
ジョブフローの起動
ジョブフローを登録してからステータスが「RUNNING」に変わるまで4分~6分かかる
立ち上げるインスタンスの数が変わってもこの時間は変わらない
MapTaskの数
EMRに限らずHadoopの動作ですがインスタンス数などの起動設定に必要なのでメモ
入力に1GBのファイルを使用したところどのような構成にしても全て16個のMapTaskが生成された
MapTaskの数 = 入力ファイルのサイズ ÷ 64MB
圧縮した場合はBZip2とGZipで試した結果コーデックに関わらず1つの入力ファイルは
1つのMapTaskに割り当てられるみたい
ブロックサイズを変更すれば分割するサイズを変更することが可能
"fs.s3n.block.size"で指定する(デフォルトは67108864)
// ブロックサイズを32MBに設定 conf.setInt("fs.s3n.block.size", (67108864 / 2));
EC2インスタンス数の上限
EC2の同時起動台数上限を超えてインスタンスを立ち上げようとしたときキャンセルされる
(ステータスはFAILEDとなる)
Job flow failed with reason: The requested number of instances exceeds your EC2 quota
EC2のインスタンス同時起動台数はデフォルトで20台なのでEMRを使用する場合は
余裕をもって使用できるよう増やしておく
圧縮について
ローカルからS3への転送がすごく遅いので圧縮した方が嬉しいことが多い
圧縮ファイルを入力に渡すとHadoopが解凍してくれるので圧縮するだけで使用可能。
スプリット | 速度 | 圧縮率 | |
BZip2 | ○ | 遅い | 高い |
GZip | × | 速い | 中 |
Snappy | × | かなり速い | 低い |