2016-08-05 591 views
3

我是新來的map-reduce框架。我想通過提供該目錄的名稱來找出特定目錄下文件的數量。 例如假設我們有3個目錄A,B,C,每個目錄分別具有20,30,40個部分r文件。所以,我有興趣寫一個Hadoop的工作,這將在每個目錄數的文件/記錄,即我要在以下格式的.txt文件的輸出:如何統計hadoop中特定目錄下文件的數量?

,A是具有20條

B是具有30條記錄

C是具有40條記錄

這些所有的目錄存在於HDFS。

+0

爲什麼你要爲它創建一個作業,不能你只需爲它編寫Java程序? – ViKiG

+1

簡易版:'h​​adoop fs -ls/dir | grep part-0 * | wc -l' –

回答

1

最簡單的/天然的方法是使用內置的HDFS命令,在這種情況下-count

hdfs dfs -count /path/to/your/dir >> output.txt 

或者,如果你喜歡一個混合的方法通過Linux命令:

hadoop fs -ls /path/to/your/dir/* | wc -l >> output.txt 

最後的MapReduce版本已經在這裏回答:

How do I count the number of files in HDFS from an MR job?

代碼:

int count = 0; 
FileSystem fs = FileSystem.get(getConf()); 
boolean recursive = false; 
RemoteIterator<LocatedFileStatus> ri = fs.listFiles(new Path("hdfs://my/path"), recursive); 
while (ri.hasNext()){ 
    count++; 
    ri.next(); 
} 
System.out.println("The count is: " + count); 
相關問題