You need to enable JavaScript to run this app.
导航

高阶使用

最近更新时间2023.04.03 10:34:22

首次发布时间2022.08.18 16:19:48

1 snapshot使用

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社区文档。

2 Balance工具的使用

在 Hadoop 集群中,常会出现各个 DataNode 节点磁盘空间使用率分布不均衡的情况,为了平衡空间的占用率,我们在 HDFS 集群中使用 balance 工具进行“重新平衡”。

2.1 EMR 控制台 Balance 操作

集群操作页面有 Rebalance 按钮,您可以通过单击按钮进行快捷操作,但操作会使用 Rebalance 的默认参数。默认参数说明详见 2.5 Hdfs balance数据均衡优化

  1. 登录EMR 控制台

  2. 在左侧导航栏中,单击集群管理 > 集群列表 > 集群详情 > 服务列表 > HDFS 服务按钮,进入服务概述界面。

  3. 在服务概述界面右上角,单击服务操作 > Rebalance 按钮,进入 Rebalance 弹窗配置界面,勾选 Rebalance 执行的节点范围,并添加此次操作备注信息。

  4. 单击确定按钮,完成 Rebalance 操作,等待执行完成,实现节点磁盘空间的使用率平衡。

2.2 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%

2.3 Hadoop Balance 的执行一般分为四步:

  1. 从namenode获取datanode磁盘的使用情况。

  2. 计算需要把哪些数据移动到哪些节点。

  3. 分别移动,完成后删除旧的block信息。

  4. 循环执行,直到达到平衡标准。

2.4 Balance 工具退出:

Balance工具退出执行的条件有以下五种,满足任意一条,balance就会自动退出:

  1. 集群是平衡的;

  2. 没有块可以移动;

  3. 没有为指定的连续迭代移动块(默认为5);

  4. 与namenode通信时发生IOException;

  5. 另一个平衡器正在运行。

2.5 Hdfsbalance 数据均衡优化:

  1. 增加带宽
    修改 hdfs-site.xml 中 dfs.balance.bandwidthPerSec 参数。
    参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢,默认设置:10M,通常推荐设为100MB/s。

  2. 增加最大线程数
    修改hdfs-site.xml 中 dfs.datanode.max.transfer.threads 参数。
    参数含义:指定用于在DataNode间传输block数据的最大线程数,可修改为4096

  3. 增加用于 balance 待移动 block 的最大线程数
    修改hdfs-site.xml 中 dfs.datanode.balance.max.concurrent.moves参数。
    参数含义:指定DataNode上同时用于balance待移动block的最大线程个数,这个值默认是5,一般设置为DataNode磁盘的数量*4。
    关于hdfs balance工具使用更多的详细介绍,请参见Apache Hadoop社区文档。

3 Quotas使用

HDFS 允许管理员为每一个用户和每一个文件夹设置配额:命名配额(name quota)和空间配额(space quota)。

  • name quota
    对该目录下的name数量做硬性限制,为文件夹下的数量作出的限制,超过限制则会报错:quota exceed,最大值配额:Long.MAX_Valus。新创建的文件夹默认没有分配 quota。
  • space 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社区文档。

4 DFSAdmin命令

'bin/hadoop dfsadmin' 命令支持一些和 HDFS 管理相关的操作。bin/hadoop dfsadmin -help 命令能列出所有当前支持的命令。比如:

  • -report:报告HDFS的基本统计信息。有些信息也可以在NameNode Web服务首页看到。

  • -safemode:虽然通常并不需要,但是管理员的确可以手动让NameNode进入或离开安全模式。

  • -finalizeUpgrade:删除上一次升级时制作的集群备份。