千家信息网

hadoop的HA

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,1. 为什么要搭建HA?  在hadoop2.x之前,在HDFS 集群中NameNode 存在单点故障 (SPOF:A Single Point of Failure)。对于只有一个 NameNode
千家信息网最后更新 2026年10月31日hadoop的HA

1. 为什么要搭建HA?

  在hadoop2.x之前,在HDFS 集群中NameNode 存在单点故障 (SPOF:A Single Point of Failure)。对于只有一个 NameNode 的集群,如果 NameNode 机器出现故障(比如宕机或是软件、硬件升级),那么整个集群将无法使用,必须等到 NameNode 重新启动,之后才能对外提供服务,这个方式在生成环境中是绝对不允许出现的。
  HDFS 的 HA:通过配置 Active/Standby 两个 NameNodes 实现在集群中对 NameNode 的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将 NameNode 很快的切换到另外一台机器。

2. HA的工作原理?


解释(数据一致以及持久化问题):

  • 当hdfs客户端连接namenode时,namenode启动时,会向JN集群提交edtis log(操作记录日志)。
  • 此时在JN集群中,当有一半的集群服务成功的接收到了消息,然后返回给namenode,这就表示edits log上传成功。
  • 此时NameNode(standBy),需要从JN集群取回元数据信息,然后整合新的fsimage,然后推送回NameNode(active)
  • 在NameNode(standBy)向JN索要数据的时候,首先在JN中会查看是否有宕机的机器,采用过半机制(当集群中有部分服务器宕机时,此时集群会将大部分可以使用的机器作为主,其他的机器全部停止服务),去向备机(standBy)提供对外的数据传输。
  • 在解决block 块信息时,此时datanode会向两台namenode都发送block 块信息。
    解释(解决主备切换问题):
  • 此时需要使用到另外一个集群zookeeper,zookeeper集群是一个高可用的集群,它的实现机制是,首先是一个服务器提供对外的服务,其他的机器是备机,当主机坏了的时候,此时zookeeper集群中采取投票机制(逻辑时钟,ID号,以及数据的更新程度),选出新的主。
  • 此时ZKFC务控制线程一直手抓住了zookeeper集群,另一只手抓住了NameNode。
    • 抓住NameNode(active)的服务控制,监控NameNode(active)的状态,实时的向zookeeper集群汇报。
    • 住NameNode(standBy)的服务控制,接收zookeeper集群发送的信息,如果发送过来的信息,表示主NameNode已停止服务,立刻调用服务控制中的回调函数,让NameNode(standBy)变成主机继续提供服务。
  •  以上的作用是一个和keeplive相同的作用,使用zookeeper不同之处在于,如果服务控制处出现进程的异常退出时,此时通过zookeeper集群会将备机改为active状态,此时主机可能还是active,就造成了两台active的NameNode。在zookeeper中是这样解决的:当有一个服务控制进程异常退出后,他会有一只无形的手去连接另外一台NameNode,并且在可控的范围内,将其变成主(active),而将自己无法控制的那台NameNode,变成备机。

    3. HA的集群搭建?

    搭建集群前的准备:https://blog.51cto.com/14048416/2341450
    zookeeper集群的搭建:https://blog.51cto.com/14048416/2336178

    1)集群的规划

    2)具体安装步骤:

    1)上传安装包 hadoop-2.6.5-centos-6.7.tar.gz
    2)解压到对应的安装目录

    [hadoop@hadoop01 ~]$tar -zxvf hadoop-2.6.5-centos-6.7.tar.gz -C /home/hadoop/apps/

    3)修改配置文件

    hadoo-env.sh:
    加入:export JAVA_HOME= /usr/local/jdk1.8.0_73

core-site.xml:

fs.defaultFShdfs://myha01/hadoop.tmp.dir/home/hadoop/data/hadoopdata/ha.zookeeper.quorumhadoop01:2181,hadoop02:2181,hadoop03:2181

hdfs-site.xml:

 dfs.replication 3 dfs.nameservices myha01 dfs.ha.namenodes.myha01 nn1,nn2 dfs.namenode.rpc-address.myha01.nn1 hadoop01:9000 dfs.namenode.http-address.myha01.nn1 hadoop01:50070 dfs.namenode.rpc-address.myha01.nn2 hadoop02:9000 dfs.namenode.http-address.myha01.nn2 hadoop02:50070 dfs.namenode.shared.edits.dirqjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/myha01 dfs.journalnode.edits.dir /home/hadoop/data/journaldata dfs.ha.automatic-failover.enabled true dfs.client.failover.proxy.provider.myha01org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods  sshfence shell(/bin/true)  dfs.ha.fencing.ssh.private-key-files /home/hadoop/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000

