本帖最后由 desehawk 于 2014-12-29 16:06 编辑

问题导读

1.hadoop如何自定义配置文件?

2.你认为自定义配置文件能带来什么好处?

3.Configuraion允许通过哪两种方式设置key/value格式的属性?

Hadoop提供了一个扩展性极好的key/value格式的配置管理器Configuration,你可以设置任意的属性名,并通过Configuration对象获取对应的属性值。

Hadoop Common中定义了Configuration的基本实现,其他模块/系统,比如MapReduce,HDFS,YARN,HBase等,均在这个基础实现基础上,实现了自己的Configuration,比如MapReduce中叫JobConf,HDFS中叫HdfsConfiguration,YARN中交YarnConfiguration,HBase中叫HBaseConfiguration,这些Configuration实现非常简单,他们继承基类Configuration,然后加载自己的xml配置文件,通常这些配置文件成对出现,比如MapReduce分别为mapred-default.xml和mapred-site.xml,HDFS分别为hdfs-default.xml,hdfs-site.xml。

Configuraion允许你通过两种方式设置key/value格式的属性,一种是通过set方法,另一种通过addResouce(String name),将一个xml文件加载到Configuration中。本文重点谈一下第二种使用过程中可能遇到的问题。大家请看下面一段代码:

Configuration conf = new Configuration();

conf.set(“xicheng.dong.age”, “200”)

conf. addResource(“Xicheng.xml”); //Xicheng.xml中设置了xicheng.dong.age为300

System.out.println(conf.get(“xicheng.dong.age”));// 此处会打印几呢?复制代码

该程序最后会输出200,而不是xicheng.xml中设置的300,为什么呢?因为当一个配置属性是用户通过set方法设置的时,该属性的来源将被标注为“programatically”,这样的属性是不能被addResource方法覆盖的,必须通过set方法覆盖或修改。在addResource实现中,首先会用指定的xml文件覆盖包含的所有属性,之后再还原“programmatically”来源的那些属性。

那么问题来了,假设你的客户端core-site.xml(创建Configuration对象时,该配置文件会被默认加载)中配置了属性xicheng.dong.age为300,而staging-hbase-site.xml中将其设成了400,那么接下来一段代码会打印什么结果呢?

Configuration conf = HBaseConfiguration.create(new Configuration());

conf. addResource(“staging-hbase-site.xml”);

System.out.println(conf.get(“xicheng.dong.age”));// 此处会打印几呢?复制代码

最后结果将是300,而不是400。

如果你把第一句:

Configuration conf = HBaseConfiguration.create(new Configuration());复制代码

改为

Configuration conf = HBaseConfiguration.create();复制代码

结果就是你预想的400,为什么呢?

这是由于HBaseConfiguration.create这个函数造成的,如果带了Configuration参数,则实现如下:

public static Configuration create(final Configuration that) {

Configuration conf = create();

merge(conf, that);

return conf;

}

public static void merge(Configuration destConf, Configuration srcConf) {

for (Entry e : srcConf) {

destConf.set(e.getKey(), e.getValue());

}

}复制代码

返回的Configuration中所有属性均是通过set方法设置的,这些所有属性均变成了” programatically”来源,之后便不可以被addResource覆盖了。

如果不带Configuration参数,HBaseConfiguration.create实现如下:

public static Configuration create() {

Configuration conf = new Configuration();

return addHbaseResources(conf);

}复制代码

所有属性的来源均为某个xml文件,比如”core-site.xml”,“hdfs-site.xml”等,这类属性是可以被addResource覆盖的。

总结

使用Hadoop Configuration进行编程的时候,当使用addResource加载xml中配置文件时,一些属性有可能不会被覆盖掉(注意,final的属性总是不可以覆盖),此时一定要注意。你可以使用Configuration中的toString查看各个xml文件的加载顺序,使用dumpConfiguration打印每个属性的来源及isFinal属性值

http://dongxicheng.org/mapreduce ... resource-isolation/

