2016-09-23 24 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")); 

這些文件,當然,不可用之外的Hadoop集羣。你必須複製它們。

如果您的fs.defaultFSlocalhost:8020此代碼將只在名稱節點正在偵聽的主機上工作,沒有遙控器。 應該像

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

的東西在我的cluster.local解析爲名稱節點的正確IP地址。

順便說一句,從外面訪問HDFS的最好方式是webHDFS。

相關問題