HDFS shell操作
HDFS 是存取数据的分布式文件系统,对 HDFS 的操作就是文件系统的基本操作,如文件的创建、修改、删除、修改权限,目录的创建、删除、重命名等。对 HDFS 的操作命令类似于 Linux 的 shell对文件的操作,如 ls、mkdir、rm 等。
所有的 FS shell 命令使用 URI 路径作为参数,URI 格式是 scheme://authority/path。对 HDFS 文件系统,scheme 是 hdfs, 对本地文件系统,scheme 是 file. 其中 scheme 和authority 参数都是可选的,如果 scheme 未加指定,就会使用配置中指定的默认 scheme 值。
一个HDFS文件或目录比如 /parent/child 可以表示成 hdfs://namenode:namenodeport/parent/child ,或者更简单的 /parent/child (假设你配置文件中的默认值是 namenode:namenodeport )。大多数FS Shell命令的行为和对应的Linux Shell命令类似,不同之处会在下面介绍各命令使用详情时指出。出错信息会输出到 stderr ,其他信息输出到 stdout 。
对于路径的说明包括 hdfs 路径和 Linux 路径,如果没有明确指出,默认是 hdfs路径。
比如:
-
hadoop fs
命令可显示当前 Hadoop 版本所支持的命令: -
hadoop fs -ls /
。由于没有说明路径是Linux路径还是hdfs路径,默认就是hdfs路径: -
hadoop fs -put <多个 linux 上的文件> <hdfs 路径>
从Linux本地文件系统上传(复制)文件到hdfs文件系统 -
hadoop fs -touchz
创建空白文件 -
hadoop fs -get <hdfs 路径> < linux 路径>
可以复制 hdfs 文件到本地文件系统
HDFS管理工具
dfsadmin
hdfs dfsadmin
命令可以获取 HDFS 的状态信息,也可以在 HDFS 上执行的一系列管理操作。这个命令还有一系列参数可以选择。比如:
-
-help:帮助信息
-
-report:查看文件系统的基本信息和统计信息
-
-refreshNodes:重新读取 hosts 和 exclude 文件,使新的节点或需要退出集群的节点能够被 NameNode 重新识别。这个命令在新增节点或注销节点时用到
fsck
hadoop fsck file
命令用来检验 HDFS 中的文件是否正常可用。该工具可以检测文件块是否从 DataNode 中丢失,是否低于或高于文件副本要求。
比如:
fsck命令有一些选项可以选择,比如:
- -files:显示文件的名称、大小、块数量及是否可用
- -blocks:显示每个块在文件中的信息,一个块用一行显示
- -racks:展示了每个块所处的机架位置及 DataNode 的位置
均衡器
随着时间推移,各个 datanode 上的块分布会越来越不均衡。不均衡的集群会降低数据应用的本地性,导致部分 datanode 相对更加繁忙。应避免出现这种情况。
均衡器(balancer)程序是一个 Hadoop 守护进程,它将块从忙碌的 datanode 移到相对空闲的 datanode,从而重新分配块。同时坚持块副本放置策略,将副本分散到不同机架,以降低数据损坏率。它不断移动块,直到集群达到均衡的状态,即每个 datanode 的使用率和集群的使用率非常接近,差距不超过给定的阈值。可以通过以下命令启动均衡器:% start-balancer.sh