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编写暴力破解FTP密码小工具
Nov 19 Python
Python语言的面相对象编程方式初步学习
Mar 12 Python
Centos Python2 升级到Python3的简单实现
Jun 21 Python
使用python实现ANN
Dec 20 Python
Python数据分析库pandas基本操作方法
Apr 08 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
python for循环输入一个矩阵的实例
Nov 14 Python
200行python代码实现2048游戏
Jul 17 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 Python
python四种出行路线规划的实现
Jun 23 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 printf输出格式使用说明
2010/12/05 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
jQuery实现增删改查
2020/12/22 jQuery
Python随机数random模块使用指南
2016/09/09 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
微观物理专业自荐信
2014/01/26 职场文书
人事专员的职责
2014/02/26 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
公司租车协议书
2015/01/29 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
合同审查法律意见书
2015/06/04 职场文书
预备党员表决心的话
2015/09/22 职场文书
Java存储没有重复元素的数组
2022/04/29 Java/Android
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers
基于Python实现西西成语接龙小助手
2022/08/05 Golang