0

マージ/コーピングが行われている間、reduce ステップで次のエラーが発生します。

java.io.IOException: Task: attempt_201306130308_0177_r_000002_0 - The reduce copier failed
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:384)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:217)
    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:1063)
    at org.apache.hadoop.mapred.Child.main(Child.java:211)
Caused by: java.io.IOException: Intermediate merge failed
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.doInMemMerge(ReduceTask.java:2703)
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.run(ReduceTask.java:2628)
Caused by: java.io.IOException: Rec# 13932: Failed to skip past record of length: 129
    at org.apache.hadoop.mapred.IFile$InMemoryReader.next(IFile.java:542)
    at org.apache.hadoop.mapred.Merger$Segment.next(Merger.java:220)
    at org.apache.hadoop.mapred.Merger$MergeQueue.adjustPriorityQueue(Merger.java:330)
    at org.apache.hadoop.mapred.Merger$MergeQueue.next(Merger.java:350)
    at org.apache.hadoop.mapred.Merger.writeFile(Merger.java:156)
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.doInMemMerge(ReduceTask.java:2687)
    ... 1 more

この場所にある IFile.java のコードを見ると、次のようになります。

long skipped = dataIn.skip(recordLength);
if (skipped != recordLength) {
     throw new IOException("Rec# " + recNo + ": Failed to skip past record of length: " + 
                             recordLength);
}

基本的に、どういうわけか、次のレコードのメモリ内読み取りに一貫性がありません。これはどのように可能ですか?バッファがメモリに完全に収まらず、メモリを増やす必要があるためですか?

次に何を試すべきか提案はありますか?

4

0 に答える 0