一.前言
1.环境
python:3.12.0
IDE:IDLE shell
hadoop:3.1.3
2.文章内容
a. HDFS API 调用
(1)导入
(2)创建
(3)调用
b. 查看、创建、删除目录
c. 文件的增删改查
二.内容
2.1 HDFS API 的调用
(1)导入
按住键盘win + R 键(组合键)进入命令窗口,输入cmd 进入window终端,输入pip install hdfs 安装HDFS类库
导入hdfs软件包后,进入IDE编程环境,导入hdfs包,开始
pip install hdfs
import hdfs
(2)创建
namenode_client = hdfs.InsecureClient("http://namenode:9870","root")
print("用户创建成功")
(3)调用
函数调用,通过创建客户端对象调用方法
#查看
for i in namenode_client.list("/"):
print(i)
print("显示根目录成功")
2.2HDFS目录管理API
(1)查看目录
通过客户端的list方法,查看指定路径下的目录
接口语法格式:list(path)
#查看
for i in namenode_client.list("/"):
print(i)
print("显示根目录成功")
(2)创建目录
通过客户端的方法makedirs方法创建指定目录
接口语法格式:makedirs(path)
#创建
namenode_client.makedirs("/qnn")
print("目录创建成功")
(3)删除目录
通过客户端方法delete方法创建指定目录
接口语法格式:delete(path)
#删除qnn目录
namenode_client.delete("/qnn")
print("目录删除成功")
2.3文件的增删改查
(1)创建文件
创建文件依然使用makedirs方法,在创建时加入文件扩展名即可
接口语法格式:makedirs(path)
#在根目录下创建文本文件124.txt
namenode_client.makedirs("/124.txt")
print("文件创建成功")
(2)修改文件
修改文件是向文件添加内容,使用write方法添加内容
接口方法格式:write(HDFS_path,data)
#向文件qnn.txt中添加内容
namenode_client.write("124.txt","hellow,hadoop!")
print("文件内容追加成功")
(3)查看文件内容
查看文件内容使用read方法,使用方法与python自带read方法类似
接口语法格式:read(HDFS_path)
#查看文件
with namenode_client.read("124.txt") as reader:
data = reader.read()
print(data)
(4)删除文件
删除文件与删除目录类似,使用delete方法
接口语法格式:delete(HDFS_path)
2.3 文件的上传和下载
(1)上传文件
上传文件指从本地上传到HDFS文件系统,使用的方法是upload()
接口格式语法:upload(HDFS_path,local_path)
#上传文件
#namenode_client.upload("/","D:/data.txt")
#print("文件上传成功")
(2)下载文件
下载文件是指从HDFS文件系统中选择文件,下载到本地,使用的方法是download
接口语法格式:download(HDFS_path,local_path)
#下载文件
namenode_client.download("data.txt","D:/")
print("文件下载成功")
三、可能出现的问题
1.创建客户端失败
在创建客户端时要注意三个参数——主机名,端口号(hadoop2.0版本端口号:50070;hadoop3.0版本端口号:9870,虚拟机用户名)
2.上传文件,下载文件时出现 <requests.exceptions.ConnectionError>错误——无法解析主机名的问题
具体解决方案如下
以管理员身份运行记事本打开这个路径下文件"C:\Windows\System32\drivers\etc\hosts"在文件中添加 ip地址-域名(虚拟机主机名)
3.删除目录时可能出现的问题
在删除目录时,如果改目录为空目录,即目录下没有文件会报<hdfs.util.HdfsError: `/usr is non empty': Directory is not empty>错误。
如何解决?
如果我们使用python自带方法help()查看delete()方法我们会发现delete方法拥有三个参数
delete(hdfs_path, recursive=False, skip_trash=True)
recursive默认为False,当你将他设置为True时,即可以递归删除你想删除的文件路径