(P010)Python的程序包:hdfs
Python使用hdfs模块操作HDFS,比较方便。
(注:在测试python编写mapreduce时,做性能调优处理mapjoin时,一直没有找到相关的处理方法,考虑使用python直接进行mapjoin,找到hdfs这个模块)
一、简介
hdfs共有五个类,分别是:Client、Config、HdfsError、InsecureClient、NullHandler、TokenClient
三个py文件,分别是:client.py(客户端)、config.py(配置)、util.py(工具)
二、操作使用
2.1、Client
Client(url, root=None, proxy=None, timeout=None, session=None)
说明:url(ip:端口) 示例:"http://localhost:50070"
root(制定的hdfs根目录 ) 示例:root="/"
proxy()
示例如下:
client = hdfs.Client('http://localhost:50070', root='/', timeout=100, session=False)
查看所有方法:dir(client)
Client的方法如下:
2.1.1、read(hdfs_path, offset=0, length=None, buffer_size=None,encoding=None, chunk_size=0, delimiter=None, progress=None)
- hdfs_path - HDFS路径(文件名称)。
- offset - 起始字节位置。
- length - 要处理的字节数。
None将读取整个文件。 - buffer_size - 用于传输数据的缓冲区大小(以字节为单位)。默认值为HDFS配置中设置的值。
- encoding - 用于解码请求的编码。默认情况下,返回原始数据。这在python 3中非常有用,例如反序列化JSON数据(因为解码器需要unicode)。
- chunk_size - 如果设置为正数,则上下文管理器将返回一个生成器,产生每个
chunk_size字节而不是类似文件的对象(除非delimiter也设置,见下文)。 - delimiter - 如果设置,则每次遇到分隔符时,上下文管理器将返回一个生成器。此参数需要
encoding指定。 - progress - 用于跟踪进度的回调函数,调用每个
chunk_size字节(如果未指定块大小,则不可用)。它将传递两个参数,即上载文件的路径和到目前为止传输的字节数。完成后,它将-1作为第二个参数调用一次。
示例如下:
with client.read('/data/input/data_info') as reader:
content = reader.read()
2.1.2、status 获取路径的具体信息
status(hdfs_path, strict=True)
hdfs_path:就是hdfs路径
strict:设置为True时,如果hdfs_path路径不存在就会抛出异常,如果设置为False,如果路径为不存在,则返回None
示例:client.status('/data')
输出:{'accessTime': 0, 'blockSize': 0, 'childrenNum': 3, 'fileId': 16456, 'group': 'supergroup', 'length': 0, 'modificationTime': 1552570776880, 'owner': 'zhouyg', 'pathSuffix': '', 'permission': '755', 'replication': 0, 'storagePolicy': 0, 'type': 'DIRECTORY'}
2.1.3、list 获取指定路径的子目录信息
list(hdfs_path, status=False) : status:为True时,也返回子目录的状态信息,默认为Flase
示例:client.list('/')
输出:['data', 'hbase', 'hive', 'tmp']
2.1.4、makedirs 创建目录
makedirs(hdfs_path, permission=None) : permission:设置权限
示例:client.makedirs("/test",permission=777)
2.15、rename 重命名
格式说明:rename(hdfs_path, new_hdfs_path)
示例:client.rename("/test","/new_name")
2.1.6、delete 删除目录
格式说明:delete(hdfs_path, recursive=False)
recursive:删除文件和其子目录,设置为False如果不存在,则会抛出异常,默认为False
示例:client.delete("/new_name")
2.1.7、upload 上传数据
格式说明:upload(hdfs_path, local_path, overwrite=False, n_threads=1, temp_dir=None, chunk_size=65536,progress=None, cleanup=True, **kwargs)
overwrite:是否是覆盖性上传文件
n_threads:启动的线程数目
temp_dir:当overwrite=true时,远程文件一旦存在,则会在上传完之后进行交换
chunk_size:文件上传的大小区间
progress:回调函数来跟踪进度,为每一chunk_size字节。它将传递两个参数,文件上传的路径和传输的字节数。一旦完成,-1将作为第二个参数
cleanup:如果在上传任何文件时发生错误,则删除该文件
示例:client.upload("/test","/data/hadoop/test")
2.1.8、download 下载数据
格式说明:download(hdfs_path, local_path, overwrite=False, n_threads=1, temp_dir=None, **kwargs)
示例:client.download("/test/NOTICE.txt","/home")
2.1.9、acl_status:获取AclStatus以获取HDFS上的文件或文件夹
格式说明:acl_status(hdfs_path,strict = True )
- hdfs_path - 远程路径。
- strict - 如果路径不存在
False,则返回None而不是引发异常 - 注:Support for ACLs has been disabled by setting dfs.namenode.acls.enabled to false.
2.1.10、checksum:获取远程文件的校验
格式说明:checksum(hdfs_path ):hdfs_path - 远程路径。必须指向一个文件
2.1.11、content:获取HDFS上的文件或文件夹的ContentSummary
格式说明:content(hdfs_path,strict = True )
- hdfs_path - 远程路径。
- strict - 如果路径不存在
False,则返回None而不是引发异常 - 示例:
client.content('/data')
输出:{'directoryCount': 13, 'fileCount': 18, 'length': 391, 'quota': -1, 'spaceConsumed': 391, 'spaceQuota': -1, 'typeQuota': {}}
from_options
parts
resolve
root
set_acl
set_owner
set_permission
set_replication
set_times
url
urls
walk
write
详细介绍参见:https://hdfscli.readthedocs.io/en/latest/api.html#module-hdfs.client
逐步再补充过来
浙公网安备 33010602011771号