一、Hadoop单点故障问题如何解决

  Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题,该问题在很长时间内没有解决,这使得Hadoop在相当长时间内仅适合离线存储和离线计算。

  Hadoop 2.0内核由三个分支组成,分别是HDFS、MapReduce和YARN,而Hadoop生态系统中的其他系统,比如HBase、Hive、Pig等,均是基于这三个系统开发的。

 (1) HDFS:仿照google GFS实现的分布式存储系统,由NameNode和DataNode两种服务组成,其中NameNode是存储了元数据信息(fsimage)和操作日志(edits),由于它是唯一的,其可用性直接决定了整个存储系统的可用性;

 (2)YARN:Hadoop 2.0中新引入的资源管理系统,它的引入使得Hadoop不再局限于MapReduce一类计算,而是支持多样化的计算框架。它由两类服务组成,分别是ResourceManager和NodeManager,其中,ResourceManager作为整个系统的唯一组件,存在单点故障问题;

 (3)MapReduce:目前存在两种MapReduce实现,分别是可独立运行的MapReduce,它由两类服务组成,分别是JobTracker和TaskTraker,其中JobTracker存在单点故障问题,另一个是MapReduce On YARN,在这种实现中,每个作业独立使用一个作业跟踪器(ApplicationMaster),彼此之间不再相互影响,不存在单点故障问题。本文提到的单点故障实际上是第一种实现中JobTracker的单点故障。

  Hadoop中的HDFS、MapReduce和YARN的单点故障解决方案架构是完全一致的,分为手动模式和自动模式,其中手动模式是指由管理员通过命令进行主备切换,这通常在服务升级时有用,自动模式可降低运维成本,但存在潜在危险

  在Hadoop HA中,主要由以下几个组件构成:

  (1)MasterHADaemon:与Master服务运行在同一个进程中,可接收外部RPC命令,以控制Master服务的启动和停止;

  (2)SharedStorage共享存储系统active master将信息写入共享存储系统,而standby master读取该信息以保持与active master的同步,从而减少切换时间。常用的共享存储系统有zookeeper(被YARN HA采用)、NFS(被HDFS HA采用)、HDFS(被MapReduce HA采用)和类bookeeper系统(被HDFS HA采用)

  (3)ZKFailoverController:基于Zookeeper实现的切换控制器,主要由两个核心组件构成:ActiveStandbyElectorHealthMonitor,其中,ActiveStandbyElector负责与zookeeper集群交互,通过尝试获取全局锁,以判断所管理的master进入active还是standby状态;HealthMonitor负责监控各个活动master的状态,以根据它们状态进行状态切换。

  (4)Zookeeper集群:核心功能通过维护一把全局锁控制整个集群有且仅有一个active master。当然,如果ShardStorge采用了zookeeper,则还会记录一些其他状态和运行时信息。

  实现高可用性时,可能会出现的问题:

  (1)脑裂(brain-split):脑裂是指在主备切换时,由于切换不彻底或其他原因,导致客户端和Slave误以为出现两个active master,最终使得整个集群处于混乱状态。解决脑裂问题,通常采用隔离(Fencing)机制,包括三个方面:

    共享存储fencing:确保只有一个Master往共享存储中写数据。

    客户端fencing:确保只有一个Master可以响应客户端的请求。

    Slave fencing:确保只有一个Master可以向Slave下发命令。

  Hadoop公共库中对外提供了两种fenching实现,分别是sshfence和shellfence(缺省实现),其中sshfence是指通过ssh登陆目标Master节点上,使用命令fuser将进程杀死(通过tcp端口号定位进程pid,该方法比jps命令更准确),shellfence是指执行一个用户事先定义的shell命令(脚本)完成隔离。

  (2)切换对外透明:为了保证整个切换是对外透明的,Hadoop应保证所有客户端和Slave能自动重定向到新的active master上,这通常是通过若干次尝试连接旧master不成功后,再重新尝试链接新master完成的,整个过程有一定延迟。在新版本的Hadoop RPC中,用户可自行设置RPC客户端尝试机制、尝试次数和尝试超时时间等参数。

  HA解决的难度取决于Master自身记录信息的多少和信息可重构性,如果记录的信息非常庞大且不可动态重构,比如NameNode,则需要一个可靠性与性能均很高的共享存储系统,而如果Master保存有很多信息,但绝大多数可通过Slave动态重构,则HA解决方法则容易得多,典型代表是MapReduce和YARN。从另外一个角度看,由于计算框架对信息丢失不是非常敏感,比如一个已经完成的任务信息丢失,只需重算即可获取,使得计算框架的HA设计难度远低于存储类系统。

  datanode损坏如何恢复:

  关闭处于dead状态节点的相关hadoop进程:

    1、关闭datanode进程;sbin/hadoop-daemon.sh stop datanode2、关闭该节点yarn资源管理进程sbin/yarn-daemon.sh stop nodemanager

  重启dead状态节点的相关hadoop进程(同样适用于动态新增节点启动):

    1、重启回复datanode进程;sbin/hadoop-daemon.sh start datanode2、重启回复该节点yarn资源管理进程sbin/yarn-daemon.sh start nodemanager 3、使用jps命令查看重启进程情况

二、Hadoop的高可用性(从单点故障问题解决)

  (1)高可用性架构图如下所示。

  1、JN实现主备NN 间的数据共享(解决单点故障)

  主NameNode对外提供服务,备NameNode同步主NameNode元数据,以待切换,所有DataNode同时向两个NameNode汇报数据块信息(位置)

