2016-03-17 24 views
0

我寫了一個應用程序,列出HDFS中的所有文件,然後對它們進行一些處理。這是我的代碼的部分,列出HDFS中的所有文件:如何使用maprfs Java API執行遞歸ls?

Configuration configuration = new Configuration(); 
FileSystem hdfs; 
hdfs = FileSystem.get(new URI(url), configuration); 
RemoteIterator<LocatedFileStatus> it = hdfs.listFiles(new Path(url+directory), true); 

我想要做MapRFS同樣的事情。作爲第一次嘗試,我試圖使用Hadoop的罐子,但它不起作用。然後我嘗試使用mapr(/opt/mapr/hadoop/hadoop-0.20.2/lib/hadoop-0.20.2-dev-core.jar)附帶的罐子,但似乎該罐子中的對象FileSystem沒有名爲listFiles的方法。你知道是否有一種我可以使用的等效方法?有沒有辦法使用Hadoop罐子來做到這一點?謝謝您的回答。

回答

1

你的代碼對於MapR來說「幾乎」是完美的,而你的依賴關係是確定的。

正如你可能知道的MapR不使用/有,有很多很好的理由Namenodes的概念。這意味着您連接到羣集的方式不同。您不需要將羣集URL路由到配置或路徑中。

下面的代碼將工作:

Configuration configuration = new Configuration(); 
FileSystem hdfs; 
hdfs = FileSystem.get(configuration); // no need to send any cluster it is retrieved from Configuration 
RemoteIterator<LocatedFileStatus> it = hdfs.listFiles(new Path(directory), true); 

MAPR知道如何根據你在/opt/mapr/conf/mapr-clusters.conf有信息交流。此文件指示集羣的名稱和CLDB節點的列表。

正如你所看到的你寫的「hadoop代碼」是正確的,並且正在工作。

+0

謝謝你的回覆,但是我的依賴沒問題,你的意思是我應該使用mapr的jar或Hadoop的jar嗎? –