hadoop配置文件还原_hadoop通过Configuration对象自定义配置文件相关推荐

  1. hadoop配置文件还原_hadoop配置文件详解,安装及相关操作

    1. 在conf/hadoop-env.sh文件中增加:export JAVA_HOME=/home/Java/jdk1.6 2.  在conf/core-site.xml文件中增加如下内容: fs. ...

  2. (原)举例说明C#自定义配置文件app.config及如何读取配置内容(在app.config加入自定义的XML节点)?...

    App.config文件如下: <?xml version="1.0" encoding="utf-8" ?> <configuration& ...

  3. 在运行hadoopdb\hive\hadoop源码时不能正确调用自定义core-site.xml等配置文件

    一 前言 在hadoopdb\hive\hadoop源码中,会有很多的测试主程序 ,而这些测试主程序通常都要用到configuration,即 new JobConf(conf)时初始化configu ...

  4. hadoop java访问_Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群

    上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat xxx ...

  5. C# 自定义配置文件

    配置文件有两种设置方式,第一种是直接在网站根目录下的web.config中设置:第二种方式是自定义配置文件,在web.config中指定其他配置文件的路径. 第一种:除了在常用的appSettings ...

  6. spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...

    SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件 一.概述 Spring Boot允许多种配置来源,官网是这样说的: Spring Boot使用一种非常特殊的Property ...

  7. Springboot-读取核心配置文件及自定义配置文件

    读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...

  8. spring boot自定义配置文件

    把一些可能会经常变动的东西写在配置文件中,可以增加程序的灵活性,避免多次改版发版. 在sping boot中除了自带的默认配置文件application.properties之外,我们还可以在reso ...

  9. Spring Boot基础学习笔记04:Spring Boot加载自定义配置文件

    文章目录 零.学习目标 1.熟悉使用@PropertySource加载配置文件 2.熟悉使用@ImportResource加载XML配置文件 3.掌握使用@Configuration编写自定义配置类 ...

  10. Springboot 之 自定义配置文件及读取配置文件

    读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...

最新文章

  1. LSM 优化系列(二)-- dCompaction: Speeding up Compaction of the LSM-Tree via Delayed Compaction
  2. facebook 直播_什么时候是在Facebook Live上直播的最佳时间? 我分析了5,000个Facebook帖子以找出答案。...
  3. python非官方的二进制扩展包下载地址
  4. OSI 七层参考模型
  5. PAT甲级1135 Is It A Red-Black Tree (30分):[C++题解]判断红黑树
  6. 探访火车票“守护者”:一卷票据值百万 压力大到失眠
  7. 华为性能服务器,服务器 性能
  8. python网站用什么数据库_PyMySQL数据库的使用
  9. android服务下载,android服务之bindService和unService中下载任务中的应用
  10. ipc$开启telnet
  11. app inventor2 打地鼠_春节越南旅行攻略必备手机APP推荐!旅游必备实用简单越南语...
  12. java基础——java基本运算
  13. js 高级 原型对象
  14. b+树 b-树的区别
  15. 增强 扫描王 源码_BlueScan:一款功能强大的蓝牙扫描器
  16. linux alias别名管理
  17. centos网卡错误Device eth0 does not seem to be present
  18. markdown文本居中
  19. html5 图形 标签,HTML5 canvas 标签介绍:定义图形
  20. 头颅ct有伪影_颅脑CT怎么看?正常和异常影像分别是什么

热门文章

  1. Atiitt 常见机器算法 理解 总结 目录 1. 机器学习的核心是“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测” 1 2. 1. 五大流派 2 2.1. ①符号主义:使用
  2. Atitit mvc框架的实现 mvc的原理demo v2 sbb.docx 目录 1. 原理流程, 1 1.1. 项目启动的时候启动mvc框架扫描,建立url 方法对应表 1 1.2. 执行ur
  3. Atitit 图像处理的摩西五经attilax总结
  4. paip.提升用户体验---WEB程序页面的手机及平板浏览器兼容支持
  5. 阿里云CentOS 7.4 使用Flask建站
  6. 最懂基金经理的第三方机构猫头鹰,到底是谁?
  7. 趋势:指数基金如何做大做强?
  8. 中基协会长洪磊:尽快制定大类资产配置管理办法 推非保本理财转型
  9. (转)密码学研究与区块链实践应该打破隔空喊话
  10. (转)NYU教授给写AI新闻的记者们写了一封推心置腹的信,你也应该读读