搭建步骤
- 前言
- 1.配置主机名解析
- 2.创建新用户
- 3.配置免密
- 4.安装JDK、解压hadoop
- 5.关闭防火墙
- 6.配置env文件
- 7.创建slaves、workers文件
- 8.配置core-site.xml
- 9.配置hdfs-site.xml
- 10.配置mapred-site.xml
- 11.配置yarn-site.xml
- 12.安装并启动 zookeeper
- 13启动 journalnode
- 14.格式化 namenode
- 15.初始化 zkfc
- 16.启动 namenode-1
- 17.同步 namenode
- 18.启动 namenode-2
- 19.启动 ZKFC
- 20.启动 datanode
- 21.启动 resourcemanager
- 22.启动 nodemanager
- FAQ
- 附录
前言
hadoop3.2.3的高可用集群
服务器共计12台:1台NameNode Active节点,1台NameNode Standby节点,10台DataNode节点
namenode-1节点为:NNActive节点、RM Active节点
namenode-2节点为:NN Standby节点、RM Standby节点
1.配置主机名解析
-
修改主机名
两种方式:
1)在/etc/sysconfig/network文件中添加:HOSTNAME=主机名vi /etc/sysconfig/network
2)使用命令修改主机名(在系统重新启动后会被重置为默认值)
hostname new_hostname
- 配置/etc/hosts文件
1)在机器上的/etc/hosts文件中配置集群所有机器的ip及主机名映射
2)使用scp命令复制hosts文件到其他机器上scp /etc/hosts root@XXX.XX.XX.XXX:/etc/
2.创建新用户
-
创建hadoop用户,并赋予root权限
-
创建2个文件夹存放框架的其他软件文件
1)/opt/software 存放软件压缩包
2)/opt/modules 存放解压后的文件以上动作可以通过如下脚本实现:
#!/bin/bash name=hadoop passwd=hadoop useradd $name # 将密码hadoop传递给passwd命令,为hadoop用户设置密码 # &> /dev/null是将命令的标准输出和标准错误都重定向到/dev/null,即不显示任何输出或错误信息 echo "$passwd" | passwd --stdin $name &> /dev/null # 为/etc/sudoers文件添加写权限 chmod u+w /etc/sudoers sed -i '100a\hadoop ALL=(ALL) NOPASSWD:ALL' /etc/sudoers mkdir /opt/modules # 将/opt/modules目录及其内部的所有文件和目录的所有者和组都设置为hadoop chown -R $name:$passwd /opt/modules mkdir /opt/software chown -R $name:$passwd /opt/software
-
通过scp命令分发脚本文件并在每台机器上执行
3.配置免密
-
切换到hadoop用户
-
配置免密
# 生成密钥 ssh-keygen -t rsa # 将公钥拷贝给其他节点 ssh-copy-id 节点hostname
-
集群内所有机器相互免密,关于免密可参考如下:
linux_ssh免密登录_CSDN
4.安装JDK、解压hadoop
-
将压缩包分发到各机器,批量压缩
1)集群文件分发脚本#!/bin/bash file=$1 # file=/opt/software/jdk-8u211.linux-x64.tar.gz path=$2 # path=/opt/software/ scp $file namenode-2:$2 for((i=1;i<11;i++)) do scp $file datenode-$i:$2 done
2)集群远程执行命令
# 将command替换为压缩命令 #!/bin/bash command=$* ssh namenode-2 $command exit; for((i=1;i<11;i++)) do ssh datanode-$i $command exit; done
-
配置JAVA_HOME、HADOOP_HOME
vim /etc/profile export JAVA_HOME=/opt/modules/jdk1.8.0_211/ export HADOOP_HOME=/home/hadoop/hadoop/ export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
-
分发/etc/profile文件到集群各节点
5.关闭防火墙
- 命令如下:
# 停止firewall systemctl stop firewalld.service # 禁止firewall开机启动 systemctl disable firewalld.service # 查看防火墙状态 firewall-cmd --state
6.配置env文件
-
配置文件在/hadoop/etc/hadoop/目录下,hadoop-env.sh、mapred-env.sh、yarn-env.sh
# 在上述文件里配置JAVA_HOME export JAVA_HOME=/opt/modules/jdk1.8.0_211/
7.创建slaves、workers文件
-
/etc/hadoop/slaves文件记录了集群中所有DataNode的主机名,在执行群起时,默认读取slaves文件中集群配置的主机名
vim slaves
-
/etc/hadoop/workers文件用于指定哪些节点作为工作节点
vim workers
8.配置core-site.xml
- 参考如下:
core-site.xml配置实例_CSDN
9.配置hdfs-site.xml
- 参考如下:
hdfs-site.xml配置实例_CSDN
10.配置mapred-site.xml
- 参考如下:
mapred-site.xml配置实例_CSDN
11.配置yarn-site.xml
- 参考如下:
yarn-site.xml配置实例_CSDN
12.安装并启动 zookeeper
ZooKeeper是Hadoop HA的关键组件,负责管理和协调NameNode之间的故障切换
- 参考如下:
zookeeper集群安装及配置_CSDN
13启动 journalnode
JournalNode是Hadoop HA中用于持久化存储NameNode的事务日志的组件。在启动NameNode之前,需要确保JournalNodes已经启动并正常运行。
JournalNode至少3个节点
- 在需要启动的机器上执行下面命令,本次启动机器为datanode-[1-5]
/home/hadoop/hadoop-3.2.3/sbin/hadoop-daemon.sh start journalnode
14.格式化 namenode
- 由于NameNode是Active-Standby方式的高可用模型,先在namenode-1节点执行下面命令
hdfs namenode -format
15.初始化 zkfc
ZKFC(ZooKeeper Failover Controller)负责监视活跃的NameNode的健康状态,并在发生故障时执行自动故障切换。
- 在namenode-1节点执行
hdfs zkfc -formatZK
16.启动 namenode-1
- 在namenode-1节点执行
/home/hadoop/hadoop-3.2.3/sbin/hadoop-daemon.sh start namenode
17.同步 namenode
- 在namenode-2节点执行,保证两个namenode初始化数据相同
hdfs namenode -bootstrapStandby
18.启动 namenode-2
- 在namenode-2节点执行
/home/hadoop/hadoop-3.2.3/sbin/hadoop-daemon.sh start namenode
19.启动 ZKFC
- 在namenode-1和namenode-2上执行,哪台先启动哪台就是active
/home/hadoop/hadoop-3.2.3/sbin/hadoop-daemon.sh start zkfc
20.启动 datanode
- 在所有datanode上执行
/home/hadoop/hadoop-3.2.3/sbin/hadoop-daemon.sh start datanode
21.启动 resourcemanager
- 在namenode-1和namenode-2上执行,哪台先启动哪台就是active
/home/hadoop/hadoop-3.2.3/sbin/yarn-daemon.sh start resourcemanager
22.启动 nodemanager
- 在所有datanode上执行
/home/hadoop/hadoop-3.2.3/sbin/yarn-daemon.sh start nodemanager
FAQ
正常的启动顺序
在上述集群初始化的启动中,顺序不变,去掉namenode格式化、zkfc初始化和namenode同步