hadoop高可用架构

作者:kuroomi日期:2026/9/4

hadoop高可用

IP主机名角色
192.168.150.172server1NameNode DFSZKFailoverController ResourceManager
192.168.150.173server2JournalNode QuorumPeerMain DataNode NodeManager
192.168.150.174server3JournalNode QuorumPeerMain DataNode NodeManager
192.168.150.175server4JournalNode QuorumPeerMain DataNode NodeManager
192.168.150.176server5NameNode DFSZKFailoverController ResourceManager

zookeeper集群部署

Zookeeper集群至少三台,总节点数为奇数个。

安装JDK

安装zookeeper

1tar zxf apache-zookeeper-3.8.6-bin.tar.gz
2# 编辑zoo.cfg文件:
3cd apache-zookeeper-3.8.6-bin/conf/
4cp zoo_sample.cfg zoo.cfg
5vim  zoo.cfg
6tickTime=2000
7initLimit=10
8syncLimit=5
9dataDir=/tmp/zookeeper
10clientPort=2181
11server.1=192.168.150.173:2888:3888
12server.2=192.168.150.174:2888:3888
13server.3=192.168.150.175:2888:3888
14

各节点配置文件相同,并且需要在/tmp/zookeeper目录中创建myid文件,写入

一个唯一的数字,取值范围在1-255。比如:192.168.36.167节点的myid文件写入数

字“1”,此数字与配置文件中的定义保持一致,(server.1=192.168.150.173:2888:3888

)其它节点依次类推。

1mkdir -p /tmp/zookeeper
2echo 1 > /tmp/zookeeper/myid

在各节点启动服务:(server2、server3、server4)

bin/zkServer.sh start

查看节点状态

bin/zkServer.sh status

hadoop配置

1[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
2[hadoop@server1 hadoop]$ vim core-site.xml
3
1<configuration>
2    <property>
3        <name>fs.defaultFS</name>
4        <value>hdfs://masters</value>
5    </property>
6
7<property>
8<name>ha.zookeeper.quorum</name>
9<value>192.168.150.173:2181,192.168.150.174:2181,192.168.150.175:2181</value>
10</property>
11
12</configuration>
13

1[hadoop@server1 hadoop]$ vim hdfs-site.xml
2
1<configuration>
2    <property>
3        <name>dfs.replication</name>
4        <value>3</value>
5    </property>
6<property>
7<name>dfs.nameservices</name>
8<value>masters</value>
9</property>
10
11<property>
12<name>dfs.ha.namenodes.masters</name>
13<value>h1,h2</value>
14</property>
15
16<property>
17<name>dfs.namenode.rpc-address.masters.h1</name>
18<value>192.168.150.172:9000</value>
19</property>
20
21<property>
22<name>dfs.namenode.http-address.masters.h1</name>
23<value>192.168.150.172:9870</value>
24</property>
25
26<property>
27<name>dfs.namenode.rpc-address.masters.h2</name>
28<value>192.168.150.176:9000</value>
29</property>
30
31<property>
32<name>dfs.namenode.http-address.masters.h2</name>
33<value>192.168.150.176:9870</value>
34</property>
35
36<property>
37<name>dfs.namenode.shared.edits.dir</name>
38<value>qjournal://192.168.150.173:8485;192.168.150.174:8485;192.168.150.175:8485/masters</value>
39</property>
40
41<property>
42<name>dfs.journalnode.edits.dir</name>
43<value>/tmp/journaldata</value>
44</property>
45
46<property>
47<name>dfs.ha.automatic-failover.enabled</name>
48<value>true</value>
49</property>
50
51<property>
52<name>dfs.client.failover.proxy.provider.masters</name>
53<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
54</property>
55
56<property>
57<name>dfs.ha.fencing.methods</name>
58<value>
59sshfence
60shell(/bin/true)
61</value>
62</property>
63
64<property>
65<name>dfs.ha.fencing.ssh.private-key-files</name>
66<value>/home/hadoop/.ssh/id_rsa</value>
67</property>
68
69<property>
70<name>dfs.ha.fencing.ssh.connect-timeout</name>
71<value>30000</value>
72</property>
73
74</configuration>
75

启动hdfs集群(按顺序启动)

1)确认启动zookeeper集群(server2、server3、server4)
1[hadoop@server2~]$ jps
2
31222QuorumPeerMain
4
51594 Jps
2)在三个DN上依次启动journalnode(第一次启动hdfs必须先启动journalnode)
1[hadoop@server2 ~]$ cd hadoop
2[hadoop@server2 hadoop]$ bin/hdfs --daemon start journalnode
3[hadoop@server2 hadoop]$ jps
42337 JournalNode
52180 QuorumPeerMain
62379 Jps
7
3)格式化HDFS集群(server1上执行)
1$ bin/hdfs namenode -format
2Namenode数据默认存放在/tmp,需要把数据拷贝到h2
3$ scp -r /tmp/hadoop-hadoop server5:/tmp
4
4)格式化zookeeper (只需在h1上执行即可)

