2012-11-27 3 views
9

Hadoop File System에서 파일을 읽고 싶습니다.hdfs의 파일 경로

올바른 파일 경로를 얻으려면 호스트 이름과 포트 주소가 hdfs이어야합니다. 9000 :

그래서 마지막으로 파일의 내 경로는 호스트 이름 = "123.23.12.4344"& 포트를 추출 알고

Path path = new Path("hdfs://123.23.12.4344:9000/user/filename.txt") 

이제 내가 원하는

같이 보일 것인가?

기본적으로 Amazon EMR에서 FileSystem에 액세스하려고하지만

 FileSystem fs = FileSystem.get(getConf());
을 사용하면
 
You possibly called FileSystem.get(conf) when you should have called FileSystem.get(uri, conf) to obtain a file system supporting your path 
이 나오므로 URI를 사용하기로 결정했습니다. (URI를 사용해야 함) URI에 액세스하는 방법을 모르겠습니다.

답변

13

두 가지 방법 중 하나를 사용하여 오류를 해결할 수 있습니다. 이것에 대한

1

String infile = "file.txt"; 
Path ofile = new Path(infile); 
FileSystem fs = ofile.getFileSystem(getConf()); 

2

Configuration conf = getConf(); 
System.out.println("fs.default.name : - " + conf.get("fs.default.name")); 
// It prints uri as : hdfs://10.214.15.165:9000 or something 
String uri = conf.get("fs.default.name"); 
FileSystem fs = FileSystem.get(uri,getConf()); 
+0

감사합니다! 그것은 도움이되었습니다, 왜 이것을 설명 할 수 있습니까? – ruralcoder

+4

Hadoop에는 FileSystem 팩토리가 있습니다. 그것은 URI 스키마와 아마도 URI의 권한 부분에 기반하여 올바른 파일 시스템을 생성합니다. file : //, s3 : // 또는 hdfs : //에서 파일을 열 것인지를 확인할 수 있습니다. 각 파일 시스템마다 다른 파일 시스템이 필요합니다. 이것이 URI – Wheezil

+1

fs.default.name이 더 이상 사용되지 않도록해야하는 이유입니다.이 질문의 모든 독자는 대신 fs.defaultFS를 사용해야합니다. – chomp