Hadoop-2.6.0NodeManager Restart Recover实现分析(一)

一、简介

      This document gives an overview of NodeManager (NM) restart, a feature that enables the NodeManager to be restarted without losing the active containers running on the node. At a high level, the NM stores any necessary state to a local state-store as it processes container-management requests. When the NM restarts, it recovers by first loading state for various subsystems and then letting those subsystems perform recovery using the loaded state.

      这个是官网的介绍。NodeManager Restart Recover是Hadoop-2.6.0全面引入的一个新特性。它旨在实现NodeManager在不丢失Active Containers、Localized Resource、Applications等的情况下的重启,NodeManager会使用Leveldb记录Containers、Localized Resource、Applications等的关键请求状态,在NodeManager重启后实现状态恢复等。

二、开启

      如果要开启NodeManager重启特性,需要配置以下两个参数:

  <property>
    <description>Enable the node manager to recover after starting</description>
    <name>yarn.nodemanager.recovery.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>The local filesystem directory in which the node manager will
    store state when recovery is enabled.</description>
    <name>yarn.nodemanager.recovery.dir</name>
    <value>${hadoop.tmp.dir}/yarn-nm-recovery</value>
  </property>

三、实现范围

       NodeManager Restart Recover的实现范围如下:

      1、Localized Resource State Storage and Recovery
      2、Application State Storage and Recovery
      3、Container State Storage and Recovery
      4、NM Token State Storage and Recovery
      5、Container Token State Storage and Recovery
      6、Log Aggregation Recovery
      7、Auxiliary Service State Storage and Recovery 

四、实现分析

      1、NMStateStoreService引入

      首先,在NodeManager中,有一个NMStateStoreService组件,定义如下:

  private NMStateStoreService nmStore = null;

      这个NMStateStoreService组件就是NodeManager Restart Recover的具体实现,它实现了Containers、Localized Resource、Applications等关键事件状态的存储、恢复、删除的等;

      NMStateStoreService是一个抽象类,继承自AbstractService这个抽象服务,并在服务的serviceInit()、serviceStart()、serviceStop()等方法中分别调用了存储相关的initStorage(conf)、startStorage()、closeStorage()三个方法,分别完成存储的初始化、开始、结束等工作。

      以Applications为例,NMStateStoreService中定义了如下几个抽象方法:

  /**
   * Load the state of applications
   * @return recovered state for applications
   * @throws IOException
   */
  public abstract RecoveredApplicationsState loadApplicationsState()
      throws IOException;

  /**
   * Record the start of an application
   * @param appId the application ID
   * @param p state to store for the application
   * @throws IOException
   */
  public abstract void storeApplication(ApplicationId appId,
      ContainerManagerApplicationProto p) throws IOException;

  /**
   * Record that an application has finished
   * @param appId the application ID
   * @throws IOException
   */
  public abstract void storeFinishedApplication(ApplicationId appId)
      throws IOException;

  /**
   * Remove records corresponding to an application
   * @param appId the application ID
   * @throws IOException
   */
  public abstract void removeApplication(ApplicationId appId)
      throws IOException;

      这几个方法分别实现了应用的存储、已完成应用的存储、应用的删除、应用的加载(即恢复)等。大体流程是这样的,应用在NodeManager上初始化后即调用storeApplication()方法存储应用的状态(方便以后恢复),当ResourceManager指示Application完成后,storeFinishedApplication()方法被调用,以表明该Application已完成,而当NodeManager不再需要追踪该Application时,removeApplication()被调用以删除该Application的状态信息。最后,如果NodeManager需要重启,loadApplicationsState()方法被调用以实现需要恢复状态的Applications的状态恢复。

      2、NMStateStoreService实现

      NMStateStoreService组件的实现目前有两种:NMNullStateStoreService、NMLeveldbStateStoreService,而NMNullStateStoreService仅仅是空的NMStateStoreService组件,里面的上述关键方法,如initStorage(conf)、startStorage()、closeStorage()、storeApplication()等方法全部是空方法,而NMLeveldbStateStoreService则是上述参数配置后实现NodeManager Restart Recover的具体实现组件。

      3、NMStateStoreService初始化、启动与停止

      在NodeManager的serviceInit()方法中,有如下调用:

initAndStartRecoveryStore(conf);

      而initAndStartRecoveryStore()方法中,则会判断上述两个参数,完成NMStateStoreService的初始化,如下:

  private void initAndStartRecoveryStore(Configuration conf)
      throws IOException {
    boolean recoveryEnabled = conf.getBoolean(
        YarnConfiguration.NM_RECOVERY_ENABLED,
        YarnConfiguration.DEFAULT_NM_RECOVERY_ENABLED);
    if (recoveryEnabled) {
      FileSystem recoveryFs = FileSystem.getLocal(conf);
      String recoveryDirName = conf.get(YarnConfiguration.NM_RECOVERY_DIR);
      if (recoveryDirName == null) {
        throw new IllegalArgumentException("Recovery is enabled but " +
            YarnConfiguration.NM_RECOVERY_DIR + " is not set.");
      }
      Path recoveryRoot = new Path(recoveryDirName);
      recoveryFs.mkdirs(recoveryRoot, new FsPermission((short)0700));
      nmStore = new NMLeveldbStateStoreService();
    } else {
      nmStore = new NMNullStateStoreService();
    }
    nmStore.init(conf);
    nmStore.start();
  }

      当参数yarn.nodemanager.recovery.enabled配置成true时,NMStateStoreService初始化为NMLeveldbStateStoreService,并初始化存储路径yarn.nodemanager.recovery.dir,否则为NMNullStateStoreService。
      继而调用NMStateStoreService的init()和start()方法,完成初始化和启动。

      最后,当NodeManager服务停止时,在其serviceStop()方法中会调用stopRecoveryStore()方法,其会调用NMStateStoreService的stop()方法,停止存储服务。

      4、NMLeveldbStateStoreService实现分析

      在NMLeveldbStateStoreService中,具体实现请参阅《Hadoop-2.6.0NodeManager Restart Recover实现分析(二)》。