$ bin/hdfs zkfc -formatZK (注意大小写)

5)启动hdfs集群(只需在h1上执行即可)

$ sbin/start-dfs.sh

6)查看集群状态

7)测试故障自动切换

杀掉h2主机的namenode进程后依然可以访问,此时h1转为active状态接

管namenode

1[hadoop@server5 ~]$ jps
22883 Jps
32373 DFSZKFailoverController
42670 NameNode
5[hadoop@server5 ~]$ kill -9 2670
6[hadoop@server5 ~]$ jps
72915 Jps
82373 DFSZKFailoverController
9[hadoop@server5 ~]$ cd hadoop
10[hadoop@server5 hadoop]$ bin/hdfs --daemon start namenode
11[hadoop@server5 hadoop]$ jps
122373 DFSZKFailoverController
132972 NameNode
143006 Jps
15

启动h1上的namenode,此时为standby状态。

yarn高可用

修改配置文件

1[hadoop@server1 hadoop]$ vim mapred-site.xml
2

1[hadoop@server1 hadoop]$ vim yarn-site.xml
2
1<configuration>
2    <!-- ======================== NodeManager 基础配置 ======================== -->
3    <property>
4        <name>yarn.nodemanager.aux-services</name>
5        <value>mapreduce_shuffle</value>
6        <!-- 辅助服务:MapReduce 任务运行时需要 Shuffle 服务来传输 Map 输出结果 -->
7        <!-- 这是 YARN 运行 MapReduce 作业的必备配置,不能更改名称 -->
8    </property>
9
10    <property>
11        <name>yarn.nodemanager.env-whitelist</name>
12        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
13        <!-- 环境变量白名单:NodeManager 在启动容器时会传递这些环境变量给作业 -->
14        <!-- 确保 MapReduce 任务能正确找到 Hadoop 各组件路径和 Java 环境 -->
15    </property>
16
17    <!-- ======================== ResourceManager HA 核心配置 ======================== -->
18    <property>
19        <name>yarn.resourcemanager.ha.enabled</name>
20        <value>true</value>
21        <!-- 启用 ResourceManager 高可用(HA)模式 -->
22        <!-- true = 启动两个 RM(Active/Standby),false =  RM 模式 -->
23    </property>
24
25    <property>
26        <name>yarn.resourcemanager.cluster-id</name>
27        <value>RM_CLUSTER</value>
28        <!-- 集群标识符:用于区分不同 YARN 集群,多个 HA 集群必须不同 -->
29        <!--  ID 会写入 ZooKeeper,供客户端识别当前连接的 RM 集群 -->
30    </property>
31
32    <property>
33        <name>yarn.resourcemanager.ha.rm-ids</name>
34        <value>rm1,rm2</value>
35        <!-- 定义两个 ResourceManager 的逻辑 ID(名称自定义) -->
36        <!-- rm1  rm2 分别对应下面配置的主机名 -->
37    </property>
38
39    <property>
40        <name>yarn.resourcemanager.hostname.rm1</name>
41        <value>server1</value>
42        <!-- 第一个 ResourceManager 运行的主机名(对应 rm1) -->
43        <!-- 确保 server1 已启动 ResourceManager 服务 -->
44    </property>
45
46    <property>
47        <name>yarn.resourcemanager.hostname.rm2</name>
48        <value>server5</value>
49        <!-- 第二个 ResourceManager 运行的主机名(对应 rm2) -->
50        <!-- server5  RM 作为 Standby 备用 -->
51    </property>
52
53    <!-- ======================== 状态存储与故障恢复 ======================== -->
54    <property>
55        <name>yarn.resourcemanager.recovery.enabled</name>
56        <value>true</value>
57        <!-- 启用 RM 状态恢复功能 -->
58        <!-- RM 重启/故障切换时能从 ZooKeeper 恢复之前的状态(队列、应用等) -->
59    </property>
60
61    <property>
62        <name>yarn.resourcemanager.store.class</name>
63        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
64        <!-- 状态存储类型:使用 ZooKeeper 存储 RM 状态 -->
65        <!-- 这是 HA 模式下推荐的存储方式,保证 RM 切换时状态不丢失 -->
66    </property>
67
68    <property>
69        <name>yarn.resourcemanager.zk-address</name>
70        <value>192.168.150.173:2181,192.168.150.174:2181,192.168.150.175:2181</value>
71        <!-- ZooKeeper 集群地址(端口默认 2181) -->
72        <!-- RM 通过 ZooKeeper 实现选举和状态同步,三个节点构成高可用 -->
73    </property>
74</configuration>

