接着昨天的继续看hadoop-yarn-api,昨天看了api package下的4个协议,今天来看下con package下的代码
conf目录下的内容比较少,就4个文件分别是ConfigurationProvider, ConfigurationProviderFactory,HAUtil以及YarnConfiguration
 
首先来看YarnConfiguration这个类:

图1 YarnConfiguration 方法截图
 
 
YarnConfiguration 类中的方法 方法功能
YarnConfiguration() 默认的无参构造函数,调用父类Configuration的构造函数
YarnConfiguration(Configuration) 指定reload一个YarnConfiguration 这里需要传的是YarnConfiguration的实例
getClusterId(Configuration) 获得YarnConfiguration中的RM_CLUSTER_ID,如果没有,抛出一个HadoopILLegalArgumentException
getRMDefaultPortNumber(String,Configuration) 根据传来的String参数,取出YarnConfiguration中对应的端口号
getServiceAddressConfKeys(Configuration) 根据是使用http还是https获得服务地址的ConfKeys。无论是http或者https都含有RM_ADDRESS,RM_SCHEDULER_ADDRESS,RM_ADMIN_ADDRESS,RM_RESOURCE_TRACKER_ADDRESS。只是他们的RM_WEBAPP_ADDRESS不同,后者是RM_WEBAPP_HTTPS_ADDRESS
userHttps(Configuration) 是否使用Https服务
addDeprecatedKeys() 加入过期的Keys
getSocketAddr(String,String,int) 获得name指定的socket地址属性,在HA集群上得到的结果是RM_HA_ID表示的结果
updateConnectAddr(String,InetSocketAddress) 更改连结地址(里面的具体实现是使用HAUtil的addSuffix 和 getRMHAId方法)。先使用getRMHAId 得到当前的RMId,如果id为null或者为空串,那么返回就调用父类的updateConnectAddr ,如果不为null,并且不含有特殊字符’.’那么将二者拼接,然后调用父类的方法
 
YarnConfiguration 主要是继承了org.apache.hadoop.conf中的Configuration类,上述表格中的最后两个是成员方法,剩下的都是静态方法。在Configuration中实现了特别多的方法。在一个静态块中加载core-default.xml文件和core-site.xml文件,主要就是管理一堆的KV。
 
HAUtil里面全是HA的一些辅助静态方法
 
ConfigurationProvider是一个抽象类,需要子类去实现里面的方法:

图2 ConfigurationProvider方法截图
 
ConfigurationProviderFactory类中只有一个方法,如下所示:
/**
 * Factory for {@link ConfigurationProvider} implementations.
 */
public class ConfigurationProviderFactory {
  /**
   * Creates an instance of {@link ConfigurationProvider} using given
   * configuration.
   * @param bootstrapConf
   * @return configurationProvider
   */
  @SuppressWarnings("unchecked")
  public static ConfigurationProvider
      getConfigurationProvider(Configuration bootstrapConf) {
    Class<? extends ConfigurationProvider> defaultProviderClass;
    try {
      defaultProviderClass = (Class<? extends ConfigurationProvider>)
          Class.forName(
              YarnConfiguration.DEFAULT_RM_CONFIGURATION_PROVIDER_CLASS);
    } catch (Exception e) {
      throw new YarnRuntimeException(
          "Invalid default configuration provider class"
              + YarnConfiguration.DEFAULT_RM_CONFIGURATION_PROVIDER_CLASS, e);
    }
    ConfigurationProvider configurationProvider =
        ReflectionUtils.newInstance(bootstrapConf.getClass(
            YarnConfiguration.RM_CONFIGURATION_PROVIDER_CLASS,
            defaultProviderClass, ConfigurationProvider.class),
            bootstrapConf);
    return configurationProvider;
  }
}
 
这里面通过反射机制提供了一个默认的ConfigurationProvider(org.apache.hadoop.yarn.LocalConfigurationProvider)无效就抛异常。
找到 LocalConfigurationProvider这个文件,里面的代码如下所示:
public class LocalConfigurationProvider extends ConfigurationProvider {

@Override
  public InputStream getConfigurationInputStream(Configuration bootstrapConf,
      String name) throws IOException, YarnException {
    if (name == null || name.isEmpty()) {
      throw new YarnException(
          "Illegal argument! The parameter should not be null or empty");
    } else if (YarnConfiguration.RM_CONFIGURATION_FILES.contains(name)) {
      return bootstrapConf.getConfResourceAsInputStream(name);
    }
    return new FileInputStream(name);
  }

@Override
  public void initInternal(Configuration bootstrapConf) throws Exception {
    // Do nothing
  }

@Override
  public void closeInternal() throws Exception {
    // Do nothing
  }

}
它主要就判断name是否是capacity-schedular.xml,core-site.xml,yarn-site.xml,hadoop-policy.xml文件,如果是,那么直接调的是Configuration的getConfResourceAsInputStream方法,如果不是那么直接用name返回一个FileInputStream
 
