Hadoopクラスターを構成する場合、クラスターのマッパー/リデューサーの数を設定するための科学的方法は何ですか?
4 に答える
公式はありません。コアの数とメモリの量によって異なります。マッパーの数+レデューサーの数は、一般的にコアの数を超えてはなりません。マシンはタスクトラッカーとデータノードデーモンも実行していることに注意してください。一般的な提案の1つは、レデューサーよりもマッパーの方が多いことです。もし私があなたなら、それを試すために妥当な量のデータを使って私の典型的な仕事の1つを実行するでしょう。
306ページの「HadoopTheDefiniteGuide、第3版」からの引用
MapReduceジョブは通常I/Oバウンドであるため、より良い使用率を得るためにプロセッサーよりも多くのタスクを持つことは理にかなっています。
オーバーサブスクリプションの量は、実行するジョブのCPU使用率によって異なりますが、経験則として、プロセッサよりも1〜2倍多くのタスク(マップタスクとリデュースタスクの両方をカウント)を設定することをお勧めします。
上記の引用のプロセッサは、1つの論理コアに相当します。
ただし、これは理論上のものであり、ほとんどの場合、各ユースケースは別のユースケースとは異なるため、いくつかのテストを実行する必要があります。しかし、この数値はテストの良いスタートになる可能性があります。
おそらく、レデューサーの遅延読み込みも検討する必要があります。これにより、必要に応じてレデューサーを後で開始できるため、基本的に、マップスロットの数を増やすことができます。これについてはあまり考えていませんが、役に立つようです。
Hadoop Gyanからの引用-私のブログ:
マッパーの数は、前述のデータ局所性の原則に従って決定されます。データの局所性の原則:Hadoopは、データがローカルに存在するノードでマップタスクを実行して、ネットワークとノード間の通信遅延を最適化するために最善を尽くします。入力データは分割されて異なるマップタスクに供給されるため、そのマップタスクに供給されるすべてのデータを単一のノードで使用できるようにすることが望ましいです。HDFSはブロックサイズ(64M)に等しいサイズのデータのみを保証するため、 1つのノードに存在する場合は、マップタスクがこのデータローカリゼーションを利用できるように、分割サイズをHDFSブロックサイズと等しくすることをお勧めします。したがって、マッパーあたり64Mのデータ。一部のマッパーの実行時間が非常に短い場合は、マッパーの数を減らして、1分ほど長く実行するようにしてください。
レデューサーの数は、クラスター内のリデューススロットの数よりもわずかに少なくする必要があります(スロットの概念は、クラスターの構成中にジョブ/タスクトラッカーのプロパティで事前構成されます)。これにより、すべてのレデューサーが1つのウェーブで終了します。クラスターリソースを最大限に活用します。