【发布时间】:2016-08-09 20:17:49
【问题描述】:
在 Reduce 设置方法中,我试图关闭 BufferedReader 对象并获得 FileSystem 已关闭异常。它不会一直发生。这是我用来创建BufferedReader 的代码。
String fileName = <some HDFS file path>
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path hdfsPath = new Path(filename);
FSDataInputStream in = fs.open(hdfsPath);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
我从 bufferedReader 读取内容,一旦完成所有读取,我就关闭它。
这是读取它的一段代码
String line;
while ((line = reader.readLine()) != null) {
// Do something
}
这段代码关闭了阅读器。
if (bufferedReader != null) {
bufferedReader.close();
}
这是我执行bufferedReader.close() 时发生的异常的堆栈跟踪。
我,[2013-11-18T04:56:51.601135 #25683] 信息——: 尝试_201310111840_142285_r_000009_0:在 org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:565)
我,[2013-11-18T04:56:51.601168 #25683] 信息 -- : 尝试_201310111840_142285_r_000009_0:在 org.apache.hadoop.hdfs.DFSInputStream.close(DFSInputStream.java:522)
我,[2013-11-18T04:56:51.601199 #25683] 信息——: 尝试_201310111840_142285_r_000009_0:在 java.io.FilterInputStream.close(FilterInputStream.java:155)
我,[2013-11-18T04:56:51.601230 #25683] 信息——: 尝试_201310111840_142285_r_000009_0:在 sun.nio.cs.StreamDecoder.implClose(StreamDecoder.java:358)
我,[2013-11-18T04:56:51.601263 #25683] 信息 -- : 尝试_201310111840_142285_r_000009_0:在 sun.nio.cs.StreamDecoder.close(StreamDecoder.java:173)
我,[2013-11-18T04:56:51.601356 #25683] 信息 -- : 尝试_201310111840_142285_r_000009_0:在 java.io.InputStreamReader.close(InputStreamReader.java:182)
我,[2013-11-18T04:56:51.601395 #25683] 信息 -- : 尝试_201310111840_142285_r_000009_0:在 java.io.BufferedReader.close(BufferedReader.java:497)
我不确定为什么会发生此异常。这不是多线程的,所以我不希望有任何形式的竞争条件。你能帮我理解吗?
谢谢,
文克
【问题讨论】:
-
这里发布了解决此问题的方法:stackoverflow.com/a/24387114/139298
标签: java hadoop mapreduce hdfs