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使用cookie库操保存cookie详解
Mar 03 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
python3.5使用tkinter制作记事本
Jun 20 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
python Django的web开发实例(入门)
Jul 31 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
Python 使用dict实现switch的操作
Apr 07 Python
简单介绍Python的第三方库yaml
Jun 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
一个PHP+MSSQL分页的例子
2006/10/09 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
PHP实现货币换算的方法
2014/11/29 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
php批量删除操作代码分享
2017/02/26 PHP
php递归函数怎么用才有效
2018/02/24 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
Python中str.format()详解
2017/03/12 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
大学生演讲稿
2014/04/25 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
Mysql Show Profile
2021/04/05 MySQL
浅谈MySQL user权限表
2021/06/18 MySQL