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脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
python列表的常用操作方法小结
May 21 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
python实现Adapter模式实例代码
Feb 09 Python
python Celery定时任务的示例
Mar 13 Python
python创建文件备份的脚本
Sep 11 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
pycharm 对代码做静态检查操作
Jun 09 Python
keras topN显示,自编写代码案例
Jul 03 Python
如何基于python把文字图片写入word文档
Jul 31 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 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
PHP代码优化的53个细节
2014/03/03 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
Python中类的继承代码实例
2014/10/28 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
JAVA高级程序员面试题
2013/09/06 面试题
应届生自我鉴定
2013/12/11 职场文书
大学自我评价
2014/02/12 职场文书
三项教育活动实施方案
2014/03/30 职场文书
音乐教师求职信
2014/06/28 职场文书
求职简历自我评价范文
2015/03/10 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书