今天在跑一个任务的时候,报错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 有空了看下源码,找找什么情况之后再补充这个帖子。