python pyhdfs模块

BUG之神 227

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

python pyhdfs模块 python pyhdfs模块


一 连接集群

import pyhdfs
#连接hadoop集群,需指定地址和用户名,用户名可在集群执行  hadoop fs -ls / 查看文件所有者确定
client=pyhdfs.HdfsClient(hosts="192.168.31.100:50070",user_name="root")
print(client)

运行:

python pyhdfs模块

二 创建目录

client.mkdirs("/test")

运行:

python pyhdfs模块

查看:

[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盘创建文件:

python pyhdfs模块

代码:

client.copy_from_local("E:/data.txt","/test/data")

执行:

python pyhdfs模块

查看,文件已上传到集群中

[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"))

 

运行:

python pyhdfs模块


五 下载文件

先在E盘新建一个download目录:

python pyhdfs模块

代码:

client.copy_to_local("/test/data","E:/download/newdata.txt")

执行:

python pyhdfs模块

文件下载成功:

python pyhdfs模块


六 删除文件

代码:

#删除命令:只能删除文件或者空目录,否则将抛出异常
#删除data文件:
client.delete("/test/data")

执行:

python pyhdfs模块

验证,data文件已删除

[root@slave1 ~]# hadoop fs -cat /test/data

cat: `/test/data': No such file or directory


 

分享