启动yarn服务

1[hadoop@server1 hadoop]$ sbin/start-yarn.sh
2Starting resourcemanagers on [ server1 server5]
3Starting nodemanagers
4[hadoop@server1 hadoop]$ jps
513492 DFSZKFailoverController
615925 Jps
715798 ResourceManager
813720 NameNode
9

测试yarn故障切换

初始是server5是active


hadoop高可用架构》 是转载文章,点击查看原文


相关推荐


从“听得懂”到“干得了”:工业大模型落地工厂的三层进化路线
MobotStone2026/8/27

过去几年,大模型很火。但到了制造业,一个现实问题始终绕不开:会聊天的AI,真的能开机器、查故障、调参数、排产线吗? 答案是,单靠一个大模型很难。 工业现场和普通的聊天场景完全不同。一条生产线可能涉及设备说明书、工艺文件、传感器数据、机器视觉图像,以及MES、WMS、SCADA、PLC等各种系统。大模型不仅要“听得懂”,还要懂具体行业的专业知识,更重要的是,它最终得把判断变成实际动作。 因此,工业大模型并不是“一个模型打天下”,而更像一个分工明确的三层体系: 基础模型层:解决“懂不懂”,让AI拥


【AI智能体】Codex 生成高质量电商套图实战操作详解
小码农叔叔2026/8/19

目录 一、前言 二、Codex 介绍 2.1 Codex 是什么 2.2 Codex能做什么? 2.3 基于Codex 制作电商图片介绍 2.3.1 核心实现流程 2.3.2 实战操作建议 三、Codex 生成电商套图操作过程 3.1 前置准备 3.2 完整操作过程 3.2.1 规划设计方案 3.2.2 确定设计方案 3.2.3 根据产品主图规划设计方案 3.2.4 细节调整与完善 3.2.5 重新作图 3.2.6 封装成Skill 3.2.7 自定义Ski


如何在Windows环境选择适合自己的 AI Agent
Lei_official2026/8/6

背景 在使用 AI Agent 时,你是否曾经困惑过:应该选择什么环境、什么形态的 Agent 终端?以 Codex 为例,有 Desktop App,也有 CLI 工具。如果使用的是 Windows 环境,例如我,还面临着 PS7、WSL2 的选择。 根据奥卡姆剃刀原理,如非必要,勿增实体。对于功能相近的工具,我倾向于只保留最适合当前任务的一种。 尤其是 AI Agent 这类工具,使用的不只是工具本身,还有大量定制配置、Skill、MCP 等;这些内容也会不断更新、迭代。如果在同一台电脑上使


GitHub 热榜项目 - 周榜(2026-07-26)
CoderJia_2026/7/28

GitHub 热榜项目 - 周榜(2026-07-26) 生成于:2026-07-26 统计摘要 共发现热门项目: 22 个 Token赞助:siliconflow 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本期热点趋势总结 本期 GitHub 热榜聚焦 AI Agent 工程化与开发者效率升级:代码审查图谱、 CLI / IDE 编排、 多模型路由与 token 压缩成为核心热点,配套的 Skil


