pyhdfs模块是Python提供的第三方库模块,它提供了直接对Hadoop中HDFS操作的能力。相较于hdfs模块,它的功能更为强大:
例如:之前使用hdfs模块操作创建目录时,会遇到权限不足的问题,这是因为hdfs模块使用的用户名和hadoop集群的用户名不一样(windows和CentOS登录的用户名不一样),这就会导致权限不足。但是hdfs模块没有提供指定用户名的功能。而pyhdfs模块提供了此功能。可以设置用户名,这样便能避免出现权限不足的问题。
在使用pyhdfs模块需要先安装,在Python中所有的第三方模块均采用pip安装,安装方式如下:pycharm终端执行,必须先将源切换为清华大学源,否则安装可能花费几十分钟
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
pip install pyhdfs
一 连接集群
import pyhdfs #连接hadoop集群,需指定地址和用户名,用户名可在集群执行 hadoop fs -ls / 查看文件所有者确定 client=pyhdfs.HdfsClient(hosts="192.168.31.100:50070",user_name="root") print(client)
运行:
二 创建目录
client.mkdirs("/test")
运行:
查看:
[root@slave1 ~]# hadoop fs -ls /
Found 4 items
drwxr-xr-x - root supergroup 0 2023-04-19 01:18 /hbase
drwxrwxrwx - dr.who supergroup 0 2023-05-01 00:27 /output
drwxr-xr-x - root supergroup 0 2023-05-01 04:40 /test
drwxrwxrwx - root supergroup 0 2023-04-18 08:04 /tmp
请先修改windows的hosts文件,否则在上传文件到集群会报错:
ConnectionError: HTTPConnectionPool(host='slave2', port=50075):Max retries exceeded with url: /webhdfs/v1/home/temp/temp1/test.py?
打开C:\Windows\System32\drivers\etc\hosts
添加以下信息:
#hadoop
192.168.31.100 master
192.168.31.200 master2
192.168.31.101 slave1
192.168.31.102 slave2
192.168.31.103 slave3
三 上传文件
首先在E盘创建文件:
代码:
client.copy_from_local("E:/data.txt","/test/data")
执行:
查看,文件已上传到集群中
[root@slave1 ~]# hadoop fs -ls -R /test
-rwxr-xr-x 3 root supergroup 24 2023-05-01 04:46 /test/data
[root@slave1 ~]# hadoop fs -cat /test/data
pyhdfs模块测试文件
四 读取文件
代码:
#读取数据 # 1.打开文件 file=client.open("/test/data") #2.读取文件 content=file.read() #3.解码文件 print(content.decode("utf-8"))
运行:
五 下载文件
先在E盘新建一个download目录:
代码:
client.copy_to_local("/test/data","E:/download/newdata.txt")
执行:
文件下载成功:
六 删除文件
代码:
#删除命令:只能删除文件或者空目录,否则将抛出异常 #删除data文件: client.delete("/test/data")
执行:
验证,data文件已删除
[root@slave1 ~]# hadoop fs -cat /test/data
cat: `/test/data': No such file or directory
本文作者为BUG之神,转载请注明。