1. HDFS-HA工作机制
通过双NameNode消除单点故障
  1. HDFS-HA工作要点
1.元数据管理方式需要改变
内存中各自保存一份元数据;
Edits日志只有Active状态的NameNode节点可以做写操作;
两个NameNode都可以读取Edits;
共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现);
2.需要一个状态管理功能模块
实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split现象的发生。
3.必须保证两个NameNode之间能够ssh无密码登录
4.隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务
  1. HDFS-HA故障转移机制

如果断网,(单一 隔离Fence)则另一台zkfc不会贸然上线,防止脑裂
使用命令hdfs haadmin -failover手动进行故障转移,在该模式下,即使现役NameNode已经失效,系统也不会自动从现役NameNode转移到待机NameNode,下面学习如何配置部署HA自动进行故障转移。自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程,如图3-20所示。ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于ZooKeeper的以下功能:
1)故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。
2)现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。
ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程,ZKFC负责:
1)健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。
2)ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。
3)基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态。
配置HDFS-HA集群
配置core-site.xml
<configuration>
<!-- 把两个NameNode)的地址组装成一个集群mycluster -->
     <property>
        <name>fs.defaultFS</name>
         <value>hdfs://mycluster</value>
     </property>
     <!-- 指定hadoop运行时产生文件的存储目录 -->
     <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/ha/hadoop-2.7.2/data/tmp</value>
     </property>
</configuration>
配置hdfs-site.xml
<configuration>
  <!-- 完全分布式集群名称 -->
  <property>
     <name>dfs.nameservices</name>
     <value>mycluster</value>
  </property>
  <!-- 集群中NameNode节点都有哪些 -->
  <property>
     <name>dfs.ha.namenodes.mycluster</name>
     <value>nn1,nn2</value>
  </property>
  <!-- nn1的RPC通信地址 -->
  <property>
     <name>dfs.namenode.rpc-address.mycluster.nn1</name>
     <value>hadoop102:9000</value>
  </property>
  <!-- nn2的RPC通信地址 -->
  <property>
     <name>dfs.namenode.rpc-address.mycluster.nn2</name>
     <value>hadoop103:9000</value>
  </property>
  <!-- nn1的http通信地址 -->
  <property>
     <name>dfs.namenode.http-address.mycluster.nn1</name>
     <value>hadoop102:50070</value>
  </property>
  <!-- nn2的http通信地址 -->
  <property>
     <name>dfs.namenode.http-address.mycluster.nn2</name>
     <value>hadoop103:50070</value>
  </property>
  <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
  <property>
     <name>dfs.namenode.shared.edits.dir</name>
  </property>
  <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
  <property>
     <name>dfs.ha.fencing.methods</name>
     <value>sshfence</value>
  </property>
  <!-- 使用隔离机制时需要ssh无秘钥登录-->
  <property>
     <name>dfs.ha.fencing.ssh.private-key-files</name>
     <value>/home/zdsssg/.ssh/id_rsa</value>
  </property>
  <!-- 声明journalnode服务器存储目录-->
  <property>
     <name>dfs.journalnode.edits.dir</name>
     <value>/opt/ha/hadoop-2.7.2/data/jn</value>
  </property>
  <!-- 关闭权限检查-->
  <property>
     <name>dfs.permissions.enable</name>
     <value>false</value>
  </property>
  <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
  <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
</configuration>
拷贝配置好的hadoop环境到其他节点
启动HDFS-HA集群
1.    在各个JournalNode节点上,输入以下命令启动journalnode服务
  sbin/hadoop-daemon.sh start journalnode
2.    在[nn1]上,对其进行格式化,并启动
  bin/hdfs namenode -format
  sbin/hadoop-daemon.sh start namenode
3.    在[nn2]上,同步nn1的元数据信息
  bin/hdfs namenode -bootstrapStandby
4.    启动[nn2]
  sbin/hadoop-daemon.sh start namenode
6.    在[nn1]上,启动所有datanode
  sbin/hadoop-daemons.sh start datanode
7.    将[nn1]切换为Active
  bin/hdfs haadmin -transitionToActive nn1
  1. 查看是否Active
  bin/hdfs haadmin -getServiceState nn1
配置HDFS-HA自动故障转移
1.    具体配置
       (1)在hdfs-site.xml中增加
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>
       (2)在core-site.xml文件中增加
<property>
  <name>ha.zookeeper.quorum</name>
  <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
2.    启动
       (1)关闭所有HDFS服务:
sbin/stop-dfs.sh
       (2)启动Zookeeper集群:
bin/zkServer.sh start
       (3)初始化HA在Zookeeper中状态:
bin/hdfs zkfc -formatZK
       (4)启动HDFS服务:
sbin/start-dfs.sh
3.    验证
       (1)将Active NameNode进程kill
kill -9 namenode的进程id
       (2)将Active NameNode机器断开网络
service network stop
  1. YARN-HA工作机制
配置yarn-ha集群
1.    环境准备
(1)修改IP
(2)修改主机名及主机名和IP地址的映射
(3)关闭防火墙
(4)ssh免密登录
(5)安装JDK,配置环境变量等
       (6)配置Zookeeper集群
