文章目录
- 一、NameNode高可用的搭建
-
- 1、免密配置
- 2、三个节点都需要安装psmisc
- 3、检查三个节点是否都安装jdk以及zk
- 4、检查是否安装了hadoop集群
- 5、修改hadoop-env.sh
- 6、修改core-site.xml
- 7、修改hdfs-site.xml
- [8、检查workers 文件是否为三台服务](#8、检查workers 文件是否为三台服务)
- 9、分发给其他两个节点
- 10、初始化ZKFC在zk中的Znode信息
- 11、在三台服务器上启动journalnode
- 12、对集群进行namenode的格式化
- 13、启动hdfs
- 14、启动第二个namenode
- 15、第二次只需要正常启动zk和hadoop即可
- 二、resourcemanager高可用搭建
一、NameNode高可用的搭建
1、免密配置
2、三个节点都需要安装psmisc
bash
yum install -y psmisc
3、检查三个节点是否都安装jdk以及zk
4、检查是否安装了hadoop集群
如果以前安装过了,则需要清空数据:
1.先停止集群:
bash
stop-all.sh
2.清理集群中的data数据:
bash
rm -rf /opt/installs/hadoop/tmp/ /opt/installs/hadoop/logs/
5、修改hadoop-env.sh
bash
export JAVA_HOME=/opt/installs/jdk/
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
6、修改core-site.xml
bash
<!--覆盖-->
<configuration>
<!--hdfs入口,设置虚拟地址,具体地址后面配置-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdfs-cluster</value>
</property>
<!--hdfs集群的文件位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/installs/hadoop/tmp</value>
</property>
<!--hdfs要访问zookeeper集群-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
</configuration>
7、修改hdfs-site.xml
bash
<!--覆盖-->
<configuration>
<!-- 副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 定义dhfs入口的命名服务 -->
<property>
<name>dfs.nameservices</name>
<value>hdfs-cluster</value>
</property>
<!-- 定义hdfs入口的命名服务下虚拟ip-->
<property>
<name>dfs.ha.namenodes.hdfs-cluster</name>
<value>nn1,nn2</value>
</property>
<!-- 虚拟ip地址1 RPC入口 -->
<property>
<name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
<value>node01:9820</value>
</property>
<!-- 虚拟ip地址1 HTTP入口 -->
<property>
<name>dfs.namenode.http-address.hdfs-cluster.nn1</name>
<value>node01:9870</value>
</property>
<!-- 虚拟ip地址2 PRC入口 -->
<property>
<name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
<value>node02:9820</value>
</property>
<!-- 虚拟ip地址1 HTTP入口 -->
<property>
<name>dfs.namenode.http-address.hdfs-cluster.nn2</name>
<value>node02:9870</value>
</property>
<!-- 定义QJN在linux中保存文件磁盘目录 -->
<property>
<!-- Journal Edit Files 的存储目录:() -->
<name>dfs.journalnode.edits.dir</name>
<value>/opt/installs/journalnode/data/</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/hdfs-cluster</value>
</property>
<!-- 是否开启故障切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 基于zookeeper的故障切换的代码类 -->
<property>
<name>dfs.client.failover.proxy.provider.hdfs-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 远程杀死namenode方式(防止namenode假死,导致双主出现) -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 指定私钥的文件目录,使用免密登录杀死NN进程 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 可以在hdfs上点击结果查看-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
8、检查workers 文件是否为三台服务
9、分发给其他两个节点
分发脚本编写地址:脚本编写链接
bash
cd /opt/installs/hadoop/etc/hadoop
xsync.sh hadoop-env.sh core-site.xml hdfs-site.xml
10、初始化ZKFC在zk中的Znode信息
1.先启动zk
bash
zk.sh start
2.在主节点进行即可
bash
hdfs zkfc -formatZK
11、在三台服务器上启动journalnode
bash
hadoop-daemon.sh start journalnode
12、对集群进行namenode的格式化
bash
hdfs namenode -format
13、启动hdfs
14、启动第二个namenode
1.第一次需要运行如下命令,以后不需要:
bash
hdfs namenode -bootstrapStandby
2.接着,启动第二个namenode:
bash
hadoop-daemon.sh start namenode
15、第二次只需要正常启动zk和hadoop即可
需要先启动zk,再启动hadoop
namenode的web界面:node01:9870
二、resourcemanager高可用搭建
1、检查mapred-site.xml
里面只有yarn配置和historyServer的配置,不需要修改
2、修改yarn-site.xml
以前配置的yarn以及日志服务的配置不动,添加ha的相关配置即可:
bash
<configuration>
<!--配置resourcemanager的HA-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- RM 集群标识 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<!-- RM 的逻辑 ID 列表 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- RM1 的主机地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node01</value>
</property>
<!-- RM1 的主机web管理界面地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node01:8088</value>
</property>
<!-- RM2 的主机地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node02</value>
</property>
<!-- RM2 的主机web管理界面地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node02:8088</value>
</property>
<!-- ZooKeeper 集群的地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 用于yarn故障转移持久化zk的类 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- 关闭虚拟内存检查 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
3、分发
bash
cd /opt/installs/hadoop/etc/hadoop/
# 只需要同步一个,因为另一个根本没有修改。
xsync.sh yarn-site.xml
4、启动yarn
5、查看是否配置成功
bash
yarn rmadmin -getAllServiceState
resourcemanager的web界面:node01:8088
6、遇到的问题
假如你在启动过程中,发现resourcemanager有两个,但是都是standby,有可能是版本兼容问题:
hadoop3.1.6 需要兼容 zookeeper 3.4.10 hadoop3.3.1 需要兼容 zookeeper 3.6.4 ,否则就会有问题。
namenode 高可用没问题,resourcemanager的高可用有问题。