standby:备用namenode,完成了edits.log文件的合并产生新的fsimage,推送回ActiveNN

  2、基于Zookeeper自动切换方案

  ZooKeeper Failover Controller(zkfc):监控NameNode健康状态,并向Zookeeper注册NameNode,当主NameNode挂掉后,ZKFC(备)为NameNode竞争锁,获得ZKFC(备)锁的NameNode(备)变为active。

  3、ZKFC的作用

  健康检测:zkfc会周期性的向它监控的namenode(只有namenode才有zkfc进程,并且每个namenode各一个)发生健康探测命令,从而鉴定某个namenode是否处于正常工作状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于不健康的状态;

  会话管理:如果namenode是健康的,zkfc机会保持在zookeeper中保持一个打开的会话,如果namenode是active状态的,那么zkfc还会在zookeeper中占有一个类型为短暂类型的znode,当这个namenode挂掉时,这个znode将会被删除,然后备用的namenode得到这把锁,升级为主的namenode,同时标记状态为active,当宕机的namenode,重新启动,他会再次注册zookeeper,发现已经有znode了,就自动变为standby状态,如此往复循环,保证高可靠性,但是目前仅支持最多配置两个namenode.
  master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断哪个namenode为active状态。

  

namenode和datanode的高可用性和故障处理的更多相关文章

  1. hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍

    <ignore_js_op> 1)NameNode.DataNode和Client         NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间.集群 ...

  2. namenode和datanode 的namespaceID导致的问题

    namenode和datanode 的namespaceID导致,datanode无法正常的启动,经过查资料,解决的办法就是更改datanode的VERSION之中的namespace namenod ...

  3. NameNode与DataNode的工作原理剖析

    NameNode与DataNode的工作原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS写数据流程 >.客户端通过Distributed FileSyst ...

  4. Hadoop介绍-4.Hadoop中NameNode、DataNode、Secondary、NameNode、JobTracker TaskTracker

    Hadoop是一个能够对大量数据进行分布式处理的软体框架,实现了Google的MapReduce编程模型和框架,能够把应用程式分割成许多的 小的工作单元,并把这些单元放到任何集群节点上执行.在MapR ...

  5. HDFS体系结构(NameNode、DataNode详解)

    hadoop项目地址:http://hadoop.apache.org/ NameNode.DataNode详解 (一)分布式文件系统概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配 ...

  6. namenode和datanode机制

    转自:https://www.cnblogs.com/DarrenChan/p/6416043.html?utm_source=itdadao&utm_medium=referral 首先我们 ...

  7. 初识HDFS(10分钟了解HDFS、NameNode和DataNode)

    概览 首先我们来认识一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.它其实是将一个大文件分成若干块保存在不同服务器的多个节点中.通 ...

  8. 什么是NameNode和DataNode?他们是如何协同工作的?

    [学习笔记] 什么是NameNode和DataNode?他们是如何协同工作的? 马克-to-win @ 马克java社区:一个HDFS集群包含一个NameNode和若干的DataNode(start- ...

  9. 04 namenode和datanode

    namenode元数据管理 1.什么是元数据? hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>) 2.元数据由谁负责管理? namenod ...

随机推荐

  1. 九、SpringBoot集成Thymeleaf模板引擎

    Thymeleaf咋读!??? 呵呵,是不是一脸懵逼...哥用我的大学四级英文知识告诉你吧:[θaimlif]. 啥玩意?不会音标?...那你就这样叫它吧:“赛母李府”,大部分中国人是听不出破绽的.. ...

  2. Python 笔试集(4):True + True == ?

    目录 目录 前文列表 面试题True Ture 布尔值 布尔类型是特殊的整数类型 前文列表 Python 笔试集:什么时候 i = i + 1 并不等于 i += 1? Python 笔试集(1):关 ...

  3. delphi : 窗体的close,free,destroy

    一.我用application.create(TForm2,Form2)语句,创建了Form2,可是调用了Form2.close后,重新调用Form2.show. 刚才所创建的Form2仍然存在.问为 ...

  4. Apache hadoop namenode ha和yarn ha ---HDFS高可用性

    HDFS高可用性Hadoop HDFS 的两大问题:NameNode单点:虽然有StandbyNameNode,但是冷备方案,达不到高可用--阶段性的合并edits和fsimage,以缩短集群启动的时 ...

  5. python中的序列化和反序列化

    ~~~~~~滴滴,,什么是序列呢?可以理解为序列就是字符串.序列化的应用 写文件(数据传输) 网络传输 序列化和反序列化的概念   序列化模块:将原本的字典.列表等内容转换成一个字符串的过程就叫做序列 ...

  6. lnmp一键安装包卸载mysql,重新安装报错mysql57-community-release conflicts with mysql-community-release-el6-5.noarch

    环境:CentOS Linux release 7.6.1810 lnmp1.5 独立下载mysql仓库 wget -i -c http://dev.mysql.com/get/mysql57-com ...

  7. 15.永恒之蓝exp----

    永恒之蓝exp 2017年,影响于全世界 SMB ripid7官网获取ms17-010的exp信息 Rapid7: https://www.rapid7.com/db/modules/exploit/ ...

  8. 【Qt开发】V4L2 API详解 Camera详细设置

    Camera的可设置项极多,V4L2 支持了不少.但Sam之前对这些设置的用法和涵义都是在看videodev2.h中边看边理解,感觉非常生涩.直到写这篇blog时,才发现v4l2有专门的SPEC来说明 ...

  9. [转帖]探秘华为(二):华为和H3C(华三)的分道扬镳

    探秘华为(二):华为和H3C(华三)的分道扬镳 https://baijiahao.baidu.com/s?id=1620781715767053734&wfr=spider&for= ...

  10. [19/10/13-星期日] Python中的函数

    一.函数 # 第五章 函数 ## 函数简介(function) - 函数也是一个对象 - 对象是内存中专门用来存储数据的一块区域 - 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行 ...