Hadoopでは、レデューサーの数を設定していない場合、いくつのレデューサーが作成されますか?
同様のマッパーの数は(合計データサイズ)/(入力分割サイズ)に依存します。データサイズが1 TB=で、入力分割サイズが100 MBの場合。マッパーの数は(1000 * 1000)/ 100 = 10000(1万)になります。
減速機の数はどの要因に依存していますか?ジョブに対していくつのレデューサーが作成されますか?
削減数はどれくらいですか?(From official documentation)
適切な削減数は、0.95または1.75に(ノード数)*(ノードあたりの最大コンテナ数)を掛けたもののようです。
0.95を使用すると、すべてのreduceがすぐに起動し、マップが完了するとマップ出力の転送を開始できます。 1.75を使用すると、より高速なノードは最初のラウンドの還元を完了し、2番目の還元波を起動して、負荷分散のはるかに優れた仕事をします。
Reduceの数を増やすと、フレームワークのオーバーヘッドが増加しますが、負荷分散が増加し、障害のコストが低下します。
上記のスケーリング係数は、投機的タスクと失敗したタスクのためにフレームワーク内のいくつかの削減スロットを予約するために、整数よりわずかに小さくなっています。
この記事では、マッパーの数についても説明します。
マップの数は?
マップの数は通常、入力の合計サイズ、つまり入力ファイルのブロックの合計数によって決まります。
マップの並列処理の適切なレベルは、ノードごとに約10-100マップのようですが、非常にcpu-ライトマップタスク。タスクのセットアップにはしばらく時間がかかるため、マップの実行には少なくとも1分かかるのが最適です。
したがって、10TBの入力データが予想され、ブロックサイズが128MBの場合、最終的には82,000マップ、Configuration.set(MRJobConfig.NUM_MAPS, int)
(フレームワークにヒントを提供するだけ)を使用してそれをさらに高く設定しない限り。
レデューサー数のデフォルト値1を変更する場合は、以下のプロパティ(hadoop 2.xバージョンから)をコマンドラインパラメーターとして設定できます。
mapreduce.job.reduces
OR
あなたはプログラムで設定することができます
job.setNumReduceTasks(integer_numer);
関連するもう1つのSEの質問を見てください: Hadoopのレデューサーの理想的な数は何ですか?
デフォルトでは、レデューサーの数は1に設定されています。
パラメータを追加することで変更できます
_mapred.reduce.tasks
_コマンドライン、ドライバコード、または渡すconfファイルで。
例:コマンドライン引数:_bin/hadoop jar ... -Dmapred.reduce.tasks=<num reduce tasks>
_または、ドライバーコードではconf.setNumReduceTasks(int num);
推奨される読み: https://wiki.Apache.org/hadoop/HowManyMapsAndReduces