Hadoop(4)-Python借助pyhdfs对Hadoop的HDFS分布式文件系统的全部操作详细实例演示

网友投稿 641 2022-08-23


Hadoop(4)-Python借助pyhdfs对Hadoop的HDFS分布式文件系统的全部操作详细实例演示

1、安装

执行如下命令即可安装

pip install pyhdfs

注意,在windows上对虚拟机上的HDFS进行远程操作时,需要在本机的hosts文件中填写ip和主机名的映射关系如这里:

2、pyhdfs与HDFS常用的交互操作

在HDFS上指定目录下创建一个文件夹,然后查看此文件夹是否存在

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") fs.mkdirs("/test_01") file_or_dirs=fs.listdir("/") print(file_or_dirs)

执行结果为:

['test_01']

在HDFS上获取用户的根目录

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") home_dir=fs.get_home_directory() print(home_dir)

执行结果如下:

/user/root

获取可用的节点

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") active_nodes=fs.get_active_namenode() print(active_nodes)

执行结果如下:这里因为是单机版环境

192.168.1.204:50070

在HDFS上创建一个文件,并写入内容:

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") all_files = fs.listdir("/") print(all_files) fs.create("/demo_01.txt",b"hello world",override=True) all_files=fs.listdir("/") print(all_files)

执行结果如下:

['test_01']['demo_01.txt', 'test_01']

删除文件

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") all_files = fs.listdir("/") print(all_files) fs.delete("/demo_01.txt") all_files=fs.listdir("/") print(all_files)

执行结果如下:

['demo_01.txt', 'test_01']['test_01']

查看文件是否存在

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") print(fs.exists("/demo_01.txt")) all_files = fs.listdir("/") print(all_files) fs.create("/demo_01.txt",b"hello world") print(fs.exists("/demo_01.txt")) all_files=fs.listdir("/") print(all_files)

执行结果如下:

False['test_01']True['demo_01.txt', 'test_01']

读取文件内容:

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") f=fs.open("/demo_01.txt") ctx=f.read().decode("utf-8") print(ctx) f.close()

执行内容如下:

hello world

向文件中增加内容

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") f=fs.open("/demo_01.txt") ctx=f.read().decode("utf-8") print(ctx) f.close() fs.append("/demo_01.txt",b"\nhello hadoop!") print("-------------------------") f = fs.open("/demo_01.txt") ctx = f.read().decode("utf-8") print(ctx) f.close()

执行结果如下:

hello worldhello hadoop!-------------------------

查看文件属性

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") status=fs.get_file_status("/demo_01.txt") print(status)

执行结果如下:

FileStatus(accessTime=1623756299241, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729466, owner='root', pathSuffix='', permission='644', replication=1, storagePolicy=0, type='FILE')

查看当前文件的状态

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") status=fs.list_status("/demo_01.txt") print(status)

执行结果如下:

[FileStatus(accessTime=1623756299241, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729466, owner='root', pathSuffix='', permission='644', replication=1, storagePolicy=0, type='FILE')]

list_status 和get_file_status的区别是list_status可以查看路径

重命名文件或文件夹

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") print(fs.listdir("/")) fs.rename("/test_01","/test_02") print(fs.listdir("/"))

执行结果如下:

['demo_01.txt', 'test_01']['demo_01.txt', 'test_02']

将本地文件拷贝至HDFS

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") print(fs.listdir("/")) fs.copy_from_local("demo_02.txt","/demo_02.txt") print(fs.listdir("/"))

执行结果如下:

['demo_01.txt', 'test_02']['demo_01.txt', 'demo_02.txt', 'test_02']

将HDFS上文件拷贝到本地

import pyhdfsimport osif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") print(os.listdir(".")) fs.copy_to_local("/demo_01.txt","demo_01.txt") print(os.listdir("."))

执行结果如下:

['app1', 'db.sqlite3', 'demo_02.txt', 'manage.py', 'mysite1', 'static', 'templates', 'test.py']['app1', 'db.sqlite3', 'demo_01.txt', 'demo_02.txt', 'manage.py', 'mysite1', 'static', 'templates', 'test.py']

获取路径的总览信息(目录,文件个数等)

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") summary=fs.get_content_summary("/") print(summary)

执行结果如下:

ContentSummary(directoryCount=2, ecPolicy='', fileCount=2, length=56, quota=9223372036854775807, snapshotDirectoryCount=0, snapshotFileCount=0, snapshotLength=0, snapshotSpaceConsumed=0, spaceConsumed=56, spaceQuota=-1, typeQuota={})

查看文件的校验和

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") check_sum=fs.get_file_checksum("/demo_01.txt") print(check_sum)

执行结果如下:

FileChecksum(algorithm='MD5-of-0MD5-of-512CRC32C', bytes='00000200000000000000000036e110bcf9265d7f5fdd153161b162d800000000', length=28)

设置文件所有者

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") print(fs.get_file_status("/demo_01.txt")) fs.set_owner("/demo_01.txt",owner="hdfs") print(fs.get_file_status("/demo_01.txt"))

执行结果如下:

FileStatus(accessTime=1623761641609, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729466, owner='root', pathSuffix='', permission='644', replication=1, storagePolicy=0, type='FILE')FileStatus(accessTime=1623761641609, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729466, owner='hdfs', pathSuffix='', permission='644', replication=1, storagePolicy=0, type='FILE')

设置文件的副本数

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") print(fs.get_file_status("/demo_01.txt")) fs.set_replication("/demo_01.txt",replication=5) print(fs.get_file_status("/demo_01.txt"))

执行结果如下:

FileStatus(accessTime=1623761641609, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729466, owner='root', pathSuffix='', permission='644', replication=1, storagePolicy=0, type='FILE')FileStatus(accessTime=1623761641609, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729466, owner='root', pathSuffix='', permission='644', replication=5, storagePolicy=0, type='FILE')

设置文件的修改时间和访问时间,修改时间和访问时间均为长整形,指从1970年1月1日开始的milliseconds

import pyhdfsif __name__=="__main__": fs=pyhdfs.HdfsClient(hosts="192.168.1.204:50070",user_name="root") print(fs.get_file_status("/demo_01.txt")) fs.set_times("/demo_01.txt",modificationTime=1623756729499,accessTime=1623761641699) print(fs.get_file_status("/demo_01.txt"))

执行结果如下:

FileStatus(accessTime=1623761641609, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729466, owner='root', pathSuffix='', permission='644', replication=5, storagePolicy=0, type='FILE')FileStatus(accessTime=1623761641699, blockSize=134217728, childrenNum=0, fileId=16389, group='supergroup', length=39, modificationTime=1623756729499, owner='root', pathSuffix='', permission='644', replication=5, storagePolicy=0, type='FILE')

以上基本是pyhdfs的全部操作


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:vue 实现删除对象的元素 delete
下一篇:Python----抽象类的使用方法和使用场景(python运用场景)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~