HDFS 快照是文件系统的只读时间点副本。可以对文件系统的子树或整个文件系统进行快照。 快照的一些常见用例是数据备份,防止用户错误和灾难恢复。
快照不是数据的简单拷贝,只做差异的复制,因此快照的生成往往非常的迅速。并且创建快照时,block 块并不会被拷贝。快照文件中只记录了 block 列表和文件大小,不会做任何数据拷贝。
具体操作指令如下:
hdfs dfsadmin -allowSnapshot <hdfs path> #开启 hdfs dfsadmin -disallowSnapshot <hdfs path> #禁用
hdfs dfs -createSnapshot <hdfs path> # 创建快照之前,先要允许该目录创建快照(开启)
hdfs dfs -createSnapshot <hdfs path> <snapshot name> # 其中<snapshot name>是自己指定的快照别名 # example: hdfs dfs -createSnapshot /test snapshot1
hdfs dfs -renameSnapshot <hdfs path> <oldname> <newname> #example: hdfs dfs -renameSnapshot /test snap1 snap2
hdfs dfs -deleteSnapshot <path> <snapshotName>
hdfs lsSnapshottableDir
hdfs snapshotDiff <path> <Snapshot1> <Snapshot2> # example: hdfs dfs -createSnapshot /test snapshot1 hdfs dfs -createSnapshot /test snapshot2 hdfs snapshotDiff /test snapshot1 snapshot2
关于hdfs快照更多的详细介绍,请参见Apache Hadoop社区文档。
在 Hadoop 集群中,常会出现各个 DataNode 节点磁盘空间使用率分布不均衡的情况,为了平衡空间的占用率,我们在 HDFS 集群中使用 balance 工具进行“重新平衡”。
集群操作页面有 Rebalance 按钮,您可以通过单击按钮进行快捷操作,但操作会使用 Rebalance 的默认参数。默认参数说明详见 2.5 Hdfs balance数据均衡优化
查看 hdfs balancer 的命令如下:
hdfs balancer -help Usage: java Balancer [-policy <policy>] the balancing policy: datanode or blockpool [-threshold <threshold>] Percentage of disk capacity [-exclude [-f <hosts-file> | comma-sperated list of hosts]] Excludes the specified datanodes. [-include [-f <hosts-file> | comma-sperated list of hosts]] Includes only the specified datanodes. [-blockpools <comma-separated list of blockpool ids>] [-idleiterations <idleiterations>] [-runDuringUpgrade]
该工具反复的将块从高利用率的数据节点移动到使用低的数据节点。
在EMR集群中做 hdfs balance 的示例代码如下:
start-balancer.sh -threshold 5 #其中 5是设置的阈值即5%
Balance工具退出执行的条件有以下五种,满足任意一条,balance就会自动退出:
HDFS 允许管理员为每一个用户和每一个文件夹设置配额:命名配额(name quota)和空间配额(space quota)。
设置配额:
# 设置name quota hdfs dfsadmin -setQuota <nums> <Directory>... <Directory> # example: hdfs dfsadmin -setQuota 9999 /user/test
#设置space quota hdfs dfsadmin -setSpaceQuota <capacity> <Directory>... <Directory> #example: hdfs dfsadmin -setSpaceQuota 15g /user/test
查看配额:
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory> #参数说明: #-q选项,会报告为每个目录设置的name quota值,剩余的可用name quota,设置的SpaceQuota值和剩余的可用SpaceQuota。如果目录没有配额设置,则报告的值为none和inf。 #-h选项以人类可读格式显示大小。 #-v选项显示标题行。 #-t选项显示每个存储类型配额集以及每个目录的剩余可用配额 #example: hdfs dfs -count -q /user/test
删除配额:
#删除目录的name quota hdfs dfsadmin -clrQuota <directory>...<directory> #example: hdfs dfsadmin -clrQuota /user/test
#删除目录的sapce quota hdfs dfsadmin -clrSpaceQuota <directory>...<directory> #example: hdfs dfsadmin -clrSpaceQuota /user/test
关于hdfs Quotas更多的详细介绍,请参见Apache Hadoop社区文档。
'bin/hadoop dfsadmin' 命令支持一些和 HDFS 管理相关的操作。bin/hadoop dfsadmin -help 命令能列出所有当前支持的命令。比如: