マッパーの数を指定しない場合、その数はどのように決定されますか?構成ファイル(mapred-site.xmlなど)から読み取られるデフォルト設定はありますか?
2 に答える
クリスが上で追加したものにさらに追加する:
マップの数は通常、入力ファイル内のDFSブロックの数によって決まります。ただし、DFSブロックサイズを調整してマップの数を調整する必要があります。
マップの適切な並列処理レベルは、ノードあたり約10〜100マップのようですが、CPUライトマップタスクの場合、これは最大300程度になる可能性があります。タスクのセットアップには時間がかかるため、マップの実行に少なくとも1分かかることが最善です。
JobConfのconf.setNumMapTasks(int num)を変更することで、マップタスクの数を増やすことができます。注:これにより、マップタスクの数が増える可能性がありますが、入力データの分割によってHadoopが決定する数よりも少ない数には設定されません。
最後に、マップの数を制御することは微妙です。mapred.map.tasksパラメーターは、マップ数のInputFormatへの単なるヒントです。デフォルトのInputFormatの動作は、バイトの総数を適切な数のフラグメントに分割することです。ただし、デフォルトの場合、入力ファイルのDFSブロックサイズは入力分割の上限として扱われます。分割サイズの下限は、mapred.min.split.sizeを介して設定できます。
したがって、10TBの入力データが予想され128MBのDFSブロックがある場合、mapred.map.tasksがさらに大きくない限り、最終的に82kのマップになります。最終的に、InputFormatはマップの数を決定します。
それはいくつかの要因に依存します:
- 入力フォーマットとそのフォーマットの特定の構成プロパティ
- ファイルベースの入力形式(TextInputFormat、SequenceFileInputFormatなど)の場合:
- 入力ファイル/パスの数
- ファイルは分割可能です(通常、圧縮ファイルは分割できません。SequenceFilesは例外です)
- ファイルのブロックサイズ
おそらくもっとありますが、うまくいけばあなたはアイデアを得るでしょう