Python结合pyhdfs模块操作HDFS分布式文件系统

使用python操作hdfs本身并不难,只不过是把对应的shell 功能“翻译”成高级语言,我这里选用的是hdfs,下边的实例都是基于hdfs包进行的。

1:安装

由于我的是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的

pip install hdfs
 

2:Client——创建集群连接

​from hdfs import *
client = Client("https://127.0.0.1:50070")

其他参数说明:

classhdfs.client.Client(url,root=None,proxy=None,timeout=None,session=None)

url:ip:端口

root:制定的hdfs根目录

proxy:制定登陆的用户身份

timeout:设置的超时时间

seesion:requests.Session instance, used to emit all requests.(不是太懂,应该四用户发出请求)

这里我们着重看一下proxy这个,首先我们指定root用户连接

client = Client("https://127.0.0.1:50070",root="/",timeout=100,session=False)
client.list("/")
[u'hbase']

3. 文件操作实例

3.1 列出目录内容

list() 方法用来列出指定路径下的所有文件和子目录。这个方法返回一个列表,列出该路径下的所有文件和目录。

# 列出 HDFS 根目录下的文件和目录 
files = client.list('/') 
print(files) 
# 输出可能是:['hbase', 'user', 'tmp']
3.2 上传文件到 HDFS

upload() 方法允许将本地文件上传到 HDFS。如果目标路径已经存在,文件将被覆盖。

# 上传本地文件到
HDFS local_file_path = 'local_file.txt' 
# 本地文件 
hdfs_file_path = '/user/hdfs/remote_file.txt'
# HDFS 中的目标路径 
client.upload(hdfs_file_path, local_file_path)
  • 第一个参数是 HDFS 上的目标路径。
  • 第二个参数是本地文件的路径。
3.3 下载文件从 HDFS 到本地

download() 方法允许从 HDFS 下载文件到本地。如果文件较大,下载过程中会自动处理进度条。

# 下载 HDFS 上的文件到本地 
hdfs_file = '/user/hdfs/remote_file.txt' 
local_file = 'downloaded_file.txt' 
client.download(hdfs_file, local_file)
3.4 删除文件或目录

delete() 方法用于删除 HDFS 上的文件或目录。通过指定 recursive=True 可以删除包含文件的整个目录。

# 删除单个文件 
client.delete('/user/hdfs/some_file.txt') 
# 删除目录及其所有文件 
client.delete('/user/hdfs/some_directory', recursive=True)
3.5 创建目录

makedirs() 方法用于在 HDFS 中创建新目录。如果目录已存在,则不做任何操作。

# 在 HDFS 上创建新目录 client.makedirs('/user/hdfs/new_directory')

4. 获取文件的状态

status() 方法提供文件或目录的状态信息,例如文件大小、修改时间、权限等。

# 获取 HDFS 文件的状态 
file_status = client.status('/user/hdfs/remote_file.txt') 
print(file_status)

返回结果是一个字典,包含文件的相关信息,如:

{ 'length': 12345, # 文件大小(字节) 
'pathSuffix': 'remote_file.txt', # 文件名 
'permission': 'rw-r--r--', # 权限 
'owner': 'hdfs', # 文件拥有者 
'group': 'hadoop', # 文件所属组 
'modificationTime': 1609459200000, # 文件修改时间 
'accessTime': 1609459200000, # 文件访问时间 
'blockSize': 134217728, # 块大小 
'fileId': 12345 # 文件 ID }

5. 错误处理和异常捕获

在进行文件操作时,可能会遇到各种异常,如文件不存在、路径错误等。你可以使用 try-except 语句捕获这些异常。

try: # 尝试上传一个不存在的本地文件 
    client.upload('/user/hdfs/', 'non_existent_file.txt') 
except Exception as e: 
    print(f"An error occurred: {e}")

6. 使用 proxy 进行用户身份验证

proxy 参数允许指定 HDFS 操作的用户身份。这通常用于在多用户环境中进行操作时,需要指定某个特定用户身份执行文件操作。

# 使用指定的用户身份进行操作 
client = Client("http://127.0.0.1:50070", root="/", proxy="hdfs_user") 
# 列出目录内容
files = client.list('/') print(files)

7. 代理用户身份解释

proxy 参数是用来指定在与 HDFS 集群交互时所使用的用户身份。通常,在集群中,你的操作可能需要使用不同的用户身份来执行操作。通过 proxy 参数,你可以指定一个特定的用户,而不是默认的当前系统用户身份。例如,假设 HDFS 配置了 Kerberos 认证,那么你可以通过 proxy 参数来指定一个 Kerberos 用户身份。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值