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號