每次我使用 hadoop fs -ls / path_to_directory 或 hadoop fs -ls -h / path_to_directory ,结果如下
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浏览提供与以下相同的重复:
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
为什么hdfs的 hadoop fs -ls 命令和Web UI总是为目录显示0?
此外, hadoop fs -ls 命令通常会立即完成,而 hadoop fs -du 会占用有时要执行。似乎 hadoop fs -ls 命令实际上并没有花时间计算目录的总大小。
答案 0 :(得分:2)
它按设计工作。 Hadoop是为大文件设计的,不应指望它每次运行hadoop fs -ls
命令时都会给出大小。如果Hadoop按照您想要的方式工作,那么尝试从另一个人的角度思考谁可能只想查看目录是否存在;但最后因为Hadoop正在计算文件夹的大小而等待很长时间;不太好。
答案 1 :(得分:0)
尝试使用du选项执行通配符,以便将所有文件放在 db列出了文件大小。这里唯一的收获是我们 需要进行多个级别的通配符模式匹配,以便所有 覆盖了父目录下的级别。
hadoop fs -du -h /hive_warehouse/db/*/* > /home/list_du.txt