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 的默认参数。默认参数说明详见 2.5 Hdfs balance数据均衡优化
登录EMR 控制台。
在左侧导航栏中,单击集群管理 > 集群列表 > 集群详情 > 服务列表 > HDFS 服务按钮,进入服务概述界面。
在服务概述界面右上角,单击服务操作 > Rebalance 按钮,进入 Rebalance 弹窗配置界面,勾选 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]
该工具反复的将块从高利用率的数据节点移动到使用低的数据节点。
在EMR集群中做 hdfs balance 的示例代码如下:
start-balancer.sh -threshold 5 #其中 5是设置的阈值即5%
从namenode获取datanode磁盘的使用情况。
计算需要把哪些数据移动到哪些节点。
分别移动,完成后删除旧的block信息。
循环执行,直到达到平衡标准。
Balance工具退出执行的条件有以下五种,满足任意一条,balance就会自动退出:
集群是平衡的;
没有块可以移动;
没有为指定的连续迭代移动块(默认为5);
与namenode通信时发生IOException;
另一个平衡器正在运行。
增加带宽
修改 hdfs-site.xml 中 dfs.balance.bandwidthPerSec 参数。
参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢,默认设置:10M,通常推荐设为100MB/s。
增加最大线程数
修改hdfs-site.xml 中 dfs.datanode.max.transfer.threads 参数。
参数含义:指定用于在DataNode间传输block数据的最大线程数,可修改为4096
增加用于 balance 待移动 block 的最大线程数
修改hdfs-site.xml 中 dfs.datanode.balance.max.concurrent.moves参数。
参数含义:指定DataNode上同时用于balance待移动block的最大线程个数,这个值默认是5,一般设置为DataNode磁盘的数量*4。
关于hdfs balance工具使用更多的详细介绍,请参见Apache Hadoop社区文档。
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 命令能列出所有当前支持的命令。比如:
-report:报告HDFS的基本统计信息。有些信息也可以在NameNode Web服务首页看到。
-safemode:虽然通常并不需要,但是管理员的确可以手动让NameNode进入或离开安全模式。
-finalizeUpgrade:删除上一次升级时制作的集群备份。