运行oozie工作流时出现IOException: Filesystem closed异常

11

我们正在oozie中运行一个工作流。它包含两个步骤:第一个是MapReduce任务,它在HDFS中生成文件;第二个任务是将这些文件中的数据复制到数据库中。

两部分都成功完成,但最后oozie抛出了一个异常,将其标记为失败的过程。

以下是异常信息:

2014-05-20 17:29:32,242 ERROR org.apache.hadoop.security.UserGroupInformation:   PriviledgedActionException as:lpinsight (auth:SIMPLE) cause:java.io.IOException: Filesystem   closed
2014-05-20 17:29:32,243 WARN org.apache.hadoop.mapred.Child: Error running child
java.io.IOException: Filesystem closed
    at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:565)
    at org.apache.hadoop.hdfs.DFSInputStream.close(DFSInputStream.java:589)
    at java.io.FilterInputStream.close(FilterInputStream.java:155)
    at org.apache.hadoop.util.LineReader.close(LineReader.java:149)
    at org.apache.hadoop.mapred.LineRecordReader.close(LineRecordReader.java:243)
    at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.close(MapTask.java:222)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:421)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    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:1408)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)

2014-05-20 17:29:32,256 信息 org.apache.hadoop.mapred.Task:正在运行任务的清理

有什么想法吗?

3个回答

11

在访问文件系统时,请使用以下配置。

Configuration conf = new Configuration();
conf.setBoolean("fs.hdfs.impl.disable.cache", true);
FileSystem fileSystem = FileSystem.get(conf);

8
有点简略且缺乏推理 :) - magor

5

我曾经遇到过一个类似的问题,导致出现了java.io.IOException: Filesystem closed的错误。最终,我发现是在别的地方关闭了文件系统。Hadoop文件系统API返回相同的对象。所以如果我关闭了一个文件系统,那么所有的文件系统都会被关闭。这个答案给了我解决方案。


那是一条非常简单但有价值的建议。我在finally语句中关闭了连接,而这个语句总是会执行(即使有达到了return语句,详情请参考:https://dev59.com/tnVD5IYBdhLWcg3wKoSH#65049)。 - chAlexey

0
我从上面回答中链接的线程中偷了这个,但我认为将其作为答案发布是值得的。如果你使用 FileSystem.get ,那么你会得到一个其他代码可能关闭的全局 FileSystem。另一个线程的答案对我起了作用:“你必须使用 FileSystem.newInstance 来避免使用共享连接。它将为您提供唯一的、非共享的实例。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接