检查HDFS目录大小的方法?

Che*_*eng 86 directory command-line hadoop hdfs

我知道du -sh常见的Linux文件系统.但是如何用HDFS做到这一点?

Mat*_*t D 152

在0.20.203之前,并在2.6.0中正式弃用:

hadoop fs -dus [directory]
Run Code Online (Sandbox Code Playgroud)

0.20.203(死链接)1.0.4并仍然通过2.6.0兼容:

hdfs dfs -du [-s] [-h] URI [URI …]
Run Code Online (Sandbox Code Playgroud)

您还可以运行hadoop fs -help更多信息和细节.

  • -du -s(-dus已弃用) (17认同)

Mar*_*ier 64

hadoop fs -du -s -h /path/to/dir 以可读形式显示目录的大小.


mrs*_*vas 19

扩展到Matt D和其他人的答案,命令可以直到Apache Hadoop 3.0.0-alpha4

hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]

它显示给定目录中包含的文件和目录的大小或文件的长度,以防它只是一个文件.

选项:

  • -s选项将导致文件的总长度的摘要显示,而不是单个文件.如果没有-s选项,则通过从给定路径向上移动1级来完成计算.
  • -h选项将在格式化文件大小人类可读的方式(例如64.0米代替67108864)
  • -v选项将显示列的名称作为标题行.
  • -x选项排除快照从结果计算.如果没有-x选项(默认),则始终从所有INode计算结果,包括给定路径下的所有快照.

du返回三列,格式如下:

 +-------------------------------------------------------------------+ 
 | size  |  disk_space_consumed_with_all_replicas  |  full_path_name | 
 +-------------------------------------------------------------------+ 
Run Code Online (Sandbox Code Playgroud)

示例命令:

hadoop fs -du /user/hadoop/dir1 \
    /user/hadoop/file1 \
    hdfs://nn.example.com/user/hadoop/dir1 
Run Code Online (Sandbox Code Playgroud)

退出代码:成功时返回0,错误时返回-1.

来源:Apache doc


dil*_*had 11

有了这个,您将获得以GB为单位的大小

hdfs dfs -du PATHTODIRECTORY | awk '/^[0-9]+/ { print int($1/(1024**3)) " [GB]\t" $2 }'
Run Code Online (Sandbox Code Playgroud)


Grr*_*Grr 5

当尝试计算目录中特定文件组的总数时,该-s选项不起作用(在 Hadoop 2.7.1 中)。例如:

\n\n

目录结构:

\n\n
some_dir\n\xe2\x94\x9cabc.txt    \n\xe2\x94\x9ccount1.txt \n\xe2\x94\x9ccount2.txt \n\xe2\x94\x94def.txt    \n
Run Code Online (Sandbox Code Playgroud)\n\n

假设每个文件的大小为 1 KB。您可以使用以下命令总结整个目录:

\n\n
hdfs dfs -du -s some_dir\n4096 some_dir\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果我想要包含“count”的所有文件的总和,则该命令无法满足要求。

\n\n
hdfs dfs -du -s some_dir/count*\n1024 some_dir/count1.txt\n1024 some_dir/count2.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了解决这个问题,我通常通过 awk 传递输出。

\n\n
hdfs dfs -du some_dir/count* | awk \'{ total+=$1 } END { print total }\'\n2048 \n
Run Code Online (Sandbox Code Playgroud)\n