2017-04-19 12 views
0

私は自分の減速で、このメモリエラーを取得しています:EMR - MapReduceのメモリエラー

Container is running beyond physical memory limits. Current usage: 6.1 GB of 6 GB physical memory used; 10.8 GB of 30 GB virtual memory used.

はそうそう、物理メモリの問題がmapreduce.reduce.memory.mbを増やすことで解決することができるものがありますが、私は理由を理解していませんそれは起こる。

パイプにデータが追加されるほど、このメモリの問題が発生する可能性が高くなります。データが既にディスクに書き込まれていたはずなので、減速材が通過すると、ほとんどの私の減速材(約90%)が通過し、記憶が解放されるはずでした。

私はここで何が欠けていますか?

答えて

0

デフォルトでは、コンテナにはメモリが事前に割り当てられています。この場合、すべてのリデューサコンテナは、クラスタ全体の空きメモリに関係なく、6 GBのメモリを持ちます。これらのコンテナのJVMは、少なくともHadoop2ではなく、コンテナ間で再利用または共有されません。つまり、あるレデューサーのメモリがメモリ6 GBの制限を超えた場合、他の空きコンテナからリソースを取得しません(ifこれはあなたの懸念です)

今のところ、常にメモリの上にある(90%が渡された)わずかなだけで、データ内に可能なSKEWが示唆されます。つまり、この減速器が他の入力グループよりも多くのキーを処理している可能性があります。

+0

ありがとうございます。エラーが見つかりました...レデューサーの出力が多すぎるファイルを作成し、おそらくすべてのファイルのハンドラーを持っているため、メモリが過負荷になりました。私は減速機の応答で複数のファイルを持つことができない理由を完全には理解していませんが、おそらくシャッフルステップと関係があります。 – refaelos