此次使用python的hdfs库操作HDFS,首相安装该库:pip install hdfs

其次,要保证HDFS可用,如下图就代表可用,当然你列出的文件和我的不同

老规矩,先来看看它这个库的大概结构,方便以后调用。先 import hdfs ,然后跟进hdfs库,查看定义它的地方。如下,既然是连接的库,那么这个client就是连接的客户端了,这里出现了三个client,它们有什么不同

首先是Client类,转到定义处之后,可以发现它里面有很多操作,基本的增删查改都有了,看它的 __init__ 方法,里面有url远程连接地址,但没有用户名的参数,HDFS像也是一种文件系统,也支持权限管理,如果对文件指定了权限,那么使用该类就会失败

然后是InsecureClient(不安全的客户端),如下图,InsecureClient类只有一个__init__方法,但是它继承了Client类,所以它可以拥有Client类的所有方法,并且它的__init__方法中有user参数,可以指定用户名

最后是TokenClient(令牌客户端),如下图。其结构和InsecureClient基本差不多,只是将user参数改为token,至于token是什么。

额……额……额……我猜测,应该,和Web的token差不多,使用一段字符串短暂代表本次会话,当然这段字符串是由服务端产生的,拥有这段字符串就代表本次的客户端是可信任的,额,这是我猜的,别当真。

为了正常运行,本次远程连接调用InsecureClient类。

连接操作

from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')  # 指定远程地址,和用户名
print(lian.list('/'))  # 列出根目录下的所有文件

# 增加文件夹
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.makedirs('/niubi')  # 在根目录下创建一个文件夹,名字叫做niubi
print(lian.list('/'))
# 增加文件/写文件
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.write(hdfs_path='/niubi/shang', overwrite=True, data='世界你好,我来了'.encode('utf-8'))  # 在/niubi/目录下面创建名字为shang的文件,里面写入数据“世界你好,我来了”。注意,数据要使用utf-8编码才行,该方法还有一个要注意的参数,append参数用于说明要不要覆盖已有的内容,默认为False,即在尾部添加。overwrite参数指明如果文件已经存在时的操作,True表示覆盖,False时如果文件已存在就抛异常
print(lian.list('/niubi'))
# 上传文件
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.upload(hdfs_path='/', local_path='C:/Users/gzsqy/Desktop/Git.md')  # 注意目录使用的是正斜杠/,而不是反斜杠\
print(lian.list('/'))

# 查文件夹
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print(lian.list('/'))  # 查看根目录下的所有文件夹
# 查看文件是否存在
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print(lian.status(hdfs_path='/Git.mds', strict=False))  # strict如果设置为True时,文件不存在就会抛出异常,如果为False文件不存在就会返回None。如果文件存在,不管设置了什么都会返回改文件的block信息
# 查看文件的内容
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
with lian.read('/niubi/shang') as f:  # read方法返回的是上下文管理器对象,所以要使用with调用print(f.data.decode('utf-8'))  # 返回的数据放在read函数的data变量里面,并且存储的是utf-8的编码,所以要转码才能看到中文,当然,英文不用转码

read函数有几个参数要注意

  • offset:指定开始读取的偏移量

  • length:指定读取的长度,默认读取文件所有内容。如果文件内容太大,比如几个G的大小,后果你懂得。

  • buffer_size:缓冲区大小

  • chunk_size:该值有三种情况(也可以说是两种)

    • 该值默认为0,执行函数后返回的结果是一个上下文管理器对象。

    • 如果设置为正值如1,那么就会在结果的上下文管理器对象中使用生成器的方式返回文件内容

    • from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
      with lian.read('/xiaomi.txt', chunk_size=1) as f:for i in f:print(i)
      
    • 第三情况要参考另一个参数delimiter,在上下文管理器中将返回结果切割

  • delimiter:用于指定分隔符。比如csv格式的文件使用半角的逗号作为分隔符

# 删除文件
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print('删除前:', lian.list('/niubi'))
lian.delete('/niubi/shang')   # 指定要删除的文件位置
print('删除后:', lian.list('/niubi'))
# 删除文件夹
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
print('删除前:', lian.list('/'))
lian.delete('/niubi')  # 指定要删除的文件夹位置
print('删除后:', lian.list('/'))

# 重命名文件夹
from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
lian.makedirs('/niubi')  # 上一步删除了文件夹,这里再新建回来
print('重命名前:', lian.list('/'))
lian.rename('/niubi', '/niniubi')  # 旧文件夹名称位置,新文件夹名称位置
print('重命名后:', lian.list('/'))

下载文件

