• Python操控HDFS


    前言

    Python中进行HDFS编程共有两种方法,库pyhdfs与hdfs,两个库都是直接pip安装即可。同时两个库的实现原理也是一样的,hdfs的web api接口。

    pyhdfs

    pyhdfs没有追加功能慎用。如果要是用追加功能,建议使用hdfs这个库。请查看第二部分

    创建

    import pyhdfs
    
    fs = pyhdfs.HdfsClient(hosts="127.0.0.1,50070", user_name="fonttian")  # 这两种连接方式都可以
    # fs = pyhdfs.HdfsClient(hosts="127.0.0.1,9000", user_name="root")
    
    • 1
    • 2
    • 3
    • 4

    展示根目录/获取namenode

    print("展示根目录")
    print(fs.get_home_directory())
    
    print("获取namenode")
    print(fs.get_active_namenode())
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查增删改-查

    print("展示路径")
    print(fs.listdir("/"))
    print("展示所有路径")
    print(list(fs.walk('/original_data')))
    print("判断/original_data/students2文件是否存在")
    print(fs.exists('/original_data/students2'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查增删改-增删

    print(fs.mkdirs("/original_data/file_folder"))
    fs.copy_from_local("/home/fonttian/database/hive/job", '/original_data/job', )  # 从本地上传到hadoop上
    
    print(fs.delete("/original_data/job2"))  # 删除文件
    
    
    print(fs.mkdirs("/original_data/file_folder"))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查增删改-改

    print(fs.mkdirs("/original_data/file_folder"))
    print(fs.rename("/original_data/file_folder", destination="/original_data/file_folder_rename"))  # 删除目录
    # recursive=True
    print(fs.delete("/original_data/file_folder_rename", recursive=True))  # 删除目录  recursive=True
    
    • 1
    • 2
    • 3
    • 4

    上传下载

    # print("上传下载:")
    fs.copy_from_local("/home/fonttian/database/hive/user.txt", '/original_data/user.txt')  # 从hadoop下载到本地
    fs.copy_from_local("/home/fonttian/database/hive/job", '/original_data/job')  # 从本地上传到hadoop上
    fs.copy_to_local("/original_data/user.txt", '/home/fonttian/database/hive/user_2.txt')  # 从hadoop下载到本地
    
    • 1
    • 2
    • 3
    • 4

    hdfs

    创建

    from hdfs import InsecureClient
    
    hdfs_client = InsecureClient('http://127.0.0.1:50070', user='fonttian')
    
    • 1
    • 2
    • 3

    查询

    查看状态
    hdfs_client.status('.')
    
    • 1
    查看目录
    print(hdfs_client.list("/original_data/"))
    
    
    • 1
    • 2

    创建

    # 创建目录
    hdfs_client.makedirs('/original_data/pyhdfs', permission=777)
    
    
    • 1
    • 2
    • 3

    删除

    # 删除目录
    # 其他参数:delete(hdfs_path, recursive=False)
    # recursive:删除文件和其子目录,设置为False如果不存在,则会抛出异常,默认为False
    hdfs_client.delete('/original_data/pyhdfs', recursive=False)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上传

    # 上传文件
    # 第一个参数,hdfs路径
    # 第二个参数,本地路径
    # 第三个参数,是否覆盖hdfs已有的文件
    
    hdfs_client.upload('/original_data/pyhdfs/word.txt', '/home/fonttian/database/hive/word.txt', False)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下载

    # 从hdfs获取文件到本地
    # client.download(hdfs_path, local_path, overwrite=False)
    hdfs_client.download('/original_data/pyhdfs/word.txt', '/home/fonttian/database/hive/word_download.txt', overwrite=True)
    
    
    • 1
    • 2
    • 3
    • 4

    追加

    #  追加数据到hdfs文件
    # client.write(hdfs_path, data, overwrite=False, append=True, encoding='utf-8')
    hdfs_client.write('/original_data/pyhdfs/word.txt', 'this is overwite \n', overwrite=True)
    hdfs_client.write('/original_data/pyhdfs/word.txt', 'this is append ', overwrite=False, append=True, encoding='utf-8')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改或移动

    # 移动或者修改文件
    # client.rename(hdfs_src_path, hdfs_dst_path)
    hdfs_client.rename('/original_data/pyhdfs/word.txt', '/original_data/pyhdfs/word_2.txt')
    
    • 1
    • 2
    • 3
  • 相关阅读:
    整理混乱的头文件,我用include what you use
    XTU-OJ 1141-平衡三进制2
    DGL安装教程
    git遇到的报错
    postgreSql 和mysql的一些区别
    记一次查找投稿期刊的过程
    【nodejs秒杀】expressJWT req.body : undefined和 expressJWT is not a function 解决方法
    K8S之应用配置管理笔记
    MybatisPlus的基础使用
    Python安装Jnius库报错DLL load failed:找不到模块
  • 原文地址:https://blog.csdn.net/FontThrone/article/details/134496337