2023-02-23
文件 hdfs
三方庫的安裝
Python原生并沒有對(duì)HDFS的支持,如果想要使用Python來操作HDFS,需要我們安裝第三方庫 hdfs
pip install hdfs
安裝完畢后,我們就可以使用python來操作HDFS咯。
客戶端的獲取
在操作HDFS的時(shí)候,第一步我們要做的就是獲取到HDFS的客戶端,建立與HDFS的連接。
在hdfs模塊中有兩個(gè)類,都是HDFS的客戶端:Client和InsecureClient
●Client: HDFS客戶端類,其中定義了對(duì)HDFS的操作,但是不能指定操作的用戶
●InsecureClient: Client的子類,可以指定操作的用戶
from hdfs import InsecureClient
"""
1. 創(chuàng)建客戶端對(duì)象,需要設(shè)置兩個(gè)參數(shù)
url: 連接到的HDFS的namenode,需要設(shè)置的是webui的地址
user: 設(shè)置操作HDFS的用戶
"""
client = InsecureClient(url="http://qianfeng01:9870", user="root")
增操作
# 1. 創(chuàng)建一個(gè)新的文件夾
client.makedirs("/py_dir")
# 2. 上傳本地文件
client.upload("/py_dirs", "./1. Python操作HDFS.py", )
# 3. 直接創(chuàng)建文件
client.write("/py_dir/test.file", data="this is a py file", overwrite=True, enco
刪操作
# 1. 刪除文件
client.delete("/py_dir/test.file")
# 2. 刪除文件夾,默認(rèn)只能刪除空的文件夾
# 如果需要?jiǎng)h除非空的文件夾,需要設(shè)置recursive為True,實(shí)現(xiàn)遞歸刪除
client.delete("/py_dir", recursive=True)
改操作
# 1. 重命名文件、文件夾
client.rename("/py_dir", "/py_dirs")
查操作
# 1. 列舉一個(gè)文件夾下有什么文件,返回一個(gè)list
sub = client.list("/")
print(type(sub), sub)
# 2. 查看文件屬性
# strict:
# True: 嚴(yán)格模式,如果指定的文件/文件夾不存在,則會(huì)拋異常。默認(rèn)。
# False: 非嚴(yán)格模式,如果指定的文件/文件夾不存在,不會(huì)拋異常,返回None。
# 返回值是一個(gè)字典:
# blockSize: 塊大小
# accessTime: 訪問時(shí)間
# childrenNum: 子文件的數(shù)量,對(duì)于文件來說就是0
# fileId: 文件ID
# group: 所屬用戶組
# length: 文件大小(字節(jié))
# modificationTime: 文件修改時(shí)間
# owner: 所屬用戶
# permission: 文件權(quán)限
# replication: 副本數(shù)量
# type : 文件類型 DIRECTORY|FILE
print(client.status("/py_dirs"))
# 3. 查看文件中的內(nèi)容,返回_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會(huì)將讀取到的數(shù)據(jù)存儲(chǔ)到data中,用utf8解碼即可
print(file.data.decode("utf8"))
# 4. 對(duì)于大型的文件,如果直接讀取到內(nèi)存中,可能會(huì)造成內(nèi)存溢出的情況。因此需要分段讀取
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", "./")
開班時(shí)間:2021-04-12(深圳)
開班盛況開班時(shí)間:2021-05-17(北京)
開班盛況開班時(shí)間:2021-03-22(杭州)
開班盛況開班時(shí)間:2021-04-26(北京)
開班盛況開班時(shí)間:2021-05-10(北京)
開班盛況開班時(shí)間:2021-02-22(北京)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2020-09-21(上海)
開班盛況開班時(shí)間:2021-07-12(北京)
預(yù)約報(bào)名開班時(shí)間:2019-07-22(北京)
開班盛況
Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right
京ICP備12003911號(hào)-5
京公網(wǎng)安備 11010802035720號(hào)