Hadoop Namenode与Resourcemanager高可用搭建教程

Hadoop Namenode与Resourcemanager高可用搭建教程

一、引言

在大数据处理中,Hadoop集群的高可用性至关重要。本文将详细介绍如何搭建Hadoop Namenode和Resourcemanager的高可用环境,确保集群的稳定运行和数据的可靠存储与处理。

二、Namenode高可用搭建步骤

(一)环境准备

  1. 拍摄快照:在操作前,对三台服务器拍摄快照,以便后续恢复。
  2. 安装psmisc :在三台电脑上使用xcall.sh yum install -y psmisc命令安装psmisc
  3. 检查依赖安装 :检查jdk以及zk是否在三台服务器上均已安装完毕,同时检查是否已安装hadoop集群,若已安装则需清空数据。先使用stop-all.sh停止集群,再通过xcall.sh rm -rf /opt/installs/hadoop/tmp/ /opt/installs/hadoop/logs/清理集群中的data数据。

(二)配置文件修改

  1. 修改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
  1. 修改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>bigdata01:2181,bigdata02:2181,bigdata03:2181</value>
  </property>
</configuration>
  1. 修改hdfs-site.xml
bash 复制代码
<configuration>
    <!-- 副本数 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 定义hdfs入口的命名服务 -->
    <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>bigdata01:9820</value>
    </property>
    <!-- 虚拟ip地址1 HTTP入口 -->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn1</name>
        <value>bigdata01:9870</value>
    </property>
    <!-- 虚拟ip地址2 PRC入口 -->
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
        <value>bigdata02:9820</value>
    </property>
    <!-- 虚拟ip地址1 HTTP入口 -->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn2</name>
        <value>bigdata02: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://bigdata01:8485;bigdata02:8485;bigdata03: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>
  1. 修改完毕之后,记得同步给bigdata02和03
bash 复制代码
xsync.sh hadoop-env.sh

(三)服务启动与验证

  1. 检查workers文件 :确保workers文件包含三台服务器信息。
  2. 启动相关服务
    • 启动zookeeperzk.sh start
    • 初始化ZKFCzk中的Znode信息(仅第一次启动时在bigdata01上进行):hdfs zkfc -formatZK
    • 在三台服务器上启动jnjournalnode):hdfs --daemon start journalnode
    • 对集群进行namenode的格式化:hdfs namenode -format
    • 启动hdfsstart-dfs.sh
    • bigdata02上启动第二个namenode:第一次运行hdfs namenode -bootstrapStandby,之后使用hadoop-daemon.sh start namenode启动。
  3. 查看状态 :通过网页查看两个namenode的状态,并手动关闭第一台namenode,测试第二台是否能自动从standby变为active,若再次启动第一台服务器的namenode,其状态应为standby

三、Resourcemanager高可用搭建步骤

(一)配置文件检查与修改

  1. 检查mapred-site.xml :若其中只有yarn配置和historyServer的配置,则无需修改。
  2. 修改yarn-site.xml
