最適なパフォーマンスを実現するために、特定のデータセットに使用するマッパーとレデューサーの数を決定する要因は何ですか? 私は Apache Hadoop Map Reduce プラットフォームに関して話しています。
2 に答える
Clouderaのブログによると
Mapper と Reducer の最適な数を設定しましたか?
マッパーの数は、デフォルトで HDFS ブロックごとに 1 つに設定されています。これは通常、適切なデフォルトですが、ヒント 2 を参照してください
。reducer の数は、クラスター内の reduce スロットの数に設定するのが最適です (障害を考慮して数を差し引いた数)。これにより、リデューサーは単一のウェーブで完了することができます。
主に、マッパーの数は、 InputFormat#getInputSplitsメソッドによって生成されるInputSplitの量に依存します。特に FileInputSplit は、ブロックとファイルに関して入力ディレクトリを分割します。gzip されたファイルは分割されず、入力ファイル全体が 1 つのマッパーに渡されます。
Two files:
f1 [ block1, block2],
f2 [block3, block4]
becomes 4 mappers
f1(offset of block1),
f1(offset of block2),
f2(offest of block3),
f2(offset of block4)
その他の InputFormat には、ファイル分割のための独自の方法があります (たとえば、Hbase は領域境界で入力を分割します)。
CombineFileInputFormat を使用しない限り、マッパーを効果的に制御することはできません。ただし、ほとんどのマッパーは、データが存在するホスト上で実行する必要があります。
ほとんどの場合、ユーザーによって指定された削減の数。それは主に、レデューサーで実行する必要がある作業の量に依存します。ただし、マッパーがレデューサー間でデータを分散するために使用するアルゴリズムのため、それらの数はそれほど多くないはずです。Hive などの一部のフレームワークは、レデューサーあたりの経験的な 1GB 出力を使用してレデューサーの数を計算できます。
一般的な経験則: リデューサーあたり 1 GB を使用しますが、クラスター容量の 0.8 ~ 1.2 を超えないようにしてください。