2012-03-05 3 views
2

명령 줄없이 자바를 사용하여 하둡에서 파일을 읽는 방법을, 나는 아래의 코드내가 하둡 시스템에서 파일을 읽을 원

String uri = theFilename; 
Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(URI.create(uri), conf); 
InputStream in = null; 
try { 
    in = fs.open(new Path(uri)); 
    IOUtils.copyBytes(in, System.out, 4096, false); 
} finally { 
    IOUtils.closeStream(in); 
} 

을 사용하면 내가 하둡 항아리가 myjar를 실행해야이 파일을 실행하려면 그렇게 할 수 있습니다. jar com.mycompany.cloud.CatFile/filepathin_hadoop 그건 작동합니다. 하지만 어떻게 다른 프로그램에서 그렇게 할 수 있을까요? 나는 hadoop jar 명령을 사용하지 않고서도 마찬가지입니다.

답변

1

core-site.xml을 해당 Configuration 개체에 추가하여 해당 HDFS 인스턴스의 URI를 알 수 있습니다. 이 방법을 사용하려면 HADOOP_HOME을 설정해야합니다.

Configuration conf = new Configuration(); 
Path coreSitePath = new Path(System.getenv("HADOOP_HOME"), "conf/core-site.xml"); 
conf.addResource(coreSitePath); 
FileSystem hdfs = FileSystem.get(conf); 
// rest of code the same 

지금, hadoop jar를 사용하지 않고 당신은 당신의 HDFS 인스턴스에 대한 연결을 열 수 있습니다.

: conf.addResource (경로)를 사용해야합니다. String arg를 사용하는 경우 클래스 경로에서 해당 파일 이름을 찾습니다.

+0

코드의 동일한 부분을 첨가하고, 이클립스 ENV 변수로 HADOOP_HOME 파라미터 설정 왔지만 아직에서 System.out.println (hdfs.getHomeDirectory()); 로컬 파일 시스템 디렉토리를 인쇄합니다. – user1249655

+0

나는 내 대답을 편집했다. String 대신 core-site.xml에 대한 경로를 사용하는 것을 잊었습니다. –

0

또 다른 구성 방법 세트 (parameterName, value)가 있습니다.
이 방법을 사용하면 core-site.xml의 위치를 ​​지정하지 않아도됩니다. 이것은 웹 서버와 같은 원격 위치에서 HDFS에 액세스 할 때 유용합니다.

사용은 다음과 같이

String uri = theFilename; 
    Configuration conf = new Configuration(); 

    conf.set("fs.default.name","hdfs://10.132.100.211:8020/"); 
    FileSystem fs = FileSystem.get(conf); 
// Rest of the code 
관련 문제