转载请注明出处:https://blog.csdn.net/l1028386804/article/details/94164259
本文是在《Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)》博文的基础上进行操作的,在原有Hadoop集群的基础上动态增加并删除“binghe204”服务器上的DataNode与NodeManager节点。
主要准备的工作有:
(1)安装主机名为“binghe204”的虚拟机,并设置虚拟机静态IP、关闭防火墙、添加hadoop用户、设置主机名、设置主机名与IP地址的关系、配置SSH免密码登录。
注意:此步骤可参见博文《Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)》。
(2)将新安装的“binghe204”虚拟机的主机名与IP地址的对应关系和SSH免密码登录同步到其他服务器,使其他服务器与“binghe204”服务器互通,具体操作如下:
在“binghe204”服务器上执行如下操作:
vim /etc/hosts
在文件“/etc/profile”中添加如下内容:
192.168.175.201 binghe201
192.168.175.202 binghe202
192.168.175.203 binghe203
192.168.175.204 binghe204
并将“/etc/profile”文件同步到其他3台服务器,具体操作如下:
sudo scp /etc/hosts binghe201:/etc/
sudo scp /etc/hosts binghe202:/etc/
sudo scp /etc/hosts binghe203:/etc/
在“binghe204”服务器上执行如下操作:
ssh-keygen -t rsa
cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
chmod 700 /home/hadoop/
chmod 700 /home/hadoop/.ssh
chmod 644 /home/hadoop/.ssh/authorized_keys
chmod 600 /home/hadoop/.ssh/id_rsa
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub binghe201
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub binghe202
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub binghe203
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub binghe204
在“binghe201”、“binghe202”和“binghe203”服务器上分别执行如下操作:
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub binghe204
此时,在“binghe204”服务器上设置了SSH免密码登录并与其他服务器完成了互通操作。
(3)复制“binghe201”服务器上的JDK和Hadoop到“binghe204”服务器的对应目录下,同时复制“binghe201”服务器的“/etc/profile”系统环境变量到“binghe204”服务器上。
在“binghe201”上执行如下操作:
scp -r /usr/local/jdk1.8.0_212/ binghe204:/usr/local/
scp -r /usr/local/hadoop-3.2.0/ binghe204:/usr/local/
sudo scp /etc/profile binghe204:/etc/
(4)修改“binghe204”服务器上的“/etc/profile”文件
在“binghe204”服务器上,删除“/etc/profile”文件中有关Zookeeper的配置,删除Zookeeper配置之后在“/etc/profile”文件中添加的配置如下:
JAVA_HOME=/usr/local/jdk1.8.0_212
HADOOP_HOME=/usr/local/hadoop-3.2.0
CLASS_PATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export JAVA_HOME ZOOKEEPER_HOME HADOOP_HOME CLASS_PATH PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
至此,在Hadoop集群中动态添加和删除DataNode与NodeManager节点的准备工作就完成了。
(1)查看HDFS各节点状态
hdfs dfsadmin -report
可以看到添加DataNode节点之前,DataNode节点总共有3个,分别在“binghe201”、“binghe202”和“binghe203”服务器上。
(2)查看YARN各节点状态
yarn node -list
可以看到添加NodeManager之前,NodeManager进程运行在“binghe201”、“binghe202”和“binghe203”服务器上。
(1)在workers文件中新增“binghe204”
在所有服务器的Hadoop workers文件中添加“binghe204”节点,具体如下:
-bash-4.1$ vim /usr/local/hadoop-3.2.0/etc/hadoop/workers
binghe201
binghe202
binghe203
binghe204
(2)启动“binghe204”服务器上的DataNode和NodeManager
具体启动操作命令如下
hdfs --daemon start datanode
yarn --daemon start nodemanager
(3)刷新节点
在“binghe201”服务器上执行如下命令,刷新Hadoop集群节点。
hdfs dfsadmin -refreshNodes
start-balancer.sh
(1)查看HDFS各节点状态
hdfs dfsadmin -report
可以看到,添加DataNode节点后,输出的结果中存在“binghe204”服务器上的DataNode节点。说明添加DataNode节点成功。
(2)查看YARN各节点状态
yarn node -list
可以看到,存在“binghe204”服务器上的NodeManager节点,说明NodeManager节点添加成功
(1)停止DataNode和NodeManager进程
在“binghe204”节点上停止DataNode和NodeManager节点,在“binghe204”服务器上执行的具体操作如下:
hdfs --daemon stop datanode
yarn --daemon stop nodemanager
(2)删除workers上的“binghe204”
删除每台服务器上Hadoop的workers文件中的“binghe204”,删除后的文件内容如下:
-bash-4.1$ vim /usr/local/hadoop-3.2.0/etc/hadoop/workers
binghe201
binghe202
binghe203
(3)刷新节点
在“binghe201”服务器上执行如下命令,刷新Hadoop集群节点。
hdfs dfsadmin -refreshNodes
start-balancer.sh
(1)查看HDFS各节点状态
hdfs dfsadmin -report
可以看到,在输出的信息中没有“binghe204”服务器上的DataNode节点,说明“binghe204”服务器上的DataNode节点删除成功。
(2)查看YARN各节点状态
yarn node -list
可以看到,在输出的信息中没有“binghe204”服务器上的NodeManager节点,说明“binghe204”服务器上的NodeManager节点删除成功。
这种方式不需要删除workers文件中现有的“binghe204”服务器配置,需要按照如下方式进行配置。
适当减小dfs.replication副本数,增加dfs.hosts.exclude配置如下:
dfs.hosts.exclude
/usr/local/hadoop-3.2.0/etc/hadoop/excludes
在“binghe201”服务器上的/usr/local/hadoop-3.2.0/etc/hadoop/目录下创建excludes文件,将要删除的“binghe204”服务器节点的主机名或IP地址配置到这个文件中,具体如下:
vim /usr/local/hadoop-3.2.0/etc/hadoop/excludes
binghe204
在“binghe201”服务器上执行如下命令,刷新Hadoop集群节点。
hdfs dfsadmin -refreshNodes
start-balancer.sh
这种方式也可以实现动态删除DataNode和NodeManager节点。