【问题标题】:IOException: stream closed error while reading multiple files from HDFSIOException:从 HDFS 读取多个文件时出现流关闭错误
【发布时间】:2012-09-26 01:57:04
【问题描述】:

我在尝试从 HDFS 读取一些作业配置文件时遇到一个奇怪的错误。我正在尝试从文件中检索作业,然后循环读取它们的作业配置 XML 文件。

摘录:

for(JobStatus status : statuses)
{
    JobID jobId = null;
    try
    {
        jobId = status.getJobID(); //TODO check the hash-code/equals implementation of JobID
        if(!jobIdsUnderObservation.contains(jobId))
        { //explore jobs if it's new
            RunningJob runningJob = jobClient.getJob(jobId);
            if(runningJob != null)
            {
                String jobFile = runningJob.getJobFile();
                FileSystem fs = FileSystem.get(conf);
                if(fs.exists(new Path(jobFile)))
                {
                    String sessionId = null;
                    InputStream is = fs.open(new Path(jobFile));
                    conf.addResource(is);
                    sessionId = conf.get("hive.session.id"); //this particular line breaks 
                    //from the second file onwards 
                    if(sessionId.equals(this.sessionId))
                    {
                        jobIdsUnderObservation.add(jobId);
                    }
                }
            }
        }
    }
    catch(IOException ioe)
    {
        ioe.printStackTrace();
    }
    int prevStatus = 0;

它可以很好地读取第一个文件,但它会从第二个文件开始中断。它抛出一个 IOException: stream closed。

【问题讨论】:

    标签: java io hdfs


    【解决方案1】:

    有时 xml 读取器在调用其 close 方法时会关闭底层流。这不是他们在文档中所说的,而是在发行说明中...

    为避免这种行为,您可以覆盖阅读器的 close 方法或将流包装到另一个类中。

    我在几年前向 sun 报告过,但“修复风险太大”

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6539065

    (那里有一些例子)

    【讨论】:

    • 谢谢维克多!我只是想弄清楚为什么问题从第二个文件开始出现。
    • @Subhasis 不客气,尝试调试一下,看看谁在调用你的流的 close 方法。
    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2010-11-19
    相关资源
    最近更新 更多