我正在使用 s3distcp 将文件从 HDFS 复制到 Amazon S3。最近,我开始收到 reducer 任务的“Stream Closed”错误。我注意到该错误仅发生在同一个 reducer 任务下有多个线程(每个线程分配一个文件上传到 S3)的情况下。由于此错误,reducer 任务失败,但由于重试最终成功。
我最初的分析是线程使用 FileSystem 类的相同实例。为了避免这种情况,我在调用 FileSytem.get 之前使用了 configuration.setBoolean("fs.hdfs.impl.disable.cache", true) 以避免获取缓存的实例。但是,我仍然遇到同样的错误。这是系统日志的一部分:
Caused by: java.io.IOException: Stream closed
at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:2039)
at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:1976)
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(XMLEntityManager.java:2932)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:704)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:1163)
我应该提到的另一点是我最近从 Hadoop 0.20 迁移到 Hadoop 0.20.205 和一个新的 AMI (2.0.4)。迁移到新版本后开始出现此问题。
我已经被阻止了一段时间了。任何帮助或指导都会有所帮助。