hadoop java.nio.channels.ClosedChannelException

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