Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建七(Hadoop扩容缩容篇)

  • 八、Hadoop集群动态扩容、缩容
  • 1.动态扩容
  • 1.1准备工作
  • 1.2添加datanode
  • 1.3datanode负载均衡服务
  • 1.4添加nodemanager
  • 2.动态缩容
  • 2.1添加退役节点
  • 2.2刷新集群
  • 2.3停止进程

八、Hadoop集群动态扩容、缩容

1.动态扩容

1.1准备工作

克隆一台虚拟机,也可以是全新的(只要安装了jdk即可,可以参考最初的虚拟机安装部分);
在新的虚拟机上修改hostname为node3:

#在新的虚拟机上执行
hostnamectl set-hostname node3

并为所有节点添加映射,将集群所有节点hosts配置进去,(集群所有节点保持hosts文件统一):

#修改文件/etc/hosts
vi /etc/hosts

加入以下内容:

192.168.88.129 node
192.168.88.130 node1
192.168.88.131 node2
192.168.88.132 node3

之后可以测试一下ping 主机名是否可以ping通,如,在新节点尝试:ping node1

设置NameNode到DataNode的免密码登录(ssh-copy-id命令实现)
修改主节点(node)slaves文件,添加新增节点的ip信息(集群重启时配合一键启动脚本使用),最好是修改每一台节点的slaves文件:

192.168.88.129
192.168.88.130
192.168.88.131
192.168.88.132

在node3节点上创建Hadoop安装文件夹:

cd /usr/local
mkdir hadoop

创建存储文件夹:

cd /usr
mkdir data
cd data
mkdir namenode datanode tmp journalnode

复制其他子节点上的hadoop安装文件到新节点node3上:

#在node2上执行
scp -r /usr/local/hadoop/hadoop-2.7.4/ 192.168.88.132:/usr/local/hadoop/

配置node3上的环境变量:

#打开文件
vi /etc/profile
#加入以下内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.4
#保存后运行,使之生效
source /etc/profile

1.2添加datanode

在namenode所在机器(本文即node)上,Hadoop的安装目录下的/etc/hadoop下创建dfs.hosts文件:

cd /usr/local/hadoop/hadoop-2.7.4/etc/hadoop
touch dfs.hosts
vi dfs.hosts
#加入如下内容:
192.168.88.129
192.168.88.130
192.168.88.131
192.168.88.132
#或用主机名也可
node
node1
node2
node3

同目录下,在namenode机器的hdfs-site.xml配置文件中增加dfs.hosts属性:

vi hdfs-site.xml

加入以下内容:

<property>
	     <name>dfs.hosts</name>
	     <value>/usr/local/hadoop/hadoop-2.7.4/etc/hadoop/dfs.hosts</value>
     </property>

dfs.hosts属性的意义:命名一个文件,其中包含允许连接到namenode的主机列表。必须指定文件的完整路径名。如果该值为空,则允许所有主机。相当于一个白名单,也可以不配置。

在新的机器上(node3)单独启动datanode:

hadoop-daemon.sh start datanode

然后去http://192.168.88.129:50070上刷新查看:

hadoop扩容后执行慢 hadoop扩容和缩容_zookeeper


可以看到其中node3已经有了,其Admin State也应该为In Service,笔者图中为Decommissioned是因为已经操作过缩容

1.3datanode负载均衡服务

新加入的节点,没有数据块的存储,使得集群整体来看负载还不均衡。因此最后还需要对hdfs负载设置均衡,因为默认的数据传输带宽比较低,可以设置为64M,即运行:
hdfs dfsadmin -setBalancerBandwidth 67108864即可

默认balancer的threshold为10%,即各个节点与集群总的存储使用率相差不超过10%,我们可将其设置为5%。然后启动Balancer:
start-balancer.sh -threshold 5,等待集群自均衡完成即可。

1.4添加nodemanager

在新的机器上(node3)单独启动nodemanager:

yarn-daemon.sh start nodemanager 然后在ResourceManager所在机器(node),通过yarn node -list查看集群情况:

hadoop扩容后执行慢 hadoop扩容和缩容_大数据_02

2.动态缩容

2.1添加退役节点

在namenode所在服务器(node)的hadoop配置目录etc/hadoop下创建dfs.hosts.exclude文件,并添加需要退役的主机名称:

vi dfs.hosts.exclude
#加入需要退役的主机名称或者IP
#本文为:
192.168.88.132

