前言:

在HDFS集群的时候我们知道,NameNode只有一个,如果现在NameNode挂掉了,或者NameNode需要硬件或者软件的升级,那么势必就有单点问题。那么HDFS HA就是来解决这个问题的。

HA架构图:

集群需要考虑的问题:

1 我们要考虑两个NM之间的元数据是共享或者同步的

NM启动的时候,会去读取fsimage和 edits文件,那么备份NM也需要读取这两个文件

而且随着ActiveNM会记录元数据的变化,那么StandbyNM也需要随时同步元数据的变化

2 必须保证日志文件的安全

方案讨论:

解决方案【一】

在以前我们可能找一些质量比较好的机器,存储相关的数据或者文件

然后ActiveNM 负责写,然后StandbyNM负责读,也能实现同步,但是成本太高

解决方案【二】

Cloudera公司提出分布式存储日志文件,日志备份数目(2n+1)

解决方案【三】

使用Zookeeper+Journalnode

另外我们不在需要SecondaryNM,因为启用SecondaryNM的目的是合并NameNode的fsimage和 edits文件,以便节省下一次NM启动的时候减少启动时间

现在有了StandbyNM 它和ActiveNM是实时同步的,所以就不需要SecondaryNM

一 搭建HA集群

搭建HadoopHA集群,可能有很多种方法,我们这里采用官方文档所提供的使用QJM (QuorumJournal Manager)仲裁日志管理的方式。

1.1 首先检查hadoop-env.shmapred-env.sh,yarn-env.sh的JAVA_HOME路径是否设置好

1.2 修改core-site.xml文件

1.3 修改hdfs-site.xml

首先因为不需要SecondaryNM,所以相关的配置需要去掉。

1.4 配置yarn-site.xml

1.5 配置mapred-site.xml

1.6 分发配置到各个节点

创建目录:

/opt/app/hadoop-2.5.0/data/tmp/dfs/journal

mkdir -p /opt/app/hadoop-2.5.0/data/tmp/dfs/journal

scp -r hadoop-2.5.0/ hadoop@hadoop-cluster-03:/opt/app

scp -r hadoop-2.5.0/ hadoop@hadoop-cluster-03:/opt/app

1.7 启动各个节点的Journal Node

/opt/app/hadoop-2.5.0/sbin/hadoop-daemon.sh start journalnode

如果启动成功应该有一个JournalNodejava进程

1.8 然后格式化Active NameNode,并启动NameNode

我们规划hadoop-cluster-01为ActiveNameNode;然后http://hadoop-cluster-02为StandbyNameNode

/opt/app/hadoop-2.5.0/bin/hdfsnamenode -format

另外一台机器不需要格式化,因为他们管理的是同一份元数据。如果元数据都不相同,那么主备也就没什么意思呢。

启动ActiveNameNode:

/opt/app/hadoop-2.5.0/sbin/hadoop-daemon.sh start namenode

1.9 在Standby NameNode同步元数据,并启动StandbyNM

/opt/app/hadoop-2.5.0/bin/hdfs namenode -bootstrapStandby

启动StandbyNameNode:

/opt/app/hadoop-2.5.0/sbin/hadoop-daemon.sh start namenode

1.10 然后启动2台namenode和 各个节点的datanode

这时候当我们访问:

http://hadoop-cluster-01:50070/ 和http://hadoop-cluster-02:50070/

都还是standby状态,因为这时候都是待机状态,所以需要我们指定ActiveNameNode切换Active状态

/opt/app/hadoop-2.5.0/bin/hdfs haadmin -transitionToActive

namenode100

这时候ActiveNameNode 状态就是Active了,如图示:

1.11 启动各个节点DN,看Active是否工作正常

./hdfs dfs -mkdir -p /var/hadoop/input

./hdfs dfs -put /opt/shell/hadoop.sh /var/hadoop/input

./hdfs dfs -cat  /var/hadoop/input/hadoop.sh

1.12 然后测试两个NameNode是否是共享的

先杀掉ActiveNameNode进程

kill -9 10223

然后把Standby状态强制转换成Active

/opt/app/hadoop-2.5.0/bin/hdfs haadmin -transitionToActive

namenode101--forceactive

./hdfs dfs -cat  /var/hadoop/input/hadoop.sh

二 自动故障转移

根据之前的配置,我们知道,如果ActiveNM挂了,那么Standby是需要我们手动切换才能转移状态,然后才对外提供服务的。

那如果是半夜宕机了,我们怎么办呢,所以我们需要一种自动故障转移的需求。

这时候需要使用到2个新的组件:

ZooKeeperquorum 和 ZKFailoverControllerprocess.

ZKFC是一个新的组件,它是一个ZooKeeper客户端,能够监视和管理NameNode的状态。每一台NameNode节点 都会运行一个ZKFC.负责:

HealthMonitoring: 健康监视,ZKFC会定期的用一个健康检查命令去ping本地的NameNode,只要NameNode即使做出响应,就被认为事实健康的。如果NameNode挂掉,假死或者其他原因造成不健康的状态,健康监视器它会标记为不健康状态

ZooKeepersession management: Zookeeper 会话管理。当本地NameNode是健康的,ZKFC在Zookeeper会持有一个session,如果ActiveNameNode是健康的,他会持有一个锁 znode,如果session到期,这个lockznode将会自动释放