2.    规划集群
3.    具体配置
(1)yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--启用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!--声明两台resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop102</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop103</value>
    </property>
 
    <!--指定zookeeper集群的地址-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop102:2181,hadoop103:2181,hadoop104: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>
</configuration>
       (2)同步更新其他节点的配置信息
4.    启动hdfs
(1)在各个JournalNode节点上,输入以下命令启动journalnode服务:
sbin/hadoop-daemon.sh start journalnode
(2)在[nn1]上,对其进行格式化,并启动:
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode
(3)在[nn2]上,同步nn1的元数据信息:
bin/hdfs namenode -bootstrapStandby
(4)启动[nn2]:
sbin/hadoop-daemon.sh start namenode
(5)启动所有DataNode
sbin/hadoop-daemons.sh start datanode
(6)将[nn1]切换为Active
bin/hdfs haadmin -transitionToActive nn1
5.    启动YARN
(1)启动yarn
sbin/start-yarn.sh
(2)启动resourcemanager
sbin/yarn-daemon.sh start resourcemanager
(3)查看服务状态
bin/yarn rmadmin -getServiceState rm1
 

HDFS-HA高可用的更多相关文章

  1. Hadoop 2、配置HDFS HA (高可用)

    前提条件 先搭建 http://www.cnblogs.com/raphael5200/p/5152004.html 的环境,然后在其基础上进行修改 一.安装Zookeeper 由于环境有限,所以在仅 ...

  2. 大数据技术之HA 高可用

    HDFS HA高可用 1.1 HA概述 1)所谓HA(High Available),即高可用(7*24小时不中断服务). 2)实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA ...

  3. Hdfs的HA高可用

    1.Hdfs的HA高可用:保证Hdfs高可用,其实就是保证namenode的高可用,保证namenode的高可用的机制有两个,editlog共享机制+ZKFC.ZKFC就是ZookeeperFailO ...

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

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  5. 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 ...

  6. CentOS7+Hadoop2.7.2(HA高可用+Federation联邦)+Hive1.2.1+Spark2.1.0 完全分布式集群安装

    1 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.9.1 2.9.2 2.9.2.1 2.9.2.2 2.9.3 2.9.3.1 2.9.3.2 2.9.3.3 2. ...

  7. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  8. 大数据Hadoop的HA高可用架构集群部署

        1 概述 在Hadoop 2.0.0之前,一个Hadoop集群只有一个NameNode,那么NameNode就会存在单点故障的问题,幸运的是Hadoop 2.0.0之后解决了这个问题,即支持N ...

  9. HA 高可用集群概述及其原理解析

    HA 高可用集群概述及其原理解析 1. 概述 1)所谓HA(High Available),即高可用(7*24小时不中断服务). 2)实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件 ...

  10. Spark入门:第2节 Spark集群安装:1 - 3;第3节 Spark HA高可用部署:1 - 2

    三. Spark集群安装 3.1 下载spark安装包 下载地址spark官网:http://spark.apache.org/downloads.html 这里我们使用 spark-2.1.3-bi ...

随机推荐

  1. 混合现实开发教程unity2017

    共52节,MP4格式,英字,大小1GB 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主

  2. 项目中PO、PM的职责区分

    PO是product owner,是一个role,负责与stakeholders打交道,提炼stakeholders的需求,按照需求的价值以及紧急程度安排优先级.PO是一个角色,对product ba ...

  3. python—列表生成式

    #原始写法 l=[] for i in range(1,11): l.append(str(i).zfill(2)) print(l) #结果:['01', '02', '03', '04', '05 ...

  4. java 调用存储过程

    1.java 中调用pl/sql 中的存储过程 call 存储过程的名称(参数名称,参数名称)  在service 层中调用  存储过程  String  sql=" call  proc_ ...

  5. zyupload四种不同的PHP上传demo

    PHP结合zyupload多功能图片上传实例,支持拖拽和裁剪.可以自定义高度和宽度,类型,远程上传地址等. zyupload上传基本配置 1 $("#zyupload").zyUp ...

  6. python requests库网页爬取小实例:亚马逊商品页面的爬取

    由于直接通过requests.get()方法去爬取网页,它的头部信息的user-agent显示的是python-requests/2.21.0,所以亚马逊网站可能会拒绝访问.所以我们要更改访问的头部信 ...

  7. URL安全的Base64编码,解码

    Base64 可以将二进制转码成可见字符方便进行http传输,但是base64转码时会生成“+”,“/”,“=”这些被URL进行转码的特殊字符,导致两方面数据不一致. 我们可以在发送前将“+”,“/” ...

  8. BZOJ1058或洛谷1110 [ZJOI2007]报表统计

    BZOJ原题链接 洛谷原题链接 STL 本题可以直接使用\(\mathtt{STL\ multiset}\)水过去. 因为本题插入数的操作实际上就是将原数列分为\(n\)段,在每一段的末尾插入数,所以 ...

  9. GUI学习之三——QObject学习总结

    鉴于PyQt控件的继承关系,我们先学习PyQt控件的基类——QObject.  一.所有的QT对象的基类 我们先看一下PyQt里空间的继承关系,稍微改一下代码,显示出继承关系 from PyQt5.Q ...

  10. 1. String可调用方法

    class str(basestring): """ str(object='') -> string Return a nice string represent ...