2016-04-11 4 views
0

hadoopでmapreduceプログラムを実行しようとすると、クラスタで次のようなエラーが表示されます。このコードはファイルサイズが小さかったデータに対してうまく動作しますが、hadoopは次のエラーをスローし、クラスタに十分な場所を持っています。私は6gbから10gbに減速器のヒープスペースを増やしてみましたが、まだ失敗しました。 タグはhadoopでシャッフルエラーが発生しました

を使用mapreduce.[mapper/reducer].java.ptsのparamを使用して、JVMのサイズを大きく

Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#7 at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:56) at org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:46) at org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput.(InMemoryMapOutput.java:63) at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.unconditionalReserve(MergeManagerImpl.java:305) at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.reserve(MergeManagerImpl.java:295) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:514) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:336) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:193)

+0

還元剤のメモリーを増やしましたか? mapreduce.reduce.memory.mb – kecso

+0

はい私が – Pratik

答えて

0

この問題を解決するために私を助けてください。レデューサー/マッパーメモリーの約80〜85%の値が示唆されています。 これらの最初のものに直接的なHadoop 2の同等物はありません。ソースコード内のアドバイスは他の2つを使用することです。 mapred.child.java.optsは引き続きサポートされています(ただし、存在する場合は、他の2つの固有の設定によって上書きされます)。

+0

ただ、タイプミスを10GBために6ギガバイトから減速メモリmapreduce.reduce.memory.mbが増加しています。 のMapReduce [マッパー/減速は] -Xmx {-server を.java.opts mem} m – kecso

+0

私はそれを試して、その作業 – Pratik

0

Shuffleフェーズのメモリ計算のためのいくつかの洞察を提供するように、コードの実行に使用しているMap Reduceプロパティを記述した方が、より明確になりました。

memorylimit = Runtime.getRuntime()。maxMemory()*(mapreduce.reduce.shuffle.input.buffer.percent)。

mapreduce.reduce.shuffle.input.buffer.percentのdefualt値は0.9であり、あなたが< 1であるためにあなたのmemoryLimitのために0.2にその値を小さくすることができますので、あなたは含めることができるプロパティは次のとおりです。

<property> 
    <name>mapreduce.reduce.shuffle.input.buffer.percent</name> 
    <value>0.20</value> 
</property> 
<property> 
    <name>mapreduce.reduce.shuffle.parallelcopies</name> 
    <value>4</value> 
</property> 

詳細を参照するには、https://issues.apache.org/jira/browse/MAPREDUCE-6447

関連する問題