mapred-site.xml:

 mapreduce.framework.name yarnmapreduce.jobhistory.addresshadoop02:10020mapreduce.jobhistory.webapp.addresshadoop02:19888

yarn-site.xml:

 yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id yrc yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 hadoop01 yarn.resourcemanager.hostname.rm2 hadoop02 yarn.resourcemanager.zk-address hadoop01:2181,hadoop02:2181,hadoop03:2181 yarn.nodemanager.aux-services mapreduce_shuffle yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 86400 yarn.resourcemanager.recovery.enabled true yarn.resourcemanager.store.classorg.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

slaves:

hadoop01hadoop02hadoop03
4)分发安装包到其他机器

[hadoop@hadoop01 apps]$scp -r hadoop-2.6.5 hadoop@hadoop02:$PWD
[hadoop@hadoop01 apps]$scp -r hadoop-2.6.5 hadoop@hadoop03:$PWD

5)分别配置环境变量

[hadoop@hadoop01 apps]$ vi ~/.bashrc
添加两行:

export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.5export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

[hadoop@hadoop01 apps]$ source ~/.bashrc

6)集群初始化操作

先启动 zookeeper 集群:
启动:zkServer.sh start
检查启动是否正常:zkServer.sh status
启动 journalnode 进程:
[hadoop@hadoop01 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop02 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop03 ~]$ hadoop-daemon.sh start journalnode
然后用 jps 命令查看是否各个 datanode 节点上都启动了 journalnode 进程
在第一个 namenode 上执行格式化操作:
[hadoop@hadoop01 ~]$ hadoop namenode -format

然后会在 core-site.xml 中配置的临时目录中生成一些集群的信息把他拷贝的第二个 namenode 的相同目录下
hadoop.tmp.dir
/home/hadoop/data/hadoopdata/
两个 namenode 节点该目录中的数据结构是一致的
[hadoop@hadoop01 ~]$ scp -r ~/data/hadoopdata/ hadoop03:~/data
或者在另一个namenode节点上使用:hadoop namenode -bootstrapStandby
格式化 ZKFC(在一台集群上格式化即可):
[hadoop@hadoop01 ~]$ hdfs zkfc -formatZK
启动 HDFS:
[hadoop@hadoop01 ~]$ start-dfs.sh
启动 YARN:
[hadoop@hadoop01 ~]$ start-yarn.sh
若备用节点的 resourcemanager 没有启动起来,则手动启动起来:
[hadoop@hadoop02 ~]$ yarn-daemon.sh start resourcemanager

7)补充:

查看各主节点的状态
HDFS:
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

YARN:
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2

4. HA的集群搭建后测试

1.手动杀死active的namenode,看看集群的状况
2.手动杀死active的resourcemanager,看看集群的状况
3.在上传文件时,杀死namenode,查看集群状况
4.在执行任务时,杀死resourcemanager,查看集群状态

集群 服务 机器 控制 信息 数据 节点 状态 目录 进程 配置 主机 手动 故障 机制 格式 状况 问题 对外 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络科技有限互联网 麻工互联网科技 上海互联网科技有限公司 云电互联网科技 互联网科技博客 互联网 科技服务平台 深圳卡尔迅互联网科技有限公司怎么样 上海电发互联网科技有限公司 深圳市运趣互联网科技有限公司 农村开互联网科技讲堂 科技互联网的估值 欧洲十大科技互联网公司 互联网大会黑科技排名 岳阳华臻互联网科技有限公司 青岛科技大学互联网大赛研究生 广州富喜互联网络科技 富国互联网金融科技混合基金 2021世界互联网领先科技成果发布 互联网科技手机排行榜 河南商务圈互联网科技有限公司 河南真二互联网科技有限公司 互联网下的科技发展 温州喔噻互联网科技有限公司 互联网保险科技创业 互联网方面的科技前沿 互联网公司高科技产品 广东工业互联网大赛深圳学泰科技 云南省自由互联网科技有限公司 山东蛋芒互联网科技有限公司 保山浩联互联网科技有限公司
0