2023-02-23
文件 hdfs
三方库的安装
Python原生并没有对HDFS的支持,如果想要使用Python来操作HDFS,需要我们安装第三方库 hdfs
pip install hdfs
安装完毕后,我们就可以使用python来操作HDFS咯。
客户端的获取
在操作HDFS的时候,第一步我们要做的就是获取到HDFS的客户端,建立与HDFS的连接。
在hdfs模块中有两个类,都是HDFS的客户端:Client和InsecureClient
●Client: HDFS客户端类,其中定义了对HDFS的操作,但是不能指定操作的用户
●InsecureClient: Client的子类,可以指定操作的用户
from hdfs import InsecureClient
"""
1. 创建客户端对象,需要设置两个参数
url: 连接到的HDFS的namenode,需要设置的是webui的地址
user: 设置操作HDFS的用户
"""
client = InsecureClient(url="http://qianfeng01:9870", user="root")
增操作
# 1. 创建一个新的文件夹
client.makedirs("/py_dir")
# 2. 上传本地文件
client.upload("/py_dirs", "./1. Python操作HDFS.py", )
# 3. 直接创建文件
client.write("/py_dir/test.file", data="this is a py file", overwrite=True, enco
删操作
# 1. 删除文件
client.delete("/py_dir/test.file")
# 2. 删除文件夹,默认只能删除空的文件夹
# 如果需要删除非空的文件夹,需要设置recursive为True,实现递归删除
client.delete("/py_dir", recursive=True)
改操作
# 1. 重命名文件、文件夹
client.rename("/py_dir", "/py_dirs")
查操作
# 1. 列举一个文件夹下有什么文件,返回一个list
sub = client.list("/")
print(type(sub), sub)
# 2. 查看文件属性
# strict:
# True: 严格模式,如果指定的文件/文件夹不存在,则会抛异常。默认。
# False: 非严格模式,如果指定的文件/文件夹不存在,不会抛异常,返回None。
# 返回值是一个字典:
# blockSize: 块大小
# accessTime: 访问时间
# childrenNum: 子文件的数量,对于文件来说就是0
# fileId: 文件ID
# group: 所属用户组
# length: 文件大小(字节)
# modificationTime: 文件修改时间
# owner: 所属用户
# permission: 文件权限
# replication: 副本数量
# type : 文件类型 DIRECTORY|FILE
print(client.status("/py_dirs"))
# 3. 查看文件中的内容,返回_GeneratorContextManager
res = client.read("/py_dirs/1. Python操作HDFS.py")
print(res)
res.close()
with client.read("/py_dirs/1. Python操作HDFS.py") as file:
# read会将读取到的数据存储到data中,用utf8解码即可
print(file.data.decode("utf8"))
# 4. 对于大型的文件,如果直接读取到内存中,可能会造成内存溢出的情况。因此需要分段读取
file_path = "/py_dirs/1. Python操作HDFS.py"
offset = 0
length = 128
file_length = client.status(file_path).get("length")
while offset < file_length:
with client.read(file_path, offset=offset, length=length) as reader:
print(reader.data.decode("utf8"))
offset += length
# 5. 下载文件到本地
client.download("/py_dirs", "./")
开班时间:2021-04-12(深圳)
开班盛况开班时间:2021-05-17(北京)
开班盛况开班时间:2021-03-22(杭州)
开班盛况开班时间:2021-04-26(北京)
开班盛况开班时间:2021-05-10(北京)
开班盛况开班时间:2021-02-22(北京)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2020-09-21(上海)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2019-07-22(北京)
开班盛况Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号