ZooKeeper-basedelection:基于ZooKeeper的选举。如果本地NameNode是健康的,他会去查看是不是没有其他node在持有锁,他自己会去询问这个锁,如果成功,他将赢得选举。

2.1 配置core-site.xml

我们需要在core-site追加如下配置:

<!--指定运行zookeeper的节点信息,多个用逗号分割-->

<property>

<name>ha.zookeeper.quorum</name>

<value>hadoop-cluster-01:2181,hadoop-cluster-02:2181,hadoop-cluster-03:2181

</value>

</property>

2.2 配置hdfs-site.xml

我们需要在hdfs-site.xml追加以下的配置:

<!--安装automiaticfailover-->

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

2.3 初始化在ZooKeeper的状态

初始化会在Zookeeper生成一个hadoop-ha的znode.

/opt/app/hadoop-2.5.0/bin/hdfs zkfc -formatZK

只需要一台机器初始化就行。

在zookeeper查看是否创建集群成功

/opt/app/zookeeper-3.4.6/bin/zkCli.sh

然后ls / 如果成功会看到/hadoop-ha节点

2.4停止所有hdfs进程然后重启

/opt/app/hadoop-2.5.0/sbin/stop-dfs.sh

/opt/app/hadoop-2.5.0/sbin/start-dfs.sh

这时候你会发现每一个namenode都起了一个这样的进程:

DFSZKFailoverController

如果你没发现有这样的进程启动,你也是可以手动启动的:

/opt/app/hadoop-2.5.0/sbin/hadoop-daemon.sh start zkfc

2.5 测试自动故障转移

杀掉ActiveNameNode 进程

kill-9 11708

现在查看StandbyNameNode:

Hadoop系列-HDFS HA高可用集群相关推荐

  1. Centos7.6+Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    本文转自https://mshk.top/2019/03/centos-hadoop-zookeeper-hbase-hive-spark-high-availability/,因为原链接打不开,故在 ...

  2. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  3. Hadoop HA 高可用集群搭建

    Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...

  4. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...

  5. Hadoop HA 高可用集群启动报错 Encountered exception loading fsimage 解决方案

    笔者在搭建好Hadoop HA 高可用集群启动时报如下错误,后面是解决方案. 报错信息: 2018-08-24 11:18:07,475 INFO org.apache.hadoop.hdfs.ser ...

  6. 红帽436——HA高可用集群之概念篇

    一.集群概念: 集群:提高性能,降低成本,提高可扩展性,增强可靠性,任务调度室集群中的核心技术. 集群作用:保证业务不断 集群三种网络:业务网络,集群网络,存储网络 二.集群三种类型: HA:高可用集 ...

  7. 数据库系列之SequoiaDB高可用集群部署(二)

    SequoiaDB作为存储引擎,支持高并发的HTAP场景.本位总结运维分析项目中使用SequoiaDB作为数据存储的高可用部署实战,并接入Kafka进行高并发的更新业务和Spark进行高并发的批量查询 ...

  8. 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群

    Table of Contents 目录 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群 01. 部署目的 1.1 Kubernetes的特性 1.2 贴微服务,开发环境快速 ...

  9. Hadoop的HA机制原理解析,与HA高可用集群环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> Hadoop的HA工作机制示意图 下面我们开始搭建这一套高可用集群环境 hadoop2.0已经发布了稳定版本了,增加了很多特性 ...

最新文章

  1. 领导应该怎么当?盯目标、抓计划、管时间、做农夫、当仆人……
  2. 数据结构稀疏矩阵的加法十字链表_学习数据结构和算法的框架思维
  3. ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些
  4. 文献记录(part4)--Sparse Biclustering of Transposable Data
  5. vSphere Client 编辑虚拟机属性的问题
  6. 认识Mahout下的云计算机器学习
  7. 外架小横杆外露长度规范要求_安全文明施工规范
  8. 在easyui中如何使用ajax请求数据,Ajax 中正常使用jquery-easyui (转)
  9. 泰勒展开与找第一项系数不为1的解题策略
  10. server.mappath 与page命名空间说明
  11. Java常用集合框架源码解析合集
  12. 游戏找不到DirectX的解决方法
  13. 2018年注册测绘师考试详情解析
  14. matlab茎叶图命令,[转载]转载:Stata命令(转自人大论坛)
  15. 基于qt的计算机论文,一种基于Qt的科学计算器系统 毕业论文.doc
  16. 数据预处理——归一化标准化
  17. 对于木马的一些介绍(预防木马)
  18. M1 macOS 无法录制系统声音?SoundFlower后继有BlackHole【macOS系统声音内录】
  19. 久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋
  20. Android 截屏到桌面的最佳处理方案-无须ROOT-适用Android 8.0

热门文章

  1. Dubbo的基本介绍和搭建一个Dubbo环境
  2. Candies-POJ 3159
  3. c语言sizeof(test),解析C语言中的sizeof
  4. java 算法 福尔摩斯的约会
  5. 七夕-探探小卡片鸿蒙版
  6. 一个事物两个方面的对比举例_《写作教练在你家》:推开写作之门第3课——对比的魔法...
  7. html保存导入word文档格式,WordPress网站在导入Word文档时如何保持原有格式
  8. mysql多表删除操作_MySQL多表删除的实现
  9. oracle成本模块培训,Oracle App 培训笔记(5) -- 成本管理模块表结构整理 续
  10. 怎么在delphi显示html,如何在Delphi中将简单的RichText转换为HTML标签?