时间: 2024-09-11 08:08:46

Hadoop-2.6.0NodeManager Restart Recover实现分析(一)的相关文章

Hadoop-2.6.0NodeManager Restart Recover实现分析(二)

      继上篇<Hadoop-2.6.0NodeManager Restart Recover实现分析(二)>.       4.NMLeveldbStateStoreService实现分析       在       1).initStorage()       initStorage()方法中,完成了存储相关的初始化,如下: @Override protected void initStorage(Configuration conf) throws IOException { Pat

Hadoop RPC通信Client客户端的流程分析

Hadoop的RPC的通信与其他系统的RPC通信不太一样,作者针对Hadoop的使用特点,专门的设计了一套RPC框架,这套框架个人感觉还是有点小复杂的.所以我打算分成Client客户端和Server服务端2个模块做分析.如果你对RPC的整套流程已经非常了解的前提下,对于Hadoop的RPC,你也一定可以非常迅速的了解的.OK,下面切入正题. Hadoop的RPC的相关代码都在org.apache.hadoop.ipc的包下,首先RPC的通信必须遵守许多的协议,其中最最基本的协议即使如下: /**

Hadoop连载系列之六:数据收集分析系统Chukwa

系列几篇文章中介绍了分布式存储和计算系统Hadoop以及Hadoop集群的搭建.Zookeeper集群搭建.HBase分布式部署等.当Hadoop集群的数量达到1000+时,集群自身的信息将会大量增加.Apache开发出一个开源的数据收集和分析系统-Chukwa来处理Hadoop集群的数据.Chukwa有几个非常吸引人的特点:它架构清晰,部署简单;收集的数据类型广泛,具有很强的扩展性;与 Hadoop 无缝集成,能完成海量数据的收集与整理. 1 Chukwa简介 ----------------

hadoop源码怎么分析呢

问题描述 hadoop源码怎么分析呢 本人想分析下hadoop源码,请问怎么开始分析呢,推荐书或者方法吧. 解决方案 目前市场上书推荐的话 就看看 hadoop技术内幕吧 一共三卷,其他的书 感觉不太爽,华章的书籍,算不错吧, 书中分析了源码 不过是1.0 版本的. 根据书 分析起来比较快. 学习下并发编程是很不错的,有利于自己编码能力的提高,

SAS:多年分析经验让Hadoop更加强大

云计算.移动化.社交网络.大数据被公认为四大趋势,大数据则以挖掘数据中所蕴含的价值被大量用户所关注,随着大数据生态圈的形成和稳步发展,Hadoop已经成为大数据重要的平台.近日,在2014 SAS中国区用户大会上,SAS公司高层表示SAS希望利用多年在数据分析方面的经验让Hadoop集群平台更加强大. Hadoop 2.0版本在去年推出之后,最重要的变化就是将被人所诟病的Mapreduce框架升级为Apache YARN框架,大大扩展了Hadoop中应用软件种类和应用程度.SAS公司作为商业分析

Hunk助力全球组织实现便捷Hadoop分析(1)

2014年5月7日--日前,领先的实时运维智能软件供应商Splunk Inc.(NASDAQ:SPLK)宣布推出面向Hadoop与NoSQL Data Stores的6.1版HunkTM: Splunk? Analytics for Hadoop and NoSQL Data Stores.Hunk 6.1可以更快速.更便捷地将Hadoop与NoSQL 数据存储中的原始非结构化数据转化为商业洞察.Hunk的升级报告显着缩短了报告时间,同时交互式仪表板可提供丰富的自助分析,而无需固定模式或移动数据

《Hadoop实战第2版》——2.5节日志分析及几个小技巧

2.5 日志分析及几个小技巧如果大家在安装的时候遇到问题,或者按步骤安装完成却不能运行Hadoop,那么建议仔细查看日志信息.Hadoop记录了详尽的日志信息,日志文件保存在logs文件夹内.无论是启动还是以后会经常用到的MapReduce中的每一个Job,或是HDFS等相关信息,Hadoop均存有日志文件以供分析.例如:NameNode和DataNode的namespaceID不一致,这个错误是很多人在安装时都会遇到的.日志信息为: java.io.IOException: Incompati

洞悉大数据:Hadoop和云分析七大误解

七大误解:大数据与hadoop 对于Hadoop技术而言,可以说是开源领域的传奇,然而如今业界还伴随着一些流言,这些流言可能会导致IT高管们带着"有色"的观点去制定策略. 从IDC分析师报告中2013年数据存储上的增长速度将达到53.4%,AT&T更是声称无线数据的流量在过去的5年内增长200倍,从互联网内容.电子邮件.应用通知.社交消息以及每天接收的消息都在显着的增长,这也是众多大企业都聚焦大数据的原因所在. 毫无疑问,Hadoop成为解决大数据需求的主要投资领域之一,而类似

必读!大数据:Hadoop,业务分析及更多(2)

大数据处理和分析的新方法 存在多种方法处理和分析大数据,但多数都有一些共同的特点.即他们利用硬件的优势,使用扩展的.并行的处理技术,采用非关系型数据存储处理非结构化和半结构化数据,并对大数据运用高级分析和数据可视化技术,向终端用户传达见解. Wikibon已经确定了三种将会改变业务分析和数据管理市场的大数据方法. Hadoop Hadoop是一个处理.存储和分析海量的分布式.非结构化数据的开源框架.最初由雅虎的Doug Cutting创建,Hadoop的灵感来自于 MapReduce ,MapR