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中for循环的使用
Apr 14 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
python使用PyGame模块播放声音的方法
May 20 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
python3操作mysql数据库的方法
Jun 23 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
python实现简单的tcp 文件下载
Sep 16 Python
python集合的新增元素方法整理
Dec 07 Python
Python Pandas解析读写 CSV 文件
Apr 11 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
第九节--绑定
2006/11/16 PHP
php下批量挂马和批量清马代码
2011/02/27 PHP
ini_set的用法介绍
2014/01/07 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
图文详解WinPE下安装Python
2016/05/17 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
项目资料员岗位职责
2013/12/10 职场文书
开学典礼策划方案
2014/05/28 职场文书
企业管理标语
2014/06/10 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
护林员个人总结
2015/03/04 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
信用卡催款律师函
2015/05/27 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
Python内置数据结构列表与元组示例详解
2021/08/04 Python