Hadoop系列-HDFS HA高可用集群
前言:
在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高可用集群相关推荐
- 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/,因为原链接打不开,故在 ...
- 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 ...
- Hadoop HA 高可用集群搭建
Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...
- Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...
- Hadoop HA 高可用集群启动报错 Encountered exception loading fsimage 解决方案
笔者在搭建好Hadoop HA 高可用集群启动时报如下错误,后面是解决方案. 报错信息: 2018-08-24 11:18:07,475 INFO org.apache.hadoop.hdfs.ser ...
- 红帽436——HA高可用集群之概念篇
一.集群概念: 集群:提高性能,降低成本,提高可扩展性,增强可靠性,任务调度室集群中的核心技术. 集群作用:保证业务不断 集群三种网络:业务网络,集群网络,存储网络 二.集群三种类型: HA:高可用集 ...
- 数据库系列之SequoiaDB高可用集群部署(二)
SequoiaDB作为存储引擎,支持高并发的HTAP场景.本位总结运维分析项目中使用SequoiaDB作为数据存储的高可用部署实战,并接入Kafka进行高并发的更新业务和Spark进行高并发的批量查询 ...
- 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群
Table of Contents 目录 基于Kubeadm部署Kubernetes1.13.3 HA 高可用集群 01. 部署目的 1.1 Kubernetes的特性 1.2 贴微服务,开发环境快速 ...
- Hadoop的HA机制原理解析,与HA高可用集群环境搭建
2019独角兽企业重金招聘Python工程师标准>>> Hadoop的HA工作机制示意图 下面我们开始搭建这一套高可用集群环境 hadoop2.0已经发布了稳定版本了,增加了很多特性 ...
最新文章
- 领导应该怎么当?盯目标、抓计划、管时间、做农夫、当仆人……
- 数据结构稀疏矩阵的加法十字链表_学习数据结构和算法的框架思维
- ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些
- 文献记录(part4)--Sparse Biclustering of Transposable Data
- vSphere Client 编辑虚拟机属性的问题
- 认识Mahout下的云计算机器学习
- 外架小横杆外露长度规范要求_安全文明施工规范
- 在easyui中如何使用ajax请求数据,Ajax 中正常使用jquery-easyui (转)
- 泰勒展开与找第一项系数不为1的解题策略
- server.mappath 与page命名空间说明
- Java常用集合框架源码解析合集
- 游戏找不到DirectX的解决方法
- 2018年注册测绘师考试详情解析
- matlab茎叶图命令,[转载]转载:Stata命令(转自人大论坛)
- 基于qt的计算机论文,一种基于Qt的科学计算器系统 毕业论文.doc
- 数据预处理——归一化标准化
- 对于木马的一些介绍(预防木马)
- M1 macOS 无法录制系统声音?SoundFlower后继有BlackHole【macOS系统声音内录】
- 久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋
- Android 截屏到桌面的最佳处理方案-无须ROOT-适用Android 8.0
热门文章
- Dubbo的基本介绍和搭建一个Dubbo环境
- Candies-POJ 3159
- c语言sizeof(test),解析C语言中的sizeof
- java 算法 福尔摩斯的约会
- 七夕-探探小卡片鸿蒙版
- 一个事物两个方面的对比举例_《写作教练在你家》:推开写作之门第3课——对比的魔法...
- html保存导入word文档格式,WordPress网站在导入Word文档时如何保持原有格式
- mysql多表删除操作_MySQL多表删除的实现
- oracle成本模块培训,Oracle App 培训笔记(5) -- 成本管理模块表结构整理 续
- 怎么在delphi显示html,如何在Delphi中将简单的RichText转换为HTML标签?