一句话上线 AI Agent 应用:火山 Supabase + IGA Pages 全栈部署实践
火山引擎Agent社区2026/7/20

AI 全栈应用上线难在哪? 很多开发者在做全栈应用,尤其是 AI 应用时,真正耗时的地方往往不在业务代码本身。一个功能原型可能很快就能写出来:前端页面、登录注册、文件上传、数据库表、几段后端函数,再接一个大模型接口。但当它要从本地项目变成“别人能打开链接直接使用”的应用时,事情就会变复杂。 你需要准备数据库,执行建表脚本,配置行级权限,开通对象存储,部署后端函数,设置环境变量,再把前端打包上传。每一步都不算难,但串起来之后,部署流程很容易变成一次重复、繁琐、容易出错的基础设施工作。 火山引擎 S


AI图片工具到底有哪些?一份按能力维度整理的清单
怕浪猫2026/7/12

一、AI 图片生成类 产品核心优势网址Midjourney生成质量天花板,风格审美领先midjourney.comDALL·E 3与ChatGPT深度集成,理解能力强openai.com/dall-e-3Ideogram文字渲染能力最强,适合海报/Logoideogram.aiFlux新一代高质量模型,开源可部署flux1.aiStable Diffusion开源生态最强,可控性高stability.aiLeonar


油猴脚本创建webworker踩坑记录
天平2026/7/4

起因是我在使用vite-plugin-monkey编写油猴脚本,用ts编写webworker脚本,然后在一些网站创建webworker准备做一些耗时任务时,webworker一直没生效。我一直以为new Worker()梭哈就好了,没想到里面的门道这么多,整理了一些问题。 1.webworker不能直接使用非同源 假设谷歌有一个w.js脚本,在你的网站里面,不能直接new Worker('https://www.google.com/w.js')去加载。注意,这里是限制非同源,和跨域CORS没关


WorkBuddy 上手实战:打造一个可用的本地 AI 工作台
倔强的石头_2026/6/26

WorkBuddy 上手实战:打造一个可用的本地 AI 工作台 很多 AI 产品看上去都能聊天,但真正进到日常使用里,最常见的需求并不是闲聊,而是整理一段零散记录、起草一段通知、输出一份周报,或者把一个任务拆成清单。而WorkBuddy 更像一个本地工作台,而不是单一聊天框:它把任务输入、专家角色、技能扩展和自动化模板放在同一个界面里,适合把办公动作收拢到一处完成。 和只做对话的产品相比,WorkBuddy 的优势很明显: 任务入口更集中,不用在多个页面之间来回切换。 专家、技能、自动化是分层


Ubuntu 26.04 完整安装 Fcitx5 中文拼音输入法指南(适配默认Wayland)
Oneslide2026/6/17

前言 Ubuntu 26.04 默认采用 Wayland 显示服务,传统 IBus 输入法存在光标跟随、软件兼容性问题;搜狗输入法依赖老旧 Fcitx4 框架,安装会破坏桌面依赖、造成登录循环。 本文使用系统原生 Fcitx5 输入法框架,完美适配 Wayland,浏览器、VSCode、办公软件均可正常输入中文,附带界面美化、候选框遮挡问题全套解决方案。 一、前置准备:安装中文语言包&中文字体 终端执行以下命令,完成中文本地化环境部署,解决汉字方框乱码问题: # 更新软件源 sudo apt u


Flink-HBase生产问题排查:NoClassDefFoundError
大大大大晴天️2026/6/10

一、背景与问题 我们生产环境上有一个Flink实时作业近期出现写入 HBase 失败,日志频繁打印Exception日志,但作业的运行状态却一直健康正常;进行应急手动重启作业后恢复正常,HBase正常写入,未再复现。 环境信息:Flink(1.16)、HBase(2.4)、Kafka(2.8) 作业的计算链路DAG大致如下: 算子链路:Source → Filter/FlatMap → Process → HBaseSink 二、问题排查 此Flink作业是一个Flink-Java作

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读