2016-08-15 72 views
0

每次使用hadoop的FS -ls/path_to_directoryhadoop的FS -ls -h/path_to_directory,其結果是像下面hadoop的HDFS目錄大小爲0

drwxr-xr-x - hadoop supergroup   0 2016-08-05 00:22/user/hive-0.13.1/warehouse/t_b_city 
drwxr-xr-x - hadoop supergroup   0 2016-06-15 16:28/user/hive-0.13.1/warehouse/t_b_mobile 

無論文件是否存在,HDFS中目錄的大小始終顯示爲0。從Web UI

瀏覽給出了同樣的reuslt如下:

drwxr-xr-x hadoop supergroup 0 B 0 0 B t_b_city 
drwxr-xr-x hadoop supergroup 0 B 0 0 B t_b_mobile 

但是,其實有這些目錄中的文件。當使用命令hadoop的FS -du -h /user/hive-0.13.1/warehouse/,目錄大小可以被正確地顯示如下:

385.5 K /user/hive-0.13.1/warehouse/t_b_city 
1.1 M  /user/hive-0.13.1/warehouse/t_b_mobile 

爲什麼會產生hadoop的FS -ls hdfs命令和Web UI始終顯示爲0的目錄?

此外,Hadoop的FS -ls命令通常會立即完成,而Hadoop的FS -du將需要一段時間來執行。看起來,命令實際上並沒有花時間計算目錄的總大小。

+0

在Linux上運行'ls -l'命令時,目錄顯示的「大小」與內部文件的大小無關。那麼你爲什麼期望HDFS工作不同? –

+0

順便說一下,NameNode將整個文件系統信息存儲在RAM中而不是磁盤上,因此目錄條目需要磁盤上的零字節。另一方面,Linux文件系統需要幾個磁盤段來保存每個目錄*('inodes'列表,權限等)* –

+0

謝謝。似乎我對ls命令的理解一直是錯誤的。我理所當然地認爲ls會顯示文件和目錄的大小。 –

回答

2

它按設計工作。 Hadoop是專爲大文件而設計的,不應該指望它給出每次運行hadoop fs -ls命令時的大小。如果Hadoop以您想要的方式工作,然後嘗試從另一個角度思考誰可能只想查看目錄是否存在;但由於Hadoop正在計算文件夾的大小,最終等待很長時間;不太好。

+0

您的解釋很有意義,我在[link](http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#ls)中重新檢查了-ls命令的描述。描述只是說該命令會給出一個文件的大小而不是目錄。 –

相關問題