为什么要配置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集群配置相关推荐

  1. HADOOP HA之NameNode HA集群配置与应用

    目录 前言 一.HADOOP HA之NameNode HA集群配置 1.修改hadoop-env.sh 2.修改core-site.xml 3.修改hdfs-site.xml 4.修改workers ...

  2. (超详细)基于Zookeeper的Hadoop HA集群的搭建

    基于Zookeeper的Hadoop HA集群的搭建 JunLeon--go big or go home 前言: 高可用(high availability,HA)指的是若当前工作中的机器宕机了,系 ...

  3. 虚拟机CentOS 7.5.1804下无外网Hadoop HA集群安装

    网上有很多Hadoop HA集群安装的资料,我当时安装也是参考了官方文档和这些资料才安装成功的.由于使用的环境和软件版本可能有所不同,且因工作环境网络所限无法连接外网,加之记录一下自己的安装过程,不枉 ...

  4. (五)Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

    目录 一.目的及要求: 实验目的: 实验要求: 二.环境要求: 集群规划: 三.具体步骤: 项目一:Hadoop的基本安装配置 项目二:Hadoop高可用完全分布模式配置 项目三:同步安装和配置 项目 ...

  5. Hadoop HA集群的搭建

    HA 集群搭建的难度主要在于配置文件的编写, 心细,心细,心细! ha模式下,secondary namenode节点不存在... 集群部署节点角色的规划(7节点) ----------------- ...

  6. Hadoop HA集群配置问题记录

    打算用3个节点搭建一个HA 集群,规划如下 HA集群规划   NameNode DataNode JournalNode node1 是 是 是 ndoe2 是 是 是 node3   是 是 hdf ...

  7. 十二、Hadoop HA集群高可用配置

    官网地址:http://hadoop.apache.org/ 一.HA概述 1.所谓HA(High Available),即高可用(7*24小时不中断服务). 2.实现高可用最关键的策略是消除单点故障 ...

  8. Hadoop集群搭建(五:Hadoop HA集群模式的安装)

    实验 目的 要求 目的: 1.Hadoop的高可用完全分布模式的安装和验证 要求: 完成Hadoop的高可用完全分布模式的安装: Hadoop的相关服务进程能够正常的启动: HDFS能够正常的使用: ...

  9. 基于ZooKeeper的Hadoop HA集群搭建

    集群的规划 Zookeeper集群: 192.168.142.12 (bigdata12) 192.168.142.13 (bigdata13) 192.168.142.14 (bigdata14) ...

最新文章

  1. 安装MHA中清理Relay log报错
  2. POJ-1273(最大流-Augment Path,EK,BFS)
  3. 4-1 图像特效介绍
  4. 错误 - 无法访问IIS元数据库
  5. 网络数据注入工具HexInject
  6. 错误处理:安装torch-sparse、torch-spline、torch-scatter、torch-cluster
  7. 【干货】女性社区应该如何抵御垃圾男
  8. 使用通用mapper实现条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了...
  9. 详解string容器(应用+模拟实现,string练习题)
  10. ClickHouse入门
  11. uuid java 重复_Java中使用UUID工具类生成唯一标志防止重复
  12. MySQL 修改字段
  13. 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值
  14. JS 幻灯片代码(含自动播放)
  15. 【计算机网络知识扫盲】十二、★Net命令详解☆
  16. 门锁MCU OTA升级指导文档
  17. vue:如何设计网页的微信扫码登录功能
  18. hue oozie rerun使用问题记录
  19. 国际禁毒日 | 和TcaplusDB一起向毒品say NO!
  20. 程序员月入百万的真相!

热门文章

  1. mcreator安装教程
  2. 入职体检(三甲医院)
  3. 磁链Ψ、磁通φ、磁势F
  4. MIT视频新研究:让7000多人看了48个广告,发现「眼见为实」并不成立
  5. 【JavaScript】- 打地鼠游戏(定时器嵌套延时器)
  6. Java 8 新特性
  7. 【LeetCode】1160. 拼写单词(C++)
  8. ES6, ES7, ES8, ES9 以及 ES10 新特征
  9. python爬取当当图片和信息
  10. 爬取贴吧上的图片到本地