Hadoop集群的高可用(HA):NameNode和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的高可用有问题。

相关推荐
谷莠子9052 小时前
hadoop实验之创业有感
hadoop·docker·团队开发
power-辰南7 小时前
Zookeeper 底层原理解析
分布式·zookeeper·云原生
power-辰南7 小时前
Zookeeper常见面试题解析
分布式·zookeeper·云原生
lucky_syq17 小时前
Hive与HBase的区别有哪些
hive·hadoop·hbase
中东大鹅21 小时前
分布式数据存储基础与HDFS操作实践
大数据·linux·hadoop·分布式·hbase
zybishe1 天前
免费送源码:Java+ssm++MVC+HTML+CSS+MySQL springboot 社区医院信息管理系统的设计与实现 计算机毕业设计原创定制
java·hadoop·sql·zookeeper·html·json·mvc
武子康1 天前
大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
大数据·数据仓库·hive·hadoop
stars1 天前
14-zookeeper环境搭建
分布式·zookeeper·云原生
NiNg_1_2341 天前
Hadoop实现WordCount详解
大数据·hadoop·分布式
小刘鸭!2 天前
Hive解决数据倾斜
数据仓库·hive·hadoop