pyarrow 实现hdfs和本地文件传输
python环境下支持好几种与hdfs文件同步接口,如:pyhdfs,hdfs,libhdfs,pyarrow,shell等。考虑到易用性以及本地环境(公司集群禁掉了http服务),本文介绍使用pyarrow 以一种优雅的方式进行本地文件与hdfs同步。
1. 安装pyarrow
-
在线安装
pip install pyarrow -
离线安装
pyarrow-官网下载
下载完.whl文件后,通过 pip instal pyarrow-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- 配置环境变量
需要使用hadoop目录下的jar包。
# 这里根据实际情况配置,在linux环境下
export PATH=$JAVA_HOME/bin:$HBASE_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin:$SQOOP_HOME/bin:$PATH:${
HOME}/.local/bin:$ {
DISTCP_HOME}:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec
export CLASSPATH=`$HADOOP_HOME/bin/hadoop classpath --glob`
# or on Windows
%HADOOP_HOME%/bin/hadoop classpath --glob > %CLASSPATH%
2. 相关代码
2.1. hdfs->本地
HdfsPath,LocalPath分别为自定义的类,主要是实现fs.HadoopFileSystem(host="***", port=, user="***", kerb_ticket=None),fs.LocalFileSystem对象,
下面2.1,2.3功能 示例较完整。简单的测试实例见2.3.
def hdfs_to_local(hdfs_path: HdfsPath, local_path: LocalPath):
"""
同步文件,这里有两种情况:
1)若是单个文件,可以直接打开用文件流的方式写进入;
2)若是目录,首先创建文件选择器,进而获取文件目录下的所有文件依次按照 法1) 方式传输。
:param hdfs_path:
:param local_path:
:return:
"""
hdfs = hdfs_path.get_hdfs()
local = local_path.get_local()
_logger.info(f"复制hdfs文件 {
hdfs_path.path} 到本地{
local_path.path}.")
# hdfs 本地文件做规则化处理
if hdfs_path.path.endswith('/'):
hdfs_path.path = hdfs_path.path[:-1]
if local_pa

本文介绍如何使用PyArrow库实现HDFS与本地文件系统的优雅同步。内容涵盖PyArrow的安装方法、具体代码示例及单文件传输示例。
最低0.47元/天 解锁文章
8380

被折叠的 条评论
为什么被折叠?



