2012-09-25 3 views
1

HDFS에서 일부 작업 구성 파일을 읽는 중 이상한 오류가 발생합니다. 파일에서 작업을 검색하고 작업 구성 XML 파일을 루프에서 읽으려고합니다.IOException : HDFS에서 여러 파일을 읽는 중 스트림 닫힘 오류가 발생했습니다.

발췌 :

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를 throw합니다. 스트림을 닫습니다.

답변

1

때때로 xml 독자는 close 메소드가 호출 될 때 기본 스트림을 닫습니다. 이것은 설명서에서 말하는 내용이 아니지만 릴리스 노트에 있습니다.

이 문제를 방지하려면 독자의 닫기 메서드를 재정의하거나 스트림을 다른 클래스로 래핑 할 수 있습니다.

내가 전에 일 년에, 그러나

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

"고정 너무 위험"이라고보고

+0

감사합니다 빅터 (거기에 몇 가지 예제가 있습니다)! 나는 문제가 두 번째 파일에서 왜 나타나기 시작하는지 알아 내려고하고있다. – Subhasis

+0

@Subhasis 당신은 잘됐다. 디버깅을 시도하고 누가 스트림의 close 메소드를 호출하는지보십시오. –

관련 문제