2016-08-15 336 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命令的描述。描述只是说该命令会给出一个文件的大小而不是目录。 –

相关问题