python 上传本地文件夹到hdfs

背景是这样的,同事有个需求,将自己本地的80多个文件上传到hdfs上,找了hadoop命令没有直接上传文件夹的,所以自己写了个python脚本实现了这个需求,刚开始想着是用shell脚本,但是文件得上传到hdfs集群上,这个比较麻烦,想着本地有python环境,就有了下面的代码。

# -*- coding : utf-8 -*-
import os
from hdfs import InsecureClient
#hdfs 目标路径
base_path = "/hdfs/workspace"
#本地需要上传的路径
dir = "C:/tmp/统计数据"

client_hdfs = InsecureClient('http://192.168.200.81:9870', user='admin')
client_hdfs.makedirs(base_path)


def get_all_dir(path):
    fills_list = os.listdir(path)

    for file_name in fills_list:
        file_abs_path = os.path.join(path, file_name)
        if os.path.isdir(file_abs_path):
            global dir_count
            client_hdfs.makedirs(base_path + "/" + file_name)

            print("dir:", file_name)
            get_all_dir(file_abs_path)
        else:
            mid_path = file_abs_path.replace(dir, "").replace(file_name, "")
            hdfs_path = base_path + mid_path + "" + file_name
            local_path = file_abs_path
            print(hdfs_path + " **" + local_path)
            client_hdfs.upload(hdfs_path, file_abs_path)
            print("file:", file_name)


if __name__ == '__main__':
    get_all_dir(dir)

最后,这里面有个小坑,就是需要修改hosts文件,要不然upload这个方法会报错,就是将hadoop集群的ip地址和hostsname 填入hosts即可

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容