bash 复制代码
  <?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>

  <!-- Site specific YARN configuration properties -->

  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value> 
  </property>

  <property>
    <name>yarn.application.classpath</name>
    <value>/opt/installs/hadoop/etc/hadoop:/opt/installs/hadoop/share/hadoop/common/lib/*:/opt/installs/hadoop/share/hadoop/common/*:/opt/installs/hadoop/share/hadoop/hdfs:/opt/installs/hadoop/share/hadoop/hdfs/lib/*:/opt/installs/hadoop/share/hadoop/hdfs/*:/opt/installs/hadoop/share/hadoop/mapreduce/*:/opt/installs/hadoop/share/hadoop/yarn:/opt/installs/hadoop/share/hadoop/yarn/lib/*:/opt/installs/hadoop/share/hadoop/yarn/*</value> 
  </property>

  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 历史日志在HDFS保存的时间,单位是秒 -->
  <!-- 默认的是-1,表示永久保存 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>

  <property>
    <name>yarn.log.server.url</name>
    <value>http://bigdata01:19888/jobhistory/logs</value>
  </property>

  <!--配置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>bigdata01</value>
  </property>
  <!-- RM1 的主机web管理界面地址 --> 
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>bigdata01:8088</value>
  </property>
  <!-- RM2 的主机地址 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>bigdata02</value>
  </property> 
  <!-- RM2 的主机web管理界面地址 -->  
  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>bigdata02:8088</value>
  </property>
  <!-- ZooKeeper 集群的地址 -->  
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>bigdata01:2181,bigdata02:2181,bigdata03: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>

修改后,使用xsync.sh yarn-site.xml同步。

(二)

服务启动与测试流程

一、启动 Yarn

通过执行 start-yarn.sh 脚本启动 Yarn 服务。

二、查看服务状态

使用 yarn rmadmin -getAllServiceState 命令来查看各个服务的状态,明确哪些是处于工作状态(active),哪些是备用状态(standby)。若在启动过程中发现存在两个 resourcemanager 且均为 standby 状态,这可能是由于版本兼容性问题导致的。例如,hadoop3.1.6 版本需要与 zookeeper 3.4.10 兼容,hadoop3.3.1 则需与 zookeeper 3.6.4 兼容。此时,需要切换 zookeeper 集群,具体操作如下:

  1. 停止之前的 zk 集群。
  2. 下载与当前 hadoop 版本兼容的 zk 安装包,并将其解压到 /opt/installs 目录下。
  3. 对老的 zookeeper 文件夹进行重命名,使用 xcall.sh mv /opt/installs/zookeeper /opt/installs/zookeeper-tmp 命令。
  4. 将新解压的 zk 文件夹重命名为 zookeeper,然后使用 xsync.sh zookeeper 命令进行分发。
  5. 拷贝 zoo.cfg 文件,执行 xcall.sh cp /opt/installs/zookeeper-tmp/conf/zoo.cfg /opt/installs/zookeeper/conf 命令。
  6. 在三台服务器上创建 zkData 文件夹,使用 xcall.sh mkdir /opt/installs/zookeeper/zkData 命令,并拷贝 myid 文件,执行 xcall.sh cp /opt/installs/zookeeper-tmp/zkData/myid /opt/installs/zookeeper/zkData 命令。
  7. 启动 zk 集群,使用 zk.sh start 命令,接着进行格式化操作 hdfs zkfc -formatZK,最后启动 start-all.sh 脚本。

三、测试高可用性

  1. 停止 bigdata01 中的 RM 服务。
  2. 使用 yarn rmadmin -getAllServiceState 命令查看服务状态的变化情况。
  3. 再次启动 bigdata01RM 服务,观察其状态是否转变为 standby,以此验证高可用性配置是否生效。
相关推荐
Coder_Boy_10 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_9449347310 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
九河云11 小时前
5秒开服,你的应用部署还卡在“加载中”吗?
大数据·人工智能·安全·机器学习·华为云
Gain_chance11 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习
每日新鲜事11 小时前
热销复盘:招商林屿缦岛203套售罄背后的客户逻辑分析
大数据·人工智能
AI架构全栈开发实战笔记12 小时前
Eureka 在大数据环境中的性能优化技巧
大数据·ai·eureka·性能优化
AI架构全栈开发实战笔记12 小时前
Eureka 对大数据领域服务依赖关系的梳理
大数据·ai·云原生·eureka
自挂东南枝�13 小时前
政企舆情大数据服务平台的“全域洞察中枢”
大数据
weisian15113 小时前
Elasticsearch-1--什么是ES?
大数据·elasticsearch·搜索引擎
LaughingZhu13 小时前
Product Hunt 每日热榜 | 2026-02-08
大数据·人工智能·经验分享·搜索引擎·产品运营