目录
一、HDFS常用命令
二、Python连接HDFS操作
一、HDFS常用命令
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)是Hadoop集群中的一部分,用于存储大量数据,并运行在商用硬件集群上。以下是HDFS中常用的文件和文件夹操作命令:
1、查看HDFS文件系统:
hdfs dfs -ls <path>
2、上传文件到HDFS:
hdfs dfs -put <local_path> <hdfs_path>
3、从HDFS下载文件:
hdfs dfs -get <hdfs_path> <local_path>
4、在HDFS内复制文件:
hdfs dfs -cp <source> <destination>
5、在HDFS内移动文件:
hdfs dfs -mv <source> <destination>
6、删除HDFS中的文件:
hdfs dfs -rm <path>
7、递归删除HDFS中的目录和文件:
hdfs dfs -rm -r <path>
8、创建HDFS目录:
hdfs dfs -mkdir <path>
9、递归创建HDFS目录:
hdfs dfs -mkdir -p <path>
10、查看HDFS中的文件内容:
hdfs dfs -cat <path>
11、查看HDFS中的文件末尾内容:
hdfs dfs -tail <path>
12、更改HDFS中文件的所有者:
hdfs dfs -chown <user>:<group> <path>
13、更改HDFS中文件的权限:
hdfs dfs -chmod <mode> <path>
14、更改HDFS中文件的副本数:
hdfs dfs -setrep -w <replication_factor> <path>
15、文本文件内容追加到HDFS文件:
hdfs dfs -appendToFile <local_file> <hdfs_file>
16、在HDFS中统计文件夹/文件大小:
hdfs dfs -du -s -h <path>
17、在HDFS中统计文件夹/文件大小:
hdfs dfs -du -h <path>
18、检查HDFS文件系统的磁盘空间使用情况:
hdfs dfs -df -h
19、列出HDFS中正在执行的操作:
hdfs dfsadmin -report
二、Python连接HDFS操作
本文使用hdfs库进行操作,其他的库如PyDoop、HdfsCLI也都可以连接HDFS。
1、安装第三方库
pip install hdfs
2、连接HDFS
初始化客户端时,使用的端口号是NameNode节点所使用的端口号,具体信息可以在hdfs-site.xml文件中查看。
from hdfs import InsecureClient
# 初始化客户端,HDFS的地址和端口
client = InsecureClient('http://localhost:50070', user='root')
# 列出HDFS上的文件
client.list('/')
3、文件操作
# 文件和目录的路径
hdfs_dir_path = '/user/hdfs/my_directory'
hdfs_file_path = '/user/hdfs/my_directory/my_file.txt'
# 列出HDFS根目录的内容
print("List HDFS root directory:")
print(client.list('/'))
# 创建目录
print("\nCreating directory:")
client.makedirs(hdfs_dir_path)
# 上传文件到HDFS
print("\nUploading file to HDFS:")
with client.write(hdfs_file_path, overwrite=True) as writer:
writer.write('Hello, HDFS!')
# 列出目录内容
print("\nList directory contents:")
print(client.list(hdfs_dir_path))
# 读取文件内容
print("\nReading file content:")
with client.read(hdfs_file_path) as reader:
content = reader.read()
print(content)
# 追加内容到文件
print("\nAppending to file:")
with client.write(hdfs_file_path, append=True) as writer:
writer.write('\nAppend this line.')
# 检查文件状态
print("\nChecking file status:")
status = client.status(hdfs_file_path)
print(status)
# 复制文件
print("\nCopying file:")
client.copy(hdfs_file_path, '/user/hdfs/my_directory/copy_of_my_file.txt')
# 移动文件
print("\nMoving file:")
client.move(hdfs_file_path, '/user/hdfs/my_directory/moved_file.txt')
# 删除文件
print("\nDeleting file:")
client.delete('/user/hdfs/my_directory/moved_file.txt')
# 删除目录(递归删除)
print("\nDeleting directory recursively:")
client.delete(hdfs_dir_path, recursive=True)