dfs.hosts.exclude属性的意义:命名一个文件,其中包含不允许连接到namenode的主机列表。必须指定文件的完整路径名。如果值为空,则不排除任何主机。

  • 修改hdfs-site.xml

在namenode机器(node)的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性:

vi hdfs-site.xml

加入以下内容:

<property>
		<name>dfs.hosts.exclude</name>
		<value>/usr/local/hadoop/hadoop-2.7.4/etc/hadoop/dfs.hosts.exclude</value>
	</property>
  • 修改mapred-site.xml

在namenode机器(node)的mapred-site.xml配置文件中增加mapred.hosts.exclude属性

vi mapred-site.xml

加入以下内容:

<property>
		<name>mapred.hosts.exclude</name>
		<value>/usr/local/hadoop/hadoop-2.7.4/etc/hadoop/dfs.hosts.exclude</value>
		<final>true</final>
	</property>

2.2刷新集群

在namenode所在的机器(node)执行以下命令,刷新namenode,刷新resourceManager。

#刷新namenode
hdfs dfsadmin -refreshNodes
#刷新resourcemanager
yarn rmadmin -refreshNodes

或者:

hadoop dfsadmin -refreshNodes

然后去http://192.168.88.129:50070上刷新查看:

hadoop扩容后执行慢 hadoop扩容和缩容_大数据_03


可以看到其中node3的Admin StateDecommissioned 也可以在node上查看node3状态:

hadoop dfsadmin -report

可以看到:

[root@node hadoop]# hdfs dfsadmin -report
Configured Capacity: 32191397888 (29.98 GB)
Present Capacity: 6933578724 (6.46 GB)
DFS Remaining: 6875751396 (6.40 GB)
DFS Used: 57827328 (55.15 MB)
DFS Used%: 0.83%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0

-------------------------------------------------
Live datanodes (4):

Name: 192.168.88.129:50010 (node)
Hostname: node
Decommission Status : Normal
Configured Capacity: 10726932480 (9.99 GB)
DFS Used: 10678272 (10.18 MB)
Non DFS Used: 8016035840 (7.47 GB)
DFS Remaining: 2163347788 (2.01 GB)
DFS Used%: 0.10%
DFS Remaining%: 20.17%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 9
Last contact: Wed Sep 23 16:09:05 CST 2020


Name: 192.168.88.132:50010 (node3)
Hostname: node3
Decommission Status : Decommissioned
Configured Capacity: 10726932480 (9.99 GB)
DFS Used: 10600448 (10.11 MB)
Non DFS Used: 5409497088 (5.04 GB)
DFS Remaining: 5306834944 (4.94 GB)
DFS Used%: 0.10%
DFS Remaining%: 49.47%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Wed Sep 23 16:09:06 CST 2020


Name: 192.168.88.131:50010 (node2)
Hostname: node2
Decommission Status : Normal
Configured Capacity: 10726932480 (9.99 GB)
DFS Used: 18276352 (17.43 MB)
Non DFS Used: 7817105408 (7.28 GB)
DFS Remaining: 2354680140 (2.19 GB)
DFS Used%: 0.17%
DFS Remaining%: 21.95%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 9
Last contact: Wed Sep 23 16:09:05 CST 2020


Name: 192.168.88.130:50010 (node1)
Hostname: node1
Decommission Status : Normal
Configured Capacity: 10726932480 (9.99 GB)
DFS Used: 18272256 (17.43 MB)
Non DFS Used: 7814066176 (7.28 GB)
DFS Remaining: 2357723468 (2.20 GB)
DFS Used%: 0.17%
DFS Remaining%: 21.98%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 10
Last contact: Wed Sep 23 16:09:04 CST 2020


[root@node hadoop]#

可以看到node3的Decommission StatusNormal变为了Decommissioned(下线过程中是decomissioning状态)

等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。

2.3停止进程

退役成功后,在node3上运行:

hadoop-daemon.sh stop datanode
yarn-daemon.sh stop nodemanager

在namenode所在节点(node)上执行以下命令刷新namenode和resourceManager:

#刷新namenode
hdfs dfsadmin -refreshNodes
#刷新resourcemanager
yarn rmadmin -refreshNodes
#进行均衡负载
start-balancer.sh

之后去界面上查看:可以看到其状态为Dead;
使用hadoop dfsadmin -report也可以看到有dead的节点Dead datanodes (1)