今天在跑一個任務的時候,報錯java.nio.channels.ClosedChannelException。
INFO mapreduce.Job: Task Id : attempt_1521014335754_1262_r_000000_2, Status : FAILED Error: java.nio.channels.ClosedChannelException at org.apache.hadoop.hdfs.DataStreamer$LastExceptionInStreamer.throwException4Close(DataStreamer.java:324) at org.apache.hadoop.hdfs.DFSOutputStream.checkClosed(DFSOutputStream.java:153) at org.apache.hadoop.fs.FSOutputSummer.write(FSOutputSummer.java:105) at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:58) at java.io.DataOutputStream.write(DataOutputStream.java:107)
報錯的位置在代碼context.write(outkey, outVal);這行。
原因是我該reducer的setup的時候,調用了HDFS文件系統去讀一個文件(雖然很少有這么用的),讀完之后,fs.close();
我在想,一個setup中關閉一個DHFS的FileSystem對象,盡然會影響到context.write();
//TODO 有空了看下源碼,找找什么情況之后再補充這個帖子。
