之前一直使用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进行操作详解

本文地址: http://www.cppcns.com/jiaoben/python/316949.html

python 新建文件 hdfs_python使用hdfs3模块对hdfs进行操作详解相关推荐

  1. python3d动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  2. python调用包的路径_Python3 模块、包调用路径详解

    如下所示: ''' 以下代码均为讲解,不能实际操作 ''' ''' 博客园 Infi_chu ''' ''' 模块的优点: 1.高可维护性 2.可以大大减少编写的代码量 模块一共有三种: 1.Pyth ...

  3. python 新建文件 hdfs_python基础操作以及hdfs操作

    一.前言 作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路,大体实现的功能是写一个通用类库将服务器本地存储的文件进行 ...

  4. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

  5. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

  6. python动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  7. python绘制动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  8. python中paste函数_PIL图像处理模块paste方法简单使用详解

    python2中提供了PIL基础的图像数据出来模块,在python3中更名为了pillow模块,名字虽然发生了改变,但是提供的方法和功能都是一样的,对于日常基础的图像数据处理分析来说是足够用了的,现在 ...

  9. python后台返回cookie_Django框架设置cookies与获取cookies操作详解

    本文实例讲述了Django框架设置cookies与获取cookies操作.分享给大家供大家参考,具体如下: 在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是req ...

  10. python列表可以删除和修改吗_Python列表常见操作详解(获取,增加,删除,修改,排序等)...

    本文实例讲述了Python列表常见操作.分享给大家供大家参考,具体如下: 列表是由一系列按特定顺序排列的元素组成的对象.因为列表通常包含多个元素, 所以建议给列表指定一个表示复数的名称. 我们用方括号 ...

最新文章

  1. R语言plot函数可视化、ggplot2可视化把图像标题(title)的部分内容着色实战:标题的部分内容配置不同的色彩、副标题(subtitle)的内容配置不同的色彩
  2. android开发实验报告二,《Android 移动应用开发》实验报告-范本2(33页)-原创力文档...
  3. nginx的location配置root、alias用法和区别
  4. ELK之收集日志到mysql数据库
  5. day4-生成器并行运算
  6. hdfs yarn hbase pid文件被删除解决办法:修改hadoop-daemon.sh yarn-daemon.sh hbase-daemon.sh中PID_DIR存储路径
  7. ideaIU-2018.1.5.win-scala 激活方式
  8. xshell和Xftp连接Linux
  9. 【Flink】Flink source后全过滤数据导致监控数据为0
  10. DeleteDC、ReleaseDC、DeleteObject - [Daliy APIs]
  11. 20220309讨论
  12. linux拷贝不是某个后缀的文件夹,linux下怎么把一个文件复制到多个文件夹里
  13. rocketmq存储消息mysql_消息中间件—RocketMQ消息存储(一)
  14. oracle官网下载plsql,Oracle、OracleClient、PLSQL下载安装配置(64位)
  15. 电商网站后台九大功能模块详解
  16. java合并果子_【单调队列】合并果子
  17. 阿里巴巴B2B电商算法首次对外公开
  18. 声源定位系统设计(一)——MVDR波束形成算法
  19. mat-icon 翻转_案例研究-翻转网站以获取利润
  20. 时钟源系统(时统系统)GPTP对自动驾驶的重要性

热门文章

  1. java做抽奖小程序_基于JavaScript实现简单的随机抽奖小程序
  2. Android 功能系列篇
  3. Android——控件显示和隐藏
  4. Android 自定义View(二)绘制一个封闭多边形
  5. Vue学习手记02-路由创建
  6. 4_while循环结构和breakcontinue
  7. 蓝桥杯十六进制转化为十进制
  8. 判断字符是否包含有特殊字符
  9. 深度优先搜索与广度优先搜索———模板
  10. Swift之 ? 和 !