如何使用pyarrow的fs.HadoopFileSystem完成HDFS常见目录操作
新版pyarrow.fs.HadoopFileSystem操作HDFS目录的实现方法
你需要的几个操作新版API均有对应实现,只是入口和旧版弃用API不同,具体操作如下:
前置准备:初始化HDFS客户端
先实例化HadoopFileSystem对象,示例代码:
from pyarrow.fs import HadoopFileSystem, FileType # 初始化参数根据你的集群配置调整 fs = HadoopFileSystem( host="your-namenode-host", port=9000, user="hadoop" # 可选,指定操作用户 )
1. 目录存在性校验
两种常用方式:
- 仅判断路径是否存在:直接调用
exists方法
dir_path = "/test/hdfs/dir" is_exist = fs.exists(dir_path)
- 同时校验路径是否为目录:调用
get_file_info方法判断类型
file_info = fs.get_file_info(dir_path) is_dir = (file_info.type == FileType.Directory)
2. 创建目录(对应mkdir操作)
使用create_dir方法,支持递归创建:
# 递归创建多级目录,等价于mkdir -p fs.create_dir("/test/new/dir/level1/level2", recursive=True) # 仅创建单级目录,父目录不存在时报错 fs.create_dir("/test/single_dir", recursive=False)
3. 修改目录权限(对应chmod操作)
使用set_file_properties方法,传入mode参数,注意权限值为八进制格式:
# 将目录权限设为755 fs.set_file_properties("/test/hdfs/dir", mode=0o755)
4. 修改目录所属用户/用户组(对应chown操作)
同样使用set_file_properties方法,传入owner和group参数,可单独设置其中一项:
# 同时修改所属用户和用户组 fs.set_file_properties("/test/hdfs/dir", owner="new_user", group="new_group") # 仅修改所属用户 fs.set_file_properties("/test/hdfs/dir", owner="new_user") # 仅修改所属用户组 fs.set_file_properties("/test/hdfs/dir", group="new_group")
注意事项
- 需使用pyarrow 11.0及以上版本,低版本部分方法参数可能存在差异
- 运行环境需正确配置Hadoop相关环境变量(如HADOOP_HOME、CLASSPATH等),否则会出现初始化失败或操作无权限的问题
内容的提问来源于stack exchange,提问作者venom13k
相关产品推荐
相关产品推荐

