python使用hdfs3模块对hdfs进行操作详解


Posted in Python onJune 06, 2020

之前一直使用hdfs的命令进行hdfs操作,比如:

hdfs dfs -ls /user/spark/
hdfs dfs -get /user/spark/a.txt /home/spark/a.txt #从HDFS获取数据到本地
hdfs dfs -put -f /home/spark/a.txt /user/spark/a.txt #从本地覆盖式上传
hdfs dfs -mkdir -p /user/spark/home/datetime=20180817/
....

身为一个python程序员,每天操作hdfs都是在程序中写各种cmd调用的命令,一方面不好看,另一方面身为一个Pythoner这是一个耻辱,于是乎就挑了一个hdfs3的模块进行hdfs的操作,瞬间就感觉优雅多了:

hdfs 官方API:https://hdfs3.readthedocs.io/en/latest/api.html

>>> from hdfs3 import HDFileSystem
#链接HDFS
>>> hdfs = HDFileSystem(host='localhost', port=8020)
>>> hdfs.ls('/user/data')
>>> hdfs.put('local-file.txt', '/user/data/remote-file.txt')
>>> hdfs.cp('/user/data/file.txt', '/user2/data')

#文件读取

#txt文件全部读取
>>> with hdfs.open('/user/data/file.txt') as f:
...  data = f.read(1000000)
#使用pandas读取1000行数据
>>> with hdfs.open('/user/data/file.csv.gz') as f:
...  df = pandas.read_csv(f, compression='gzip', nrows=1000)

#写入文件

>>> with hdfs.open('/tmp/myfile.txt', 'wb') as f:
... f.write(b'Hello, world!')

#多节点连接设置

host = "nameservice1"
conf = {"dfs.nameservices": "nameservice1",
  "dfs.ha.namenodes.nameservice1": "namenode113,namenode188",
  "dfs.namenode.rpc-address.nameservice1.namenode113": "hostname_of_server1:8020",
  "dfs.namenode.rpc-address.nameservice1.namenode188": "hostname_of_server2:8020",
  "dfs.namenode.http-address.nameservice1.namenode188": "hostname_of_server1:50070",
  "dfs.namenode.http-address.nameservice1.namenode188": "hostname_of_server2:50070",
  "hadoop.security.authentication": "kerberos"
}
fs = HDFileSystem(host=host, pars=conf)

#API

hdfs = HDFileSystem(host='127.0.0.1', port=8020)
hdfs.cancel_token(token=None) #未知,求大佬指点
hdfs.cat(path) #获取指定目录或文件的内容
hdfs.chmod(path, mode) #修改制定目录的操作权限
hdfs.chown(path, owner, group) #修改目录所有者,以及用户组
hdfs.concat(destination, paths) #将指定多个路径paths的文件,合并成一个文件写入到destination的路径,并删除源文件(The source files are deleted on successful completion.成功完成后将删除源文件。)
hdfs.connect() #连接到名称节点 这在启动时自动发生。 LZ:未知作用,按字面意思,应该是第一步HDFileSystem(host='127.0.0.1', port=8020)发生的
hdfs.delegate_token(user=None)
hdfs.df() #HDFS系统上使用/空闲的磁盘空间
hdfs.disconnect() #跟connect()相反,断开连接
hdfs.du(path, total=False, deep=False) #查看指定目录的文件大小,total是否把大小加起来一个总数,deep是否递归到子目录
hdfs.exists(path) #路径是否存在
hdfs.get(hdfs_path, local_path, blocksize=65536) #将HDFS文件复制到本地,blocksize设置一次读取的大小
hdfs.get_block_locations(path, start=0, length=0) #获取块的物理位置
hdfs.getmerge(path, filename, blocksize=65536) #获取制定目录下的所有文件,复制合并到本地文件
hdfs.glob(path) #/user/spark/abc-*.txt 获取与这个路径相匹配的路径列表
hdfs.head(path, size=1024) #获取指定路径下的文件头部分的数据
hdfs.info(path) #获取指定路径文件的信息
hdfs.isdir(path) #判断指定路径是否是一个文件夹
hdfs.isfile(path) #判断指定路径是否是一个文件
hdfs.list_encryption_zones() #获取所有加密区域的列表
hdfs.ls(path, detail=False) #返回指定路径下的文件路径,detail文件详细信息
hdfs.makedirs(path, mode=457) #创建文件目录类似 mkdir -p
hdfs.mkdir(path) #创建文件目录
hdfs.mv(path1, path2) #将path1移动到path2
open(path, mode='rb', replication=0, buff=0, block_size=0) #读取文件,类似于python的文件读取
hdfs.put(filename, path, chunk=65536, replication=0, block_size=0) #将本地的文件上传到,HDFS指定目录
hdfs.read_block(fn, offset, length, delimiter=None) #指定路径文件的offset指定读取字节的起始点,length读取长度,delimiter确保读取在分隔符bytestring上开始和停止
>>> hdfs.read_block('/data/file.csv', 0, 13) 
b'Alice, 100\nBo'
>>> hdfs.read_block('/data/file.csv', 0, 13, delimiter=b'\n') 
b'Alice, 100\nBob, 200'
hdfs.rm(path, recursive=True) #删除指定路径recursive是否递归删除
hdfs.tail(path, size=1024) #获取 文件最后一部分的数据
hdfs.touch(path) #创建一个空文件
hdfs.walk(path) #遍历文件树

补充知识:HDFS命令批量创建文件夹和文件

批量创建测试文件夹:

hadoop fs -mkdir -p /user/hivedata/temp/201912311001/d={27..30}/h={10..17}/m5={5,15,25}/

批量创建测试文件:

hadoop fs -touchz /user/hivedata/temp/201912311001/d={27..30}/h={10..17}/m5={5,15,25}/{0..5}.orc

最终效果:

hadoop fs -ls -R /user/hivedata/

python使用hdfs3模块对hdfs进行操作详解

以上这篇python使用hdfs3模块对hdfs进行操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 判断自定义对象类型
Mar 21 Python
python实现的文件夹清理程序分享
Nov 22 Python
Python实现竖排打印传单手机号码易撕条
Mar 16 Python
Python内置模块ConfigParser实现配置读写功能的方法
Feb 12 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
python使用minimax算法实现五子棋
Jul 29 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 #Python
python访问hdfs的操作
Jun 06 #Python
Python API 操作Hadoop hdfs详解
Jun 06 #Python
python读取hdfs上的parquet文件方式
Jun 06 #Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 #Python
完美解决python针对hdfs上传和下载的问题
Jun 05 #Python
python读取hdfs并返回dataframe教程
Jun 05 #Python
You might like
浅谈电磁辐射对健康的影响
2021/03/01 无线电
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
yii中widget的用法
2014/12/03 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
js 页面输出值
2008/11/30 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
python数据封装json格式数据
2018/03/04 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Python列表与元组的异同详解
2019/07/02 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
python内打印变量之%和f的实例
2020/02/19 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
python urllib和urllib3知识点总结
2021/02/08 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
汽车维修工岗位职责
2014/02/12 职场文书
产品质量保证书范本
2015/02/27 职场文书
趣味运动会新闻稿
2015/07/17 职场文书