HDFS 快照是文件系统的只读时间点副本。可以对文件系统的子树或整个文件系统进行快照。快照的一些常见用例是数据备份,防止用户错误和灾难恢复。
快照不是数据的简单拷贝,只做差异的复制,因此快照的生成往往非常的迅速。并且创建快照时,block 块并不会被拷贝。快照文件中只记录了 block 列表和文件大小,不会做任何数据拷贝。
具体操作指令如下:
1.开启与禁用指定目录的快照。
hdfs dfsadmin -allowSnapshot <hdfs path> #开启 hdfs dfsadmin -disallowSnapshot <hdfs path> #禁用
2.对指定目录创建快照。
hdfs dfs -createSnapshot <hdfs path> #创建快照之前,先要允许该目录创建快照(开启)
3.指定创建快照的名称。
hdfs dfs -createSnapshot <hdfs path> <snapshot name> #其中<snapshot name>是自己指定的快照别名 #example: hdfs dfs -createSnapshot /test snapshot1
4.重命名快照。
hdfs dfs -renameSnapshot <hdfs path> <oldname> <newname> #example: hdfs dfs -renameSnapshot /test snap1 snap2
5.删除快照。
hdfs dfs -deleteSnapshot <path> <snapshotName>
6.获取当前用户的快照目录列表。
hdfs lsSnapshottableDir
7.比较两个快照之间的差异。
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 的默认参数。
查看 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]
该工具不断地将块从高利用率的数据节点移动到利用率低的数据节点。
在 LAS 集群中做 HDFS balance 的示例代码如下:
start-balancer.sh -threshold 5 #其中 5是设置的阈值即5%
Balance 工具退出执行的条件有以下五种,满足任意一条,Balance 就会自动退出:
修改 hdfs-site.xml
中 dfs.balance.bandwidthPerSec
参数。
参数含义:设置 balance
工具在运行中所能占用的带宽。设置的过大可能会造成 mapred
运行缓慢,默认设置为 10M,通常推荐设为 100MB/s。
修改 hdfs-site.xml
中 dfs.datanode.max.transfer.threads
参数。
参数含义:指定用于在 DataNode
间传输 block
数据的最大线程数,可修改为 4096 。
修改 hdfs-site.xml
中 dfs.datanode.balance.max.concurrent.moves
参数。
参数含义:指定 DataNode
上同时用于 balance
待移动 block
的最大线程个数,这个值默认是 5,一般设置为 DataNode
磁盘的数量*4。
关于 hdfsbalance
工具使用更多的详细介绍,请参见 ApacheHadoop
社区文档。
HDFS 允许管理员为每一个用户和每一个文件夹设置配额:命名配额(name quota)和空间配额(space quota)。
对该目录下的名称数量进行硬性限制,即为文件夹下的数量作出限制,超过限制则会报错:quota exceed,最大值配额为:Long.MAX_Value。新创建的文件夹默认没有分配 quota。
设置一个目录的大小,如果超过则块写入会失败(副本也算)。最大的配额为:Long.Max_Value。目录不使用主机文件系统不计算在空间配额里面,主机文件系统用来记录文件源数据的数据不算在配额中。
设置配额:
#设置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
命令可以列出当前所有支持的命令。例如: