2016-09-23 3 views
0

Java를 통해 원격으로 Hadoop 파일 시스템에 액세스하려고하지만 다음 코드를 실행할 때마다 로컬 파일 시스템 만 표시됩니다.Java를 사용하여 Hadoop 파일 시스템의 인스턴스를 원격으로 만드는 방법은 무엇입니까?

스택 오버플로에 대한 많은 솔루션을 살펴 보았지만 아무 것도 작동하지 않는 것 같습니다. 내가 잘못 뭐하는 거지

코드

Configuration obj = new Configuration(); 

obj.set("fs.defaultFS", "hdfs://localhost:8020"); 
obj.addResource(new Path("/etc/hadoop/conf/core-site.xml")); 
obj.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml")); 

URI uri = new URI("hdfs://localhost:8020/"); 
Path path =new Path("/Myfiles/wc.txt"); 
FileSystem fs = FileSystem.get(obj); 

System.out.println(fs.getHomeDirectory()); 

if(fs instanceof DistributedFileSystem) { 
    System.out.println("HDFS is the underlying filesystem"); 
} else { 
    System.out.println("Other type of file system "+fs.getClass()); 
} 

FSDataInputStream fsDataInputStream = fs.open(path); 
InputStreamReader inputStreamReader = new InputStreamReader(fsDataInputStream); 
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
String line; 
while((line=bufferedReader.readLine())!=null){ 
    System.out.println(line); 
} 
bufferedReader .close(); 

: 여기

는 현재 시도?

+0

내가 가진 코드와보고있는 오류를 게시하십시오. –

+0

적절한 core-site.xml, hdfs-site.xml 파일이 애플리케이션의 클래스 경로에 존재하는지 확인하십시오. 이러한 파일에는 Hadoop 클러스터의 유효한 구성이 들어 있어야합니다. – Zyoma

+0

나는 위와 같이 게시 한 코드를 볼 수있다. –

답변

0

이 설정 :

obj.set("fs.defaultFS", "hdfs://localhost:8020"); 

여기에 이미 존재 : (아무 의미가 그것을 사용하지 수 있습니다.)

obj.addResource(new Path("/etc/hadoop/conf/core-site.xml")); 
obj.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml")); 

이 파일을 물론, 외부에서 사용할 수 하둡 클러스터되지 않습니다. 그들을 복사해야합니다.

fs.defaultFSlocalhost:8020 인 경우이 코드는 이름 노드가 수신 대기중인 호스트에서만 작동하며 원격 노드에서는 작동하지 않습니다. 내 cluster.local이 이름 노드의 올바른 IP 주소로 변환 곳이

obj.set("fs.default.name", "hdfs://mycluster.local:8020"); (MRv1) 
obj.set("fs.defaultFS", "hdfs://mycluster.local:8020"); (YARN) 

같은 것을해야한다.

외부에서 HDFS에 액세스하는 가장 좋은 방법은 webHDFS입니다.

관련 문제