hdfs , Hadoop Distributed File System。Hadoop的分布式文件系统,安全行和扩展性没得说。
访问HDFS的方式有以下几种:
使用python访问HDFS比较容易:
这里主要介绍使用hdfs 访问HDFS,支持python 2.7和 python 3
文档地址: hdfs 2.1.0
pip install hdfs
3. ipython, 可选但强烈建议。
#!c:\python27\python.exe # -*- coding: UTF-8 -*- import traceback from hdfs import InsecureClient import time import sys from numpy import true_divide reload(sys) sys.setdefaultencoding("utf-8") try: root_path = "/" #获取客户端,并且指定登陆用户,如果使用Client创建客户端就不能指定用户了 c = InsecureClient(url="http://172.16.21.22:50070",user=‘hdfs‘,root=root_path) #创建目录 c.makedirs(‘/user/root/pyhdfs‘) #写文件 #第一个参数:文件路径 #第二个参数:文件内容 #第三个参数:是否覆盖已有的文件,如果不覆盖,且文件已经存在会抛出异常 c.write(‘/user/root/pyhdfs/1.log‘,time.asctime(time.localtime(time.time())) + ‘\n‘,True) #下载文件 #第一个参数,hdfs路径 #第二个参数,本地路径 #第三个参数,是否覆盖本地文件 c.download(‘/user/root/pyhdfs/1.log‘, ‘.‘, True) #上传文件 #第一个参数,hdfs路径 #第二个参数,本地路径 #第三个参数,是否覆盖hdfs已有的文件 c.upload(‘/user/root/pyhdfs/‘, ‘./pyhdfs_example.py‘, True) #获取目录下的的文件列表,第一个参数:hdfs路径,第二个参数是否获取文件的状态数据 #另外pyhdfs 有一个walk函数 c.walk(hdfs_path, depth, status) #用法和os.walk类似,遍历目录非常好用 hdfs_files = c.list(‘/user/root/pyhdfs‘, True) for f in hdfs_files: print f #输出结果如下 #(u‘1.log‘, {u‘group‘: u‘supergroup‘, u‘permission‘: u‘755‘, u‘blockSize‘: 134217728, u‘accessTime‘: 1519459768533L, u‘pathSuffix‘: u‘1.log‘, u‘modificationTime‘: 1519459768569L, u‘replication‘: 1, u‘length‘: 25, u‘childrenNum‘: 0, u‘owner‘: u‘hdfs‘, u‘storagePolicy‘: 0, u‘type‘: u‘FILE‘, u‘fileId‘: 33037}) #(u‘pyhdfs_example.py‘, {u‘group‘: u‘supergroup‘, u‘permission‘: u‘755‘, u‘blockSize‘: 134217728, u‘accessTime‘: 1519459768683L, u‘pathSuffix‘: u‘pyhdfs_example.py‘, u‘modificationTime‘: 1519459768711L, u‘replication‘: 1, u‘length‘: 1624, u‘childrenNum‘: 0, u‘owner‘: u‘hdfs‘, u‘storagePolicy‘: 0, u‘type‘: u‘FILE‘, u‘fileId‘: 33038}) #返回文件的summary信息,算法是MD5-of-0MD5-of-512CRC32C #可以使用 #返回结果:{u‘spaceConsumed‘: 2567, u‘quota‘: -1, u‘spaceQuota‘: -1, u‘length‘: 2567, u‘directoryCount‘: 0, u‘fileCount‘: 1} print c.content(‘/user/root/pyhdfs/pyhdfs_example.py‘) #返回的是md5的checksum #结果:{u‘length‘: 28, u‘bytes‘: u‘0000020000000000000000005506d1dae3da4073662038f2392c08b700000000‘, u‘algorithm‘: u‘MD5-of-0MD5-of-512CRC32C‘} #本地文件的checksum生成:hadoop fs -checksum /abc.txt print c.checksum(‘/user/root/pyhdfs/pyhdfs_example.py‘) #删除文件,第一个参数hdfs路径,第二参数,是否递归删除 c.delete(‘/user/root/pyhdfs/‘, True) except Exception , ex: print traceback.format_exc()
上面都是基于 HDFS WEBAPI 进行的操作,记录一下。
Reference:
https://zhuanlan.zhihu.com/p/33983161 python访问HDFS
原文:https://www.cnblogs.com/piperck/p/11081899.html