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牛刀小试密码爆破
Feb 03 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
教你利用Selenium+python自动化来解决pip使用异常
May 20 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
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
python多进程操作实例
2014/11/21 Python
python自动zip压缩目录的方法
2015/06/28 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
详解Python正则表达式re模块
2019/03/19 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
python/golang 删除链表中的元素
2020/09/14 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
大学生实习思想汇报
2014/01/12 职场文书
员工年终自我评价
2014/09/14 职场文书
大学毕业生个人总结
2015/02/28 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书