之前一直使用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进行操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】