1

多くのファイルを処理し、各ファイルから複数のファイルを作成するHadoopジョブを作成しています。私はそれらを書くために「MultipleOutputs」を使用しています。少数のファイルでは問題なく動作しますが、多数のファイルでは次のエラーが発生します。例外はMultipleOutputs.write(key、value、outputPath);で発生します。ulimitと-Xmxを増やしてみましたが、役に立ちませんでした。

2013-01-15 13:44:05,154 FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.hdfs.DFSOutputStream$Packet.<init>(DFSOutputStream.java:201)
    at org.apache.hadoop.hdfs.DFSOutputStream.writeChunk(DFSOutputStream.java:1423)
    at org.apache.hadoop.fs.FSOutputSummer.writeChecksumChunk(FSOutputSummer.java:161)
    at org.apache.hadoop.fs.FSOutputSummer.flushBuffer(FSOutputSummer.java:136)
    at org.apache.hadoop.fs.FSOutputSummer.flushBuffer(FSOutputSummer.java:125)
    at org.apache.hadoop.fs.FSOutputSummer.write1(FSOutputSummer.java:116)
    at org.apache.hadoop.fs.FSOutputSummer.write(FSOutputSummer.java:90)
    at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:54)
    at java.io.DataOutputStream.write(DataOutputStream.java:90)
    at org.apache.hadoop.mapreduce.lib.output.TextOutputFormat$LineRecordWriter. writeObject( TextOutputFormat.java:78)
    at org.apache.hadoop.mapreduce.lib.output.TextOutputFormat$LineRecordWriter. write(TextOutputFormat.java:99)
    **at org.apache.hadoop.mapreduce.lib.output.MultipleOutputs.write( MultipleOutputs.java:386)
    at com.demoapp.collector.MPReducer.reduce(MPReducer.java:298)
    at com.demoapp.collector.MPReducer.reduce(MPReducer.java:28)**
    at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:164)
    at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:595)
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:433)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)

何か案は?

4

2 に答える 2

0

多数のファイルで機能しない場合は、データノードで提供できるファイルの最大数に達したことが原因である可能性があります。dfs.datanode.max.xcieversこれは、hdfs-site.xmlで呼び出されるプロパティで制御できます。

ここで推奨されているように、ジョブを正しく実行できるものにその値を上げる必要があります。4096を推奨しています。

<property>
    <name>dfs.datanode.max.xcievers</name>
    <value>4096</value>
</property>
于 2013-01-15T22:41:42.147 に答える
0

削減タスクの数を1から8に増やし、io.sort.mbの値をmapred.task.timeoutに増やしました。

詳細

このリンクは役に立ちました-Cloudera ブログ

于 2013-01-25T22:57:39.900 に答える