(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_statushdfs_pathstrict = True 

  • hdfs_path - 远程路径。
  • strict - 如果路径不存在False,则返回None而不是引发异常
  • 注:Support for ACLs has been disabled by setting dfs.namenode.acls.enabled to false.

2.1.10、checksum:获取远程文件的校验

格式说明:checksumhdfs_path ):hdfs_path - 远程路径。必须指向一个文件

2.1.11、content:获取HDFS上的文件或文件夹的ContentSummary

 格式说明:contenthdfs_pathstrict = 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

逐步再补充过来

posted @ 2019-03-17 21:20  V脚踏实地V  阅读(173)  评论(0)    收藏  举报