2014-06-06 1 views
0

HDFS에서 파일을 읽고 쓰려고합니다. 먼저, 그것을 읽고 콘솔에 표시하려고합니다. 그것은 어떤 경고도주지 않고 실행 경고뿐만 아니라 그것은 콘솔에 파일에서 데이터를 인쇄하지 않습니다, 내 파일은 이미 hdfs에 저장되어 있으며, 나는 그것을 사용자 인터페이스에서 볼 수 있습니다. 나는 내가 주어진 경로에 어떤 문제가 있다고 생각한다. 나는 자바에 처음으로 hadoop을 연결하는 것으로 확신하지 않는다. IDE로 Eclipse를 사용하고있다. 누군가 이걸 들여다 볼 수 있니?java : no 출력을 사용하여 hadoop에서 파일을 읽음

또한 이름 노드에 50075 포트 번호를 지정하려고했지만 이것도 작동하지 않았습니다.

편집 : 아무도 나에게 hdfs에 저장된 파일에 액세스하기위한 Java에서 올바른 경로를 제공하는 방법을 말해 줄 수 있습니까?

나는이 예외를

파일 파일을 얻고있다 :/로컬 호스트 : 54310은/사용자/hduser/project11/a.txt이 존재하지 않습니다.

java.io.FileNotFoundException : 파일 파일 :/localhost : 54310/user/hduser/project11/a.txt가 존재하지 않습니다.

at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:397) 
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:251) 
at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:125) 
at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283) 
at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:427) 
at newclassentry.main(newclassentry.java:16) 

경로와 관련된 문제가 있지만 올바른 경로가 무엇인지 알 수 없습니다.

localhost namenode에서/user/hduser/project11 폴더에 액세스하고 있습니다. 파일이 비어 있지 않습니다. 코드 :

import java.io.*; 
import java.util.*; 
import java.net.*; 
import org.apache.hadoop.fs.*; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapred.*; 
import org.apache.hadoop.util.*; 

public class newclassentry { 

    public static void main(String [] args) throws Exception { 
     try { 
      Path pt = new Path("hdfs://localhost:54310/user/hduser/project11/a.txt"); 
      FileSystem fs = FileSystem.get(new Configuration()); 
      conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml")); 
      BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(pt))); 

      String line; 
      line = br.readLine(); 
      while ((line = br.readLine()) != null) { 
       System.out.println(line); 
       line = br.readLine(); 
      } 
      br.close(); 
     } 
     catch (Exception e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 
+0

당신은 볼 수없는 예외가있을 수 있습니다. (예외 e) { }' – Jens

+0

에 system.err.println'을 추가하십시오. 예외를 얻는 지 여부를 어떻게 알 수 있습니까? catch로는 아무 것도하지 않습니다. – Raj

+0

감사합니다 Jens, 예외가 있습니다. 잘못된 FS : hdfs : // localhost : 54310/user/hduser/project11/a.txt, 예상 : file : /// 그리고 hdfs : //를 file : ///로 바꿨을 때 ... 채우기를 제공합니다 : 파일 파일 :/localhost : 54310/user/hduser/project11/a.txt가 존재하지 않습니다. – user3714726

답변

1

해결 : 우리는 HDFS를 통해 conf.addResource에 액세스하기위한 핵심-site.xml 파일을 추가 할 필요가

(새 경로 (Vars.HADOOP_HOME + "/ conf의/코어를 site.xml을")) ;

초기 문제를 찾아 주신 모든 분들께 감사드립니다.

0

가 콘솔에 아무런 표시가없고 확실 파일이 비어 있지 않은 한,이 때문에 파일의 잘못된 경로에있는 파일을 여는 오류가있는 것을 의미한다. 오류의 발생하는 볼 수 있도록 스택 추적을 인쇄 할 수와

catch(Exception e){ 
       } 

:

당신은 빈 catch 블록을 교체해야합니다.

catch(Exception e){ 
     e.printStackTrace(); 
       } 
+0

안녕 Gaurav, 나는 예외를 붙였다. 당신은 문제가 경로에 맞다, 그러나 나는 hdfs에서 파일을 접근하기를위한 적당한 경로를주는 방법에 어디에서든지 얻지 않고있다. – user3714726

+0

@ user3714726 전체 스택 추적을 추가하면 좋을 것입니다. – Gaurav

관련 문제