为什么要配置HDFS HA?
首先:HDFS集群中NameNode 如果存在单点故障。对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用.
而影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用;二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用。
为了解决上述问题,Hadoop给出了HDFS的高可用HA方案:HDFS通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。
HDFS HA架构的核心作用:
一个典型的HA集群,NameNode会被配置在两台独立的机器上,在任何时间上,一个NameNode处于活动状态,而另一个NameNode处于备份状态,活动状态的NameNode会响应集群中所有的客户端,备份状态的NameNode只是作为一个副本,保证在必要的时候提供一个快速的转移。任何时刻,只能且有一个Active NameNode是非常重要的,否则将会导致集群操作的混乱.如果有两个NameNode将会分可能会导致数据丢失,或者状态异常,这种情况通常称为“split-brain”(脑裂)。所以任何时候只允许一个NameNode作为writer;在当前namenode宕机之后,原来的Standby Node才可以接管Active的所有职能,这就阻止了其他NameNode基于处于Active状态的问题。
HDFS HA配置要素:
NameNode机器:两台配置对等的物理机器,它们分别运行Active和Standby Node。
JouralNode机器:运行JouralNodes的机器。JouralNode守护进程相当的轻量级,可以和Hadoop的其他进程部署在一起,比如NameNode、DataNode、ResourceManager等,至少需要3个且为奇数,保证选举机制的绝对成功。
说明以下几点:
HDFS HA通常由两个NameNode组成,一个处于Active状态,另一个处于Standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。
Hadoop 2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode,这里还配置了一个Zookeeper集群,用于ZKFC故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为Active状态。
YARN的ResourceManager也存在单点故障问题,这个问题在hadoop-2.4.1得到了解决:有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调。
YARN框架下的MapReduce可以开启JobHistoryServer来记录历史任务信息,否则只能查看当前正在执行的任务信息。
Zookeeper的作用是负责HDFS中NameNode主备节点的选举,和YARN框架下ResourceManaer主备节点的选举。
Hadoop Ha 分为namenodeHA 和resourcemanagerHA
下面是个人具体的配置步骤
Namenode HA
集群规划
PC01
|
PC02
|
PC03
|
NameNode
|
NameNode
|
|
ZKFC
|
ZKFC
|
ResourceManager
|
DataNode
|
DataNode
|
DataNode
|
JournalNode
|
JournalNode
|
JournalNode
|
NodeManager
|
NodeManager
|
NodeManager
|
ZooKeeper
|
ZooKeeper
|
ZooKeeper
|
一)安装hadoop
二)配置环境文件
hadoop-env.sh
mapred-env.sh
yarn-env.sh
exportJAVA_HOME=/opt/modules/jdk1.7.0_67
三)配置4个site.xml文件
1.========core-site.xml========
<!--NameNode HA的逻辑访问名称-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0/data</value>
</property>
2.=================hdfs-site.xml=============
<!-- 分布式副本数设置为3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!--ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>vampire01:8020</value>
</property>
<!--nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>vampire01:50070</value>
</property>
<!--nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>vampire02:8020</value>
</property>
<!--nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>vampire02:50070</value>
</property>
<!--指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://vampire01:8485;vampire02:8485;vampire03:8485/ns1</value>
</property>
<!--指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/modules/hadoop-2.5.0/journal</value>
</property>
<!--配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行
sshfence:当Active出问题后,standby切换成Active,此时,原Active又没有停止服务,这种情况下会被强制杀死进程。
shell(/bin/true):NN Active和它的ZKFC一起挂了,没有人通知ZK,ZK长期没有接到通知,standby要切换,此时,standby调一个shell(脚本内容),这个脚本返回true则切换成功。
-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!--使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 关闭权限检查用户或用户组 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
3.=============mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<!--配置实际的主机名和端口-->
<value>vampire01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>vampire01:19888</value>
</property>
4.============yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>vampire03</value>
</property>
<!--启用日志聚合功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日志保存时间-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
5.=================slaves
vampire01
vampire02
vampire03
四)分发配置
$scp etc/hadoop/core-site.xmletc/hadoop/hdfs-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/
$scpetc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml vampire03:/opt/modules/hadoop-2.5.0/etc/hadoop/
五)启动HDFS HA
##注意:每一个步骤都严格按照以下步骤执行
1.删除data和logs目录(3台上,有必须删掉)
$ rm -rf data logs
2.启动zk(3台上都要)
$ bin/zkServer.sh start
3.启动journalnode(3台上都要)
$ sbin/hadoop-daemon.sh start journalnode
3908 JournalNode
2740 QuorumPeerMain
4.格式化namenode(PC1也就是nn1)
adoop-daemon.sh start namenode
5.同步nn1的元数据(PC2 也就是nn2)
n/hadoop-daemon.sh start namenode
6.查看web界面
//vampire02:50070 ##standby
7.手动切换namenode的状态
dfs haadmin -transitionToStandbynn1 ##切换成standby
六)开启故障自动转移
1.配置故障转移
1)=====core-site.xml====================
<property>
<name>ha.zookeeper.quorum</name>
<value>vampire01:2181,vampire02:2181,vampire03:2181</value>
</property>
2)====hdfs-site.xml
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
2.分发配置文件
$scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/
3.启动故障转移服务
1)首先停止hdfs和zk
$sbin/stop-dfs.sh
$bin/zkServer.sh stop ##关闭zk(3台服务器)
重启
$bin/zkServer.sh start ##启动zk(3台服务器)
2)初始化zkfc[PC1也就是nn1]
$bin/hdfs zkfc -formatZK ##初始化ZKFC
17/03/2716:49:18 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns1 inZK.
$sbin/start-dfs.sh ##启动hdfs
bin/hdfs haadmin -getServiceState nn1 #查看nn1状态
bin/hdfs haadmin -getServiceState nn2 #查看nn2状态
[PC1]
[hadoop@hadoophadoop-2.5.0]$ jps
4196 JournalNode
4356 DFSZKFailoverController
4012 DataNode
3920 NameNode
3586 QuorumPeerMain
4458 Jps
|
[PC2]
[hadoop@hadoop hadoop-2.5.0]$ jps
4117 Jps
3849 DataNode
3786 NameNode
3926 JournalNode
3633 QuorumPeerMain
4045 DFSZKFailoverController
|
[PC3]
[hadoop@hadoop hadoop-2.5.0]$ jps
3387 DataNode
3461 JournalNode
3551 Jps
3231 QuorumPeerMain
|
ResourceManager HA
一、集群规划(基本操作思路与与NameNode HA xiangs)
二、修改配置文件
=====yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!--启用resourcemanagerha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rmcluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>vampire02</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>vampire03</value>
</property>
<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>vampire01:2181,vampire02:2181,vampire03:2181</value>
</property>
<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的状态信息存储在zookeeper集群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
三、分发配置文件
将yarn-site.xml分发到其他两台
scp etc/hadoop/yarn-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/
scp etc/hadoop/yarn-site.xml vampire03:/opt/modules/hadoop-2.5.0/etc/hadoop/
四、启动ResourceManagere
在rm1(PC2)上:
sbin/start-yarn.sh
在rm2(pc3)上单独启动:
sbin/yarn-daemon.sh start resourcemanager
PC1
jps
5468 DataNode
5934 NodeManager
5653 JournalNode
5820 DFSZKFailoverController
5371 NameNode
3586 QuorumPeerMain
6058 Jps
|
PC2
jps
5023 NodeManager
4825 DFSZKFailoverController
4554 NameNode
4621 DataNode
4714 JournalNode
5359 Jps
4927 ResourceManager
3633 QuorumPeerMain
|
PC3
$ jps
3792 DataNode
3986 NodeManager
3881 JournalNode
4178 Jps
4120 ResourceManager
3231 QuorumPeerMain
|
Hadoop Ha集群配置相关推荐
- HADOOP HA之NameNode HA集群配置与应用
目录 前言 一.HADOOP HA之NameNode HA集群配置 1.修改hadoop-env.sh 2.修改core-site.xml 3.修改hdfs-site.xml 4.修改workers ...
- (超详细)基于Zookeeper的Hadoop HA集群的搭建
基于Zookeeper的Hadoop HA集群的搭建 JunLeon--go big or go home 前言: 高可用(high availability,HA)指的是若当前工作中的机器宕机了,系 ...
- 虚拟机CentOS 7.5.1804下无外网Hadoop HA集群安装
网上有很多Hadoop HA集群安装的资料,我当时安装也是参考了官方文档和这些资料才安装成功的.由于使用的环境和软件版本可能有所不同,且因工作环境网络所限无法连接外网,加之记录一下自己的安装过程,不枉 ...
- (五)Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装
目录 一.目的及要求: 实验目的: 实验要求: 二.环境要求: 集群规划: 三.具体步骤: 项目一:Hadoop的基本安装配置 项目二:Hadoop高可用完全分布模式配置 项目三:同步安装和配置 项目 ...
- Hadoop HA集群的搭建
HA 集群搭建的难度主要在于配置文件的编写, 心细,心细,心细! ha模式下,secondary namenode节点不存在... 集群部署节点角色的规划(7节点) ----------------- ...
- Hadoop HA集群配置问题记录
打算用3个节点搭建一个HA 集群,规划如下 HA集群规划 NameNode DataNode JournalNode node1 是 是 是 ndoe2 是 是 是 node3 是 是 hdf ...
- 十二、Hadoop HA集群高可用配置
官网地址:http://hadoop.apache.org/ 一.HA概述 1.所谓HA(High Available),即高可用(7*24小时不中断服务). 2.实现高可用最关键的策略是消除单点故障 ...
- Hadoop集群搭建(五:Hadoop HA集群模式的安装)
实验 目的 要求 目的: 1.Hadoop的高可用完全分布模式的安装和验证 要求: 完成Hadoop的高可用完全分布模式的安装: Hadoop的相关服务进程能够正常的启动: HDFS能够正常的使用: ...
- 基于ZooKeeper的Hadoop HA集群搭建
集群的规划 Zookeeper集群: 192.168.142.12 (bigdata12) 192.168.142.13 (bigdata13) 192.168.142.14 (bigdata14) ...
最新文章
- 安装MHA中清理Relay log报错
- POJ-1273(最大流-Augment Path,EK,BFS)
- 4-1 图像特效介绍
- 错误 - 无法访问IIS元数据库
- 网络数据注入工具HexInject
- 错误处理:安装torch-sparse、torch-spline、torch-scatter、torch-cluster
- 【干货】女性社区应该如何抵御垃圾男
- 使用通用mapper实现条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了...
- 详解string容器(应用+模拟实现,string练习题)
- ClickHouse入门
- uuid java 重复_Java中使用UUID工具类生成唯一标志防止重复
- MySQL 修改字段
- 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值
- JS 幻灯片代码(含自动播放)
- 【计算机网络知识扫盲】十二、★Net命令详解☆
- 门锁MCU OTA升级指导文档
- vue:如何设计网页的微信扫码登录功能
- hue oozie rerun使用问题记录
- 国际禁毒日 | 和TcaplusDB一起向毒品say NO!
- 程序员月入百万的真相!
热门文章
- mcreator安装教程
- 入职体检(三甲医院)
- 磁链Ψ、磁通φ、磁势F
- MIT视频新研究:让7000多人看了48个广告,发现「眼见为实」并不成立
- 【JavaScript】- 打地鼠游戏(定时器嵌套延时器)
- Java 8 新特性
- 【LeetCode】1160. 拼写单词(C++)
- ES6, ES7, ES8, ES9 以及 ES10 新特征
- python爬取当当图片和信息
- 爬取贴吧上的图片到本地