Hadoop3 - HDFS DataNode 动态扩容和缩容

Posted 小毕超

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop3 - HDFS DataNode 动态扩容和缩容相关的知识,希望对你有一定的参考价值。

一、HDFS 动态扩容和缩容

上篇文章对 HDFS 的文件存储策略进行了讲解,本篇文章继续学习 HDFS 的动态扩容和缩容,下面是上篇文章地址:

https://blog.csdn.net/qq_43692950/article/details/127181660

动态扩容:已有HDFS集群容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的DataNode节点。

动态缩容:旧的服务器需要进行退役更换,暂停服务,需要在当下的集群中停止某些机器上HDFS的服务。

在进行扩容和缩容前,先看下当前的 HDFS 集群结构:

主机规划设置主机名角色
192.168.40.172node1NameNode、DataNode、ResourceManager、NodeManager
192.168.40.173node2SecondaryNameNode、DataNode、NodeManager
192.168.40.174node3DataNode、NodeManager

下面将在该集群架构的基础上进行操作,如果还没有搭建集群,可以参考下面这篇我的文章:

Hadoop3 - 集群搭建

二、DataNode 扩容

下面我们增加一台主机,该主机已安装好 JAVA 环境,下面对 DataNode 进行扩容,总体结构如下:

主机规划设置主机名角色
192.168.40.172node1NameNode、DataNode、ResourceManager、NodeManager
192.168.40.173node2SecondaryNameNode、DataNode、NodeManager
192.168.40.174node3DataNode、NodeManager
192.168.40.175node4DataNode
  • 增加 node1node4 的免密登录,方便后面使用一键操作脚本
ssh-copy-id 192.168.40.175
  • 修改 node1 节点 /etc/hosts 增加 node4 的映射
vi /etc/hosts
192.168.40.172   node1
192.168.40.173   node2
192.168.40.174   node3
192.168.40.175   node4

将修改后的 hosts 同步至其余主机:

scp /etc/hosts root@node2:/etc/hosts
scp /etc/hosts root@node3:/etc/hosts
scp /etc/hosts root@node4:/etc/hosts
  • 修改 node1 节点hadoop 安装包下 etc/hadoop/workers 文件,增加 node4 节点:
vi workers
node1
node2
node3
node4
  • node4 节点时间同步,并创建同意的工作目录
yum -y install ntpdate
ntpdate ntp4.aliyun.com
mkdir -p /export/server/,/export/data/,/export/software/
  • node1节点修改后的 hadoop 包,同步至 node4 节点的相同目录下:
cd /export/server/
scp -r hadoop-3.1.4 root@node4:/export/server/
  • node1 节点的环境变量,同步至 node4 节点:
scp /etc/profile root@node4:/etc/
  • 进入 node4 节点重新加载环境变量
source /etc/profile
  • node4 节点验证环境是否生效:
hadoop version

  • node4 节点设置 hostname 标识自己为node4
hostname node4
  • node4 节点启动 DataNode 服务
hdfs --daemon start datanode
  • 到 HDFS 的web管理页查看是否增加成功:

可以看到 node4 节点已经上线,但没有数据块的存储,使得集群整体来看负载不均衡。因此最后还需要对hdfs负载设置均衡。

  • DataNode负载均衡服务,在 node1 节点操作

首先设置数据传输带宽为 100M 过大的话,有可能影响业务服务的操作。

hdfs dfsadmin -setBalancerBandwidth 104857600

启动Balancer,其中 threshold 参数如果为 5 的话,则表示以阈值5%运行(默认值10%),这意味着程序将确保每个DataNode上的磁盘使用量与群集中的总体使用量相差不超过5%。例如,如果集群中所有DataNode的总体使用率是集群磁盘总存储容量的40%,则程序将确保每个DataNode的磁盘使用率在该DataNode磁盘存储容量的35%45%之间。

由于我原有集群数据不多,这里我把阈值设为 1 ,方便看到效果:

hdfs balancer -threshold 1


在到 web 管理页面查看:


数据已经均衡了。

三、DataNode 缩容

DataNode 缩容,不像扩容那样启动一个节点即可, 缩容还需要把当前节点数据移出去才可以,hadoop 已经提供了下线功能,前提是在namenode机器的hdfs-site.xml配置文件中需要提前配置dfs.hosts.exclude属性,该属性指向的文件就是所谓的黑名单列表,会被namenode排除在集群之外。如果文件内容为空,则意味着不禁止任何机器。所以在安装 hadoop 的时候就需要指定好改配置,如果最开始没有配置该参数,则需要添加后重启 namenode

修改 hdfs-site.xml 文件:

vi hdfs-site.xml
<property>
    <name>dfs.hosts.exclude</name>
    <value>/export/server/hadoop-3.1.4/etc/hadoop/excludes</value>
</property>

重启 namenode 使其生效。

编辑 /export/server/hadoop-3.1.4/etc/hadoop/excludes 文件,添加需要下线的主机名称。

注意:如果副本数是3,在线的节点小于等于3,是不能下线成功的,需要修改副本数后才能下线。


下面在 namenode 所在的机器刷新节点:

hdfs dfsadmin -refreshNodes


下面到 web 管理页查看:


node4 节点正在下线中,稍等一会在刷新下:

已经下线成功,在该页面的最上方可以看到该图标的解释:


最后就可以放心的将 node4 节点的 DataNode 服务停掉了:

hdfs --daemon stop datanode

如果剩下的HDFS集群,出现分布不均衡,则进行负载均衡服务:

hdfs balancer -threshold 5

以上是关于Hadoop3 - HDFS DataNode 动态扩容和缩容的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop3 - HDFS DataNode 动态扩容和缩容

Hadoop3 - HDFS Block 负载平衡以及 Disk 平衡

Hadoop3 - HDFS Block 负载平衡以及 Disk 平衡

Hadoop3 - HDFS Block 负载平衡以及 Disk 平衡

HDFS系列之DataNode磁盘管理解析及实践!

[hadoop3.x]HDFS中的内存存储支持概述