当HDFS的DataNode节点挂载多个磁盘时,往往会出现两种数据不均衡的情况:
1.不同DataNode节点间数据不均衡;
2.挂载数据盘的磁盘间数据不均衡。
特别是这种情况:当DataNode原来是挂载了几个数据盘,当磁盘占用率很高之后,再挂载新的数据盘。由于Hadoop 2.x 版本并不支持HDFS的磁盘间数据均衡,因此,会造成老数据磁盘占用率很高,新挂载的数据盘几乎很空。在这种情况下,挂载新的数据盘就失去了扩容HDFS数据盘的意义。
如果想要解决节点内多块磁盘数据不均衡的现象,就要借助DiskBalancer。在CDH5.8.2+版本中,可以通过在CM中配置进行开启,但属于实验室功能。在CDP7中,因为是Hadoop3,默认就支持磁盘间数据均衡,本文档主要介绍在CDP中如何进行HDFS磁盘扩容并在节点内进行Balancer。
-
测试环境:
1.Redhat7.6
2.采用root用户操作
3.CM版本为7.3.1
4.CDH版本为 7.1.6
1.登陆CM界面查看数据目录情况
2.登陆所有DataNode节点查看磁盘是否挂载正常
lsblk
df -hl
3.在CM界面添加新挂载的目录,并保存配置
4.刷新过期配置
5.点击刷新集群
6.刷新完成,此操作不会重启集群
7.查看HDFS容量是否增加
8.登陆DataNode节点查看是否创建该目录生成文件
1.登陆CM界面,进入HDFS点击配置,搜索“hdfs-site.xml”添加以下内容后并重启HDFS服务
dfs.disk.balancer.enabled=true
2.使用系统的hdfs.keytab进行认证,一般在/var/run/cloudera-scm-agent/process/1952-hdfs-JOURNALNODE 目录下等,或者自己生成
kinit -kt hdfs.keytab hdfs/c1.liuhao.com
klist
3.典型的磁盘平衡器任务涉及三个步骤(通过HDFS的diskbalancer 命令):plan, execute 和 query。第一步,HDFS客户端从NameNode上读取指定DataNode的的必要信息以生成执行计划:
磁盘平衡执行计划生成的文件内容格式是Json的,并且存储在HDFS之上。在默认情况下,这些文件是存储在 /system/diskbalancer 目录下面。
4.可以通过下面的命令在DataNode上执行这个生成的计划:
hdfs diskbalancer -execute /system/diskbalancer/2021-Oct-20-21-42-55/c1.liuhao.com.plan.json
5.以上命令将JSON里面的计划提交给DataNode,而DataNode会启动一个名为BlockMover的线程中执行这个计划。我们可以使用 query 命令来查询DataNode上diskbalancer任务的状态:
hdfs diskbalancer -query c1.liuhao.com
上面结果输出的PLAN_DONE表示disk-balancing task已经执行完成。为了验证磁盘平衡器的有效性,我们可以使用df -h 命令来查看各个磁盘的空间使用率:
Balancer前:
Balancer后
6.如果集群节点磁盘不均衡,可以在CM界面打开重新均衡
1.HDFS磁盘扩容首先需要检查磁盘是否单独挂载数据盘,不能和系统盘共用。
2.节点内Balancer需要使用系统hdfs.keytab才能执行成功。
3.典型的磁盘平衡器任务涉及三个步骤(通过HDFS的diskbalancer 命令):plan, execute 和 query。
4.如果想扩容的节点都平衡,需要每台DataNode节点都按照第三章做一遍。
本文转载自Hadoop实操,原文链接:。