pyarrow 实现hdfs和本地文件传输

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

pyarrow 实现hdfs和本地文件传输

python环境下支持好几种与hdfs文件同步接口,如:pyhdfs,hdfs,libhdfs,pyarrow,shell等。考虑到易用性以及本地环境(公司集群禁掉了http服务),本文介绍使用pyarrow 以一种优雅的方式进行本地文件与hdfs同步。

1. 安装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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值