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上刷新查看:
可以看到其中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
查看集群情况:
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上刷新查看:
可以看到其中node3的Admin State
为Decommissioned
也可以在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 Status
由Normal
变为了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)