Amazon Elastic MapReduceの使い方─Hadoopより手軽にはじめる大規模計算
第7回 Amazon Elastic MapReduceのパフォーマンスを引き出すためのHadoopの基礎知識
Amazon Elastic Mapreduce
前回の予告とは若干異なりますが,
HDFSではサイズが大きいファイルを扱うほうが効率的
あえて今回まで触れませんでしたが,
HDFSは,
ブロックの意味は,
なぜブロックサイズがこのように大きいかといえば,
- ※
- 小さいファイルを複数扱うとNameNodeでメモリオーバーという問題が起きますが,
ここでは割愛させていただきます。
Map数とReduce数はどのように決まるのか
もう1つのMapReduceは,
MapとReduceでは,
- Map
- →splitという単位で分散され,
ユーザが特に意識することはない - Reduce
- →実際にReduceさせる数をユーザが指定する。デフォルト値は1
(1つしかReduceが起動されない)
なぜReduceはユーザが指定するのかというと,
splitの単位を指定する場合
Map数はsplitという単位で分散されると前述しましたが,
①mapred-site.
mapred.min.split.size:最小splitサイズ
mapred.max.split.size:最大splitサイズ
②コード中で指定する
FileInputFormat.setMinInputSplitSize(job, minSize);
FileInputFormat.setMaxInputSplitSize(job, minSize);
何も指定しないのであれば,
では,
protected long computeSplitSize(long blockSize, long minSize, long maxSize) {
return Math.max(minSize, Math.min(maxSize, blockSize));
}
かんたんにまとめると以下のようになります。
- 指定した最大値とブロックサイズの小さいほうを比較する
- 出た値と指定した最小値の大きいほうに決める
EMRでMap数を増やすには
ここまで読んで気づいたかもしれませんが,
たとえば1GBのファイルをMapReduceで処理する場合を考えてみましょう。HDFSでは,
一方S3の場合は,
以上のことから,
- mapred-site.
xmlに適切なsplit値を設定し, bootstrapでEMRを設定する。Javaなどのコードであれば, InputFormatで適切なsplit値を設定する - 大きいファイルであれば,
S3に上げるときに, HDFSと同様, ブロックとしてファイルを細かく分ける
以上,
次回は前回の予告どおり,
バックナンバー
Amazon Elastic MapReduceの使い方─Hadoopより手軽にはじめる大規模計算
- 第8回 Amazon Elastic MapReduceのパフォーマンスをモニタリングする
- 第7回 Amazon Elastic MapReduceのパフォーマンスを引き出すためのHadoopの基礎知識
- 第6回 bootstrapを設定するには
- 第5回 デバッグモードを使いこなす
- 第4回 Java SDKでEMRを起動する
- 第3回 Amazon Elastic MapReduce Ruby ClientでEMRを起動する
- 第2回 Web ConsoleからElastice MapReduceを起動させる
- 第1回 Amazon Elastic MapReduceを使う準備をする