from hdfs import InsecureClientlian = InsecureClient(url='http://192.168.31.224:9870', user='zhong')
# lian.write(hdfs_path='/niniubi/shang', overwrite=True, data='世界你好,我来了'.encode('utf-8'))
lian.download(hdfs_path='/niniubi/shang', overwrite=True, local_path='C:/Users/gzsqy/Desktop/')

python使用hdfs库操作Hadoop的HDFS相关推荐

  1. python使用happybase库操作hbase

    若想深入理解Hbase的系统架构,推荐:https://www.jianshu.com/p/479bc6308381 happybase官方文档:https://happybase.readthedo ...

  2. python利用 WMI 库操作windows

    转载自 http://python.jobbole.com/86349/ 最近在网上搜索Python和WMI相关资料时,发现大部分文章都千篇一律,并且基本上只说了很基础的使用,并未深入说明如何使用WM ...

  3. python使用xlwings库操作Excel常见操作

    目录 安装 **前置知识** 详细使用步骤 **一.打开Excel程序** **二.保存.退出.关闭** **三.新建 Excel 文件** **四.读取内容** **五.写入数据** 1.写入当前文 ...

  4. python使用 docx 库操作 docx 格式文件

    docx 库 文章结构: 一.docx 基本用,创建 docx 文件并添加数据 二.深入理解文本格式(format),并设置所格式属性(attribute) 三.深入理解样式(styles),以及如何 ...

  5. Python使用openpyxl库操作Excel之(一)创建并保存一个Excel文件

    ①安装openpyxl库 打开cmd,输入 pip install openpyxl 命令即可. ②创建并保存一个Excel文件 import openpyxl #生成一个 Workbook 的实例化 ...

  6. python通过PyYaml库操作yaml文件

    1.YAML文件介绍 YAML全称YAML Aint't a Markup Language(YAML不是一种标记语言),是一种易读的序列化语言 通常应用在一些数据代码分离的场合,比如配置文件中 2. ...

  7. Python使用openpyxl库操作Excel之(二)访问已有的Excel文件

    ①指定路径打开Excel文件 使用openpyxl.load_workbook()方法来访问文件,括号内参数为文件的指定路径. 运行结果: <class 'openpyxl.workbook.w ...

  8. Python 使用docx库操作word文档中的表格单元格内容

    1.导入库 from docx import Document 2.加载word文档对象 doc = Document(path) 3.定位表格 # 获取所有表格对象 tables = doc.tab ...

  9. 大数据基础系列 5:Hadoop 实验——熟悉常用的 HDFS 目录操作和文件操作

    文章目录 前言 一.实验目的 二.实验平台 三.实验内容和要求 3.1.HDFS 目录操作 3.1.1.创建用户目录 3.1.2.显示 HDFS 中与当前用户对应的目录内容 3.1.3.列出 HDFS ...

最新文章

  1. CPU三级缓存技术解析
  2. 单调队列多重背包时间复杂度O(vn)
  3. 用nagios检测内存
  4. webpack相关配置
  5. php 实现自动加载更多,$.ajax+php实战教程之下拉时自动加载更多文章原理分析二...
  6. 数据结构之栈的应用:递归
  7. python 加速方法_24种方法加速你的Python
  8. 关于理解《C++ 对象模型》中:把单一元素的数组放在末尾,struct可以拥有可变大小的数组...
  9. 40. 若一个类是函数子,则应该使它可配接
  10. P2668 斗地主 贪心+深搜
  11. AC9560网卡linux驱动安装
  12. C Sharp进行附合水准路线计算中间点高程简易程序
  13. KVM虚拟化技术(一)之环境部署
  14. java listener 模式_Java和GUI-根据MVC模式,ActionListener属于哪里?
  15. Visual Paradigm 里什么是复合结构图?
  16. 分享六款原型设计软件,交流协作更便捷
  17. 熟悉又陌生的 k8s 字段:finalizers
  18. PTA 乙级难点(全部)
  19. 精致纯CSS打造绿色漂亮导航栏
  20. 90%的人都不知道网页文字被禁止如何复制,教你几招神奇技能就可以免费解决

热门文章

  1. VBA-工作簿里面多个Shee拆分成独立的工作簿
  2. 如何把爱奇艺qsv格式转换成mp3格式,已解决
  3. 按键控制电源通断,实现各种设备/电脑开关机低功耗IC
  4. JVM笔记 -- 即时编译(JIT)
  5. 无线路由器媒体服务器怎么用,TP-LINK无线路由器网络存储共享的使用方法有哪些...
  6. 论坛群发,论坛顶贴验证码识别解决方案
  7. docker-compose 配置 容器 访问本地网络
  8. 东京、南京、西京、北京
  9. python小游戏 炸弹人小游戏设计与实现
  10. access中本年度的四月一日_access某表时间字段里的有效性规则为只能输入系统日期前一年五月一日(含)以前的日期,如何设置表达式?...