You need to enable JavaScript to run this app. 如何通过Python hdfs模块的InsecureClient获取HDFS节点可用磁盘容量
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python hdfs模块的InsecureClient获取HDFS节点可用磁盘容量

Python HDFS客户端实现 hdfs dfs -df 等价容量查询

脚本前置修正

你现有初始化脚本存在冗余实例化逻辑,InsecureClient本身已支持代理参数配置,无需重复创建Client实例,修正后的初始化代码为:

from hdfs import InsecureClient

client = InsecureClient(
    url="NameNode地址:端口",
    user="你的HDFS操作用户名",
    # 无代理需求可直接删除以下proxies配置
    proxies={"http": "本地代理地址:端口"}
)

核心实现思路

你使用的hdfs第三方库是对WebHDFS开放接口的封装,hdfs dfs -df对应的底层WebHDFS能力为GET_FILESYSTEM_STATS接口,通过该接口可直接获取集群维度的磁盘容量统计值,完全不需要依赖本地Shell命令调用。

核心查询代码

# 调用容量统计接口,等价于执行`hdfs dfs -df`
fs_stats = client._request(
    method="GET",
    path="/",
    params={"op": "GET_FILESYSTEM_STATS"}
).json()

# 接口返回的核心字段说明
# - totalCapacity: HDFS集群总容量(单位:字节)
# - dfsUsed: HDFS已占用的存储容量(单位:字节)
# - remaining: HDFS剩余可用存储容量(单位:字节)

# 计算磁盘使用率,与`-h`参数的百分比计算逻辑完全一致
used_rate = round(fs_stats["dfsUsed"] / fs_stats["totalCapacity"] * 100, 2)

# 实现`-h`参数的人类可读单位格式化
def format_byte_size(size_bytes):
    units = ["B", "KB", "MB", "GB", "TB", "PB"]
    unit_index = 0
    while size_bytes >= 1024 and unit_index < len(units) - 1:
        size_bytes /= 1024
        unit_index += 1
    return f"{round(size_bytes, 2)} {units[unit_index]}"

# 输出与原命令格式一致的结果
print("文件系统               总容量      已用      可用      使用率%")
print(
    f"hdfs://{client.url.split('//')[-1]:<22} "
    f"{format_byte_size(fs_stats['totalCapacity']):<9} "
    f"{format_byte_size(fs_stats['dfsUsed']):<8} "
    f"{format_byte_size(fs_stats['remaining']):<8} "
    f"{used_rate}%"
)

适配说明

  • 如果你使用的是3.x及以上版本的hdfs库,该能力已经被封装为公开方法client.get_fs_stats(),可直接调用获取统计值,无需走私有请求方法
  • 针对Hadoop 2.7之前的旧版本集群,需要根据实际接口返回的字段名调整映射逻辑,旧版本可能将总容量字段命名为capacity而非totalCapacity
  • 权限校验逻辑与原生命令完全一致:调用接口的用户需要拥有WebHDFS集群级别的读权限,否则会返回403鉴权错误

输出参考效果

hdfs df 参考输出

内容的提问来源于stack exchange,提问作者Bruno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 08:06:03