2016-05-10 3 views
0

私はノードが4つしかないが、多くのディスクスペース(200TB)を持つhadoop Clouderaシステムを使用しています。豚:4ノードクラスタを持つマップの最適数?

私のpigのスクリプトでは、約200Gbというサイズの月間ファイルがいくつか読み込まれています。

豚のスクリプトに約1年間のデータを読み込むと、Pigは約15k mappersを作成し、処理には約3時間かかります(reduceステップを含む)。

私はデータの3年間(約5TB)をロードする場合は代わりに、そして豚を約30K mappersを作成し、基本的にすべてのノードが15時間以上処理した後に不健康になります。

ここで何らかのボトルネックがありますか? また、いくつかのデフォルトオプションがありますか?私の豚のスクリプトは非常に基本的です:私はグループ化する、私は数えます。

多くの感謝!

+1

このノードのメモリと各コンテナに設定したサイズはどれですか –

+0

ありがとうSachin!これは私が\t false'を は '合計PMEMは' PMEMの執行が\t true'を '合計VCoresを有効に120 GB' コンテナ\t用に割り当てられた有効252.00 GB' ' VMEM執行コンテナ\tに割り当てられた合計のHadoopサーバー 'VMEMから見たものですコンテナに割り当てられました\t 16' 'NodeHealthyStatus \t true' –

+1

コンテナごとにメモリを送信できますか?また上記の設定を見ると、より多くのマッパーが必要になるようですが、メモリの制限のために並列性の多くを達成することはできません。ソリューションは、コンテナを生成するノードの数を増やしたり、再度ノードごとのコンテナの数を増やす –

答えて

1

私はあなたがマッパーと減速スロットの適切な量を配分していることを確認します(決してより良い後半)を答えるために遅刻するが、私は私のアイデアを共有しましょう、

1)マッパーと減速回数の設定 かもしれませんタスクトラッカーノードの場合 MapTask - mapred.tasktracker.map.tasks.maximum ReduceTask - mapred.tasktracker.reduce.tasks.maximum例: 例:ノードが36個あり、各ノードに4つのノードクラスタがあるとしましょうタスクには4GBのRAMが必要です。一般的な目的のために4GBを与えると、残りの32GBはタスクによって使用される (map/reduce)と仮定できます。 4ギガバイトを必要とする一つのタスク、我々は8つのタスク(4Map、4Reduce)

2)各JVMのために利用できるRAM RAMの割り当てをフルに活用するに終わるだろう - mapred.child.java.opts -Xmx3500M 例: 上記の例に基づいて各タスクトラッカーのタスク数を設定したとすると、最大RAMサイズはタスクごとに3500Mに設定できます。

これらの2つのオプションに基づいて、クラスタから最高のパフォーマンスを引き出すことができます。さらに流出に対処している場合は、io.sort.factorとio.sort.mbを参照する必要があります。

上記のオプションに加えて、複数のユーザーが同じクラスタを使用している場合は、公正なスケジューラ/フェアプールを使用して、単一のユーザーがクラスタ全体を停止させないようにすることをお勧めします。

関連する問題