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
更多信息和细节.
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计算结果,包括给定路径下的所有快照.
+-------------------------------------------------------------------+
| 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.
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)
当尝试计算目录中特定文件组的总数时,该-s
选项不起作用(在 Hadoop 2.7.1 中)。例如:
目录结构:
\n\nsome_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\nhdfs dfs -du -s some_dir\n4096 some_dir\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,如果我想要包含“count”的所有文件的总和,则该命令无法满足要求。
\n\nhdfs 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\nhdfs dfs -du some_dir/count* | awk \'{ total+=$1 } END { print total }\'\n2048 \n
Run Code Online (Sandbox Code Playgroud)\n