如何提取Hive仓库中所有数据库的GB及字节单位大小
解决Hive仓库数据库大小统一转换为字节和GB的方法
方法一:直接获取原始字节数再计算(推荐)
不用-h参数,hdfs dfs -du会直接返回字节数,之后通过简单计算得到GB值,避免解析混合单位的麻烦,结果更准确:
hdfs dfs -du /user/hive/warehouse/ | awk '{ bytes = $1; gb = bytes / 1024 / 1024 / 1024; printf "%-50s %12d bytes | %.2f GB\n", $2, bytes, gb }'
脚本说明:
hdfs dfs -du /user/hive/warehouse/:输出每行格式为「字节数 目录路径」awk处理逻辑:- 提取第一列的字节数
$1 - 计算GB值(1GB = 1024³字节)
- 格式化输出:左对齐显示数据库路径,右对齐显示字节数,保留两位小数显示GB值
- 提取第一列的字节数
方法二:解析-h输出的混合单位(适合需要保留原单位参考的场景)
如果一定要基于hdfs dfs -du -h的输出转换,可使用以下bash脚本解析混合单位(MB/GB等)并统一转换为字节和GB:
hdfs dfs -du -h /user/hive/warehouse/ | awk '{ size = $1; unit = substr(size, length(size)); num = substr(size, 1, length(size)-1); if (unit == "K") bytes = num * 1024; else if (unit == "M") bytes = num * 1024 * 1024; else if (unit == "G") bytes = num * 1024 * 1024 * 1024; else if (unit == "T") bytes = num * 1024 * 1024 * 1024 * 1024; else bytes = num; # 无单位则为字节 gb = bytes / 1024 / 1024 / 1024; printf "%-50s %12d bytes | %.2f GB\n", $2, bytes, gb }'
脚本说明:
- 提取
-h输出的大小值和单位(比如2.5G提取2.5和G) - 根据单位转换为原始字节数
- 再计算GB值并格式化输出
注意事项
- 如果Hive仓库使用了不同的存储路径,替换
/user/hive/warehouse/为你的实际路径 - 若需要以1000为进制(比如商业GB=1000³字节),把脚本中的
1024替换为1000即可
内容的提问来源于stack exchange,提问作者DariusB
相关产品推荐
相关产品推荐