而Configuration中的该方法最终调用classLoader的getResource方法返回一个URL,再通过
url.openStream()返回inputStream,这也解释了为什么hadoop需要配置classpath,如果没有配置这个,就Yarn来说压根取不到这些Configuraton的配置文件
 
 
 

Hadoop Yarn源码 - day2的更多相关文章

  1. Hadoop Yarn源码 - day1

    Hadoop 2.6.0下面的关于Yarn工程,如下所示,主要有以下七个module: hadoop-yarn-api:和外部平台交互的接口 hadoop-yarn-applications hado ...

  2. 获取hadoop的源码和通过eclipse关联hadoop的源码

    一.获取hadoop的源码 首先通过官网下载hadoop-2.5.2-src.tar.gz的软件包,下载好之后解压发现出现了一些错误,无法解压缩, 因此有部分源码我们无法解压 ,因此在这里我讲述一下如 ...

  3. Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)

    我们知道,如果想要在Yarn上运行MapReduce作业,仅需实现一个ApplicationMaster组件即可,而MRAppMaster正是MapReduce在Yarn上ApplicationMas ...

  4. Hadoop RPC源码分析

    Hadoop RPC源码分析 上一篇文章http://www.cnblogs.com/dycg/p/rpc.html 讲了Hadoop RPC的使用方法,这一次我们从demo中一层层进行分析. RPC ...

  5. Yarn源码分析之如何确定作业运行方式Uber or Non-Uber?

    在MRAppMaster中,当MapReduce作业初始化时,它会通过作业状态机JobImpl中InitTransition的transition()方法,进行MapReduce作业初始化相关操作,而 ...

  6. Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(二)

    本文继<Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)>,接着讲述MapReduce作业在MRAppMaster上处理总流程,继上篇讲到作业初始化之后的作 ...

  7. Hadoop编译源码

    Hadoop编译源码 克隆一个虚拟机 然后一步一步安装就行 安装所需:链接: https://pan.baidu.com/s/1jIZlQmi 密码: gggv 5.1 前期准备工作 1)CentOS ...

  8. YARN源码分析(一)-----ApplicationMaster

    转自:http://blog.csdn.net/androidlushangderen/article/details/48128955 YARN学习系列:http://blog.csdn.net/A ...

  9. 关于Yarn源码那些事-前传之ResourceManager篇(一)初始化

    在关于Yarn那些事的博客里,介绍的主要是针对任务提交的一个动态流程说明,而其中牵涉到的一些细节问题,必须通过Resourcemanager的启动和NodeManager的启动,来更好的说明. 而本系 ...

随机推荐

  1. [CF1067D]Computer Game[凸包/斜率优化+倍增+矩阵乘法]

    题意 你有 \(n\) 个任务,初始收益为 \(a\) ,共 \(t\) 轮游戏,每轮可以选择完成一个任务(可以做多次),完成之后可以给任意任务升级,升级之后的任务收益为 \(b\) ,每个任务还有完 ...

  2. 设计模式 笔记 中介者模式 Mediator

    //---------------------------15/04/27---------------------------- //Mediator 中介者模式----对象行为型模式 /* 1:意 ...

  3. Activity猫的一生-故事解说Activity生命周期

    大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图.翻译API,比较笼统含糊不清. 我就用故事来说一说: 有个人叫User,TA养了几只猫,有只猫叫Activity ...

  4. [Direct2D开发] 绘制网格

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.引言 最近在使用Direct2D进行绘制工作中,需要实现使用Direct2D绘制网格的功能.在网上查了很多资料,终于实 ...

  5. golang基础--类型与变量

    基础知识--类型与变量 基本类型 布尔型:bool 长度: 1字节 取值范围: false, true 注意事项: 不可以使用数字代表,不像 python中可是使用 1和0表示 整型: int/uin ...

  6. 第五次Scrum meeting

    第五次Scrum meeting 会议内容: 连接方面:确定封装成json的文本格式,尽量在满足在线组和手机客户端两组的情况下,降低自身的难度 测试方面:进行新一轮测试,主要测试程序的稳定性和可靠性, ...

  7. Struts2中 radio标签的详细使用方法

    首先在页面中引入struts标签库: <%@ taglib prefix="s" uri="/struts-tags"%> 在JSP页面中创建单选按 ...

  8. Spark 实践——用决策树算法预测森林植被

    本文基于<Spark 高级数据分析>第4章 用决策树算法预测森林植被集. 完整代码见 https://github.com/libaoquan95/aasPractice/tree/mas ...

  9. AIX上安装配置DB2

    在2台P550数据库主机上安装DB2 V8.2,两台数据库主机间进行数据库HA配置,实现数据库双机互备. 本文档编写以磁盘大小360G,数据库名CRAMS_JS为例. 设备准备 请系统管理员协助划分D ...

  10. [2017BUAA软工]提问回顾

    原博客链接 原问题1:有没有系统的方法来提高一开始的文档的设计后的质量呢 在之前的OO课程上,我已经深刻领会到了设计的重要性,而且在这次的团队开发中,我也是负责从需求分析到代码设计的转换,所以对设计这 ...