hadoop配置文件还原_hadoop通过Configuration对象自定义配置文件
本帖最后由 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对象自定义配置文件相关推荐
- hadoop配置文件还原_hadoop配置文件详解,安装及相关操作
1. 在conf/hadoop-env.sh文件中增加:export JAVA_HOME=/home/Java/jdk1.6 2. 在conf/core-site.xml文件中增加如下内容: fs. ...
- (原)举例说明C#自定义配置文件app.config及如何读取配置内容(在app.config加入自定义的XML节点)?...
App.config文件如下: <?xml version="1.0" encoding="utf-8" ?> <configuration& ...
- 在运行hadoopdb\hive\hadoop源码时不能正确调用自定义core-site.xml等配置文件
一 前言 在hadoopdb\hive\hadoop源码中,会有很多的测试主程序 ,而这些测试主程序通常都要用到configuration,即 new JobConf(conf)时初始化configu ...
- hadoop java访问_Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群
上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat xxx ...
- C# 自定义配置文件
配置文件有两种设置方式,第一种是直接在网站根目录下的web.config中设置:第二种方式是自定义配置文件,在web.config中指定其他配置文件的路径. 第一种:除了在常用的appSettings ...
- spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...
SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件 一.概述 Spring Boot允许多种配置来源,官网是这样说的: Spring Boot使用一种非常特殊的Property ...
- Springboot-读取核心配置文件及自定义配置文件
读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...
- spring boot自定义配置文件
把一些可能会经常变动的东西写在配置文件中,可以增加程序的灵活性,避免多次改版发版. 在sping boot中除了自带的默认配置文件application.properties之外,我们还可以在reso ...
- Spring Boot基础学习笔记04:Spring Boot加载自定义配置文件
文章目录 零.学习目标 1.熟悉使用@PropertySource加载配置文件 2.熟悉使用@ImportResource加载XML配置文件 3.掌握使用@Configuration编写自定义配置类 ...
- Springboot 之 自定义配置文件及读取配置文件
读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...
最新文章
- LSM 优化系列(二)-- dCompaction: Speeding up Compaction of the LSM-Tree via Delayed Compaction
- facebook 直播_什么时候是在Facebook Live上直播的最佳时间? 我分析了5,000个Facebook帖子以找出答案。...
- python非官方的二进制扩展包下载地址
- OSI 七层参考模型
- PAT甲级1135 Is It A Red-Black Tree (30分):[C++题解]判断红黑树
- 探访火车票“守护者”:一卷票据值百万 压力大到失眠
- 华为性能服务器,服务器 性能
- python网站用什么数据库_PyMySQL数据库的使用
- android服务下载,android服务之bindService和unService中下载任务中的应用
- ipc$开启telnet
- app inventor2 打地鼠_春节越南旅行攻略必备手机APP推荐!旅游必备实用简单越南语...
- java基础——java基本运算
- js 高级 原型对象
- b+树 b-树的区别
- 增强 扫描王 源码_BlueScan:一款功能强大的蓝牙扫描器
- linux alias别名管理
- centos网卡错误Device eth0 does not seem to be present
- markdown文本居中
- html5 图形 标签,HTML5 canvas 标签介绍:定义图形
- 头颅ct有伪影_颅脑CT怎么看?正常和异常影像分别是什么
热门文章
- Atiitt 常见机器算法 理解 总结 目录 1. 机器学习的核心是“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测”	1 2. 1. 五大流派	2 2.1. ①符号主义:使用
- Atitit mvc框架的实现 mvc的原理demo v2 sbb.docx 目录 1. 原理流程,	1 1.1. 项目启动的时候启动mvc框架扫描,建立url 方法对应表	1 1.2. 执行ur
- Atitit 图像处理的摩西五经attilax总结
- paip.提升用户体验---WEB程序页面的手机及平板浏览器兼容支持
- 阿里云CentOS 7.4 使用Flask建站
- 最懂基金经理的第三方机构猫头鹰,到底是谁?
- 趋势:指数基金如何做大做强?
- 中基协会长洪磊:尽快制定大类资产配置管理办法 推非保本理财转型
- (转)密码学研究与区块链实践应该打破隔空喊话
- (转)NYU教授给写AI新闻的记者们写了一封推心置腹的信,你也应该读读