Python操控HDFS

前言

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

pyhdfs

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

创建

python 复制代码
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")

展示根目录/获取namenode

python 复制代码
print("展示根目录")
print(fs.get_home_directory())

print("获取namenode")
print(fs.get_active_namenode())

查增删改-查

python 复制代码
print("展示路径")
print(fs.listdir("/"))
print("展示所有路径")
print(list(fs.walk('/original_data')))
print("判断/original_data/students2文件是否存在")
print(fs.exists('/original_data/students2'))

查增删改-增删

python 复制代码
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"))

查增删改-改

python 复制代码
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

上传下载

python 复制代码
# 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下载到本地

hdfs

创建

python 复制代码
from hdfs import InsecureClient

hdfs_client = InsecureClient('http://127.0.0.1:50070', user='fonttian')

查询

查看状态
python 复制代码
hdfs_client.status('.')
查看目录
python 复制代码
print(hdfs_client.list("/original_data/"))

创建

python 复制代码
# 创建目录
hdfs_client.makedirs('/original_data/pyhdfs', permission=777)

删除

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

上传

python 复制代码
# 上传文件
# 第一个参数,hdfs路径
# 第二个参数,本地路径
# 第三个参数,是否覆盖hdfs已有的文件

hdfs_client.upload('/original_data/pyhdfs/word.txt', '/home/fonttian/database/hive/word.txt', False)

下载

python 复制代码
# 从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)

追加

python 复制代码
#  追加数据到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')

修改或移动

python 复制代码
# 移动或者修改文件
# client.rename(hdfs_src_path, hdfs_dst_path)
hdfs_client.rename('/original_data/pyhdfs/word.txt', '/original_data/pyhdfs/word_2.txt')
相关推荐
chushiyunen17 小时前
python使用笔记(linux环境)
linux·笔记·python
神仙别闹17 小时前
基于MFC(C++)实现(界面)学委作业管理系统
开发语言·c++·mfc
三品吉他手会点灯17 小时前
C语言学习笔记 - 41.数据类型 - scanf函数核心知识点复习
c语言·开发语言·笔记·学习
撩得Android一次心动17 小时前
C语言基础笔记3【个人用】
android·c语言·开发语言·笔记
谢白羽17 小时前
Voicebox 深度指南:开源本地 AI 语音工作室完整评测与上手教程
人工智能·python·开源·tts·voicebox
薇茗17 小时前
【初阶数据结构】 升沉有序的平仄 排序 3
c语言·开发语言·数据结构·算法·排序算法·文件归并排序
2401_8685347817 小时前
论快速应用开发方法及应用
大数据·python
字节高级特工17 小时前
C++11(一) 革新:右值引用与移动语义
java·开发语言·c++·人工智能·后端
郝学胜-神的一滴17 小时前
系统设计 012:从用户系统出发,吃透缓存、数据库与高并发设计
java·数据库·python·缓存·php·软件构建
AI科技星17 小时前
强哥德巴赫猜想(1+1)终极证明(2026 年5月 21 日)
开发语言·人工智能·算法·计算机视觉·量子计算