Hadoop Configuration
Configuration的主要是加载配置文件,并储存在properties中。
细节内容不重复了,主要参考Hadoop技术内幕,Hadoop源代码,以及:
http://blog.csdn.net/zhoubangtao/article/details/25977561
- 整个资源的加载流程如下:

- 过程中遇到的问题:
- Java Io 学习:
- http://blog.csdn.net/yczz/article/details/38761237
- Document Builder使用:
- http://blog.csdn.net/redarmy_chen/article/details/12912065
- http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilder.html
- Java Io 学习:
package com.baidu.configuration; import java.io.IOException;
import java.io.InputStream;
import java.io.File;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.lang.System;
import java.util.Objects;
import java.util.Properties;
import java.net.URL; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException; public class Configuration { private Properties properties; /**
* 判断参数是否为空,并对url进行处理
* @param builder
* @param url
* @return
* @throws IOException
* @throws SAXException
*/
private Document parse(DocumentBuilder builder, URL url)
throws IOException, SAXException {
if (url == null) {
return null;
}
return parse(builder, url.openStream(), url.toString());
} /**
* 判断参数是否为空,实际调用Documentbuilder parse 函数
* @param builder
* @param is
* @param systemId
* @return
* @throws IOException
* @throws SAXException
*/
private Document parse(DocumentBuilder builder, InputStream is,
String systemId) throws IOException, SAXException {
if (is == null) {
return null;
}
try {
return (systemId == null) ? builder.parse(is) : builder.parse(is,
systemId);
} finally {
is.close();
}
} /**
* 获取 properties 对应key的value
* @param key
* @return
*/
public String get(String key) {
return properties.getProperty(key);
} public void addResource(String source_name) {
properties = new Properties();
loadResource(properties, source_name);
} /**
* 通过DocumentBuilder来解析xml文件, resource 直接使用了 Object 来代替,
* 实际就是一个字符串
* @param properties 储存的prpoerties
* @param resource xml文件的绝对路径
*/
public void loadResource(Properties properties, Object resource) {
try {
DocumentBuilderFactory docBuilderFactory
= DocumentBuilderFactory.newInstance(); //ignore all comments inside the xml file
docBuilderFactory.setIgnoringComments(true); //allow includes in the xml file
docBuilderFactory.setNamespaceAware(true);
try {
docBuilderFactory.setXIncludeAware(true);
} catch (UnsupportedOperationException e) {
System.out.println("Failed to set setXIncludeAware(true) for parser");
}
DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
Document doc = null;
Element root = null; if (resource instanceof String) { // a file resource
// Can't use FileSystem API or we get an infinite loop
// since FileSystem uses Configuration AP
//
//I. Use java.io.File instead.
File file = new File(((String)resource)).getAbsoluteFile();
if (file.exists()) {
doc = parse(builder, new BufferedInputStream(
new FileInputStream(file)), ((String)resource).toString());
}
} root = doc.getDocumentElement(); NodeList props = root.getChildNodes(); for (int i = 0; i < props.getLength(); i++) {
Node propNode = props.item(1); Element prop = (Element)propNode; if ("configuration".equals(prop.getTagName())) {
loadResource(properties, prop.getTagName());
} NodeList fields = prop.getChildNodes();
String attr = null;
String value = null; for (int j = 0; j < fields.getLength(); j++) {
Node fieldNode = fields.item(j);
if (!(fieldNode instanceof Element))
continue;
Element field = (Element)fieldNode;
if ("name".equals(field.getTagName()) && field.hasChildNodes())
attr = ((Text)field.getFirstChild()).getData().trim(); if ("value".equals(field.getTagName()) && field.hasChildNodes())
value = ((Text)field.getFirstChild()).getData().trim();
}
//System.out.println("name is " + attr);
//System.out.println("value is " + value);
properties.setProperty(attr, value);
} } catch (IOException e) {
e.printStackTrace();
} catch (DOMException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
} public static void main(String args[]) {
//System.out.println("Hello");
Configuration c = new Configuration();
c.addResource("test.xml"); String value = c.get("yarn.nodemanager.aux-services");
System.out.println(value);
} }
Hadoop Configuration的更多相关文章
- Hadoop学习日志- install hadoop
资料来源 : http://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm Hadoop 安装 创建新用户 $ su passwo ...
- Hadoop 学习笔记3 Develping MapReduce
小笔记: Mavon是一种项目管理工具,通过xml配置来设置项目信息. Mavon POM(project of model). Steps: 1. set up and configure the ...
- Hadoop入门进阶课程13--Chukwa介绍与安装部署
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
- Hadoop配置文件解析
Hadoop源码解析 2 --- Hadoop配置文件解析 1 Hadoop Configuration简介 Hadoop没有使用java.util.Properties管理配置文件, 也没有使 ...
- Hadoop学习笔记: sqoop配置与使用
sqoop即SQL-to-Hadoop,是一个把数据从关系型数据库导入到Hadoop系统中的工具(HDFS,HIVE和HBase),也可以将数据从Hadoop导入到关系型数据库.本文以sqoop 1. ...
- hadoop文件系统FileSystem详解 转自http://hi.baidu.com/270460591/item/0efacd8accb7a1d7ef083d05
Hadoop文件系统 基本的文件系统命令操作, 通过hadoop fs -help可以获取所有的命令的详细帮助文件. Java抽象类org.apache.hadoop.fs.FileSystem定义了 ...
- (转)单机上配置hadoop
哈哈,几天连续收到百度两次电话,均是利好消息,于是乎不知不觉的自己的工作效率也提高了,几天折腾了好久终于在单机上配置好了hadoop,然后也成功的运行了一个用例,耶耶耶耶耶耶. 转自:http://w ...
- 大数据平台搭建(hadoop+spark)
大数据平台搭建(hadoop+spark) 一.基本信息 1. 服务器基本信息 主机名 ip地址 安装服务 spark-master 172.16.200.81 jdk.hadoop.spark.sc ...
- Steps to Install Hadoop on CentOS/RHEL 6---reference
http://tecadmin.net/steps-to-install-hadoop-on-centosrhel-6/# The Apache Hadoop software library is ...
随机推荐
- **json_encode:让Json更懂中文(JSON_UNESCAPED_UNICODE)
我们知道, 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式, 还会在一定程度上增加传输的数据量. 代码如下: <?php echo ...
- HDU 1695 GCD (容斥原理+欧拉函数)
题目链接 题意 : 从[a,b]中找一个x,[c,d]中找一个y,要求GCD(x,y)= k.求满足这样条件的(x,y)的对数.(3,5)和(5,3)视为一组样例 . 思路 :要求满足GCD(x,y) ...
- 【转】Wireshark:“There are no interfaces on which a capture can be done ”
linux环境下 两种解决方案: 第一种方法:使用root用户登陆 xiaoshancun@xiaoshancun-VM500:~$ sudo wireshark 第二种方法 ...
- eclipse中clean操作中如何将validating除去
eclipse中去掉js validating方法:1. 删除.project文件中的 <buildSpec></buildSpec>中的:<buildCommand&g ...
- java retention注解
Retention注解 Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源 ...
- C语言复习笔记-17种小算法-解决实际问题
判断日期为一年中的第几天(考虑闰年) 1 /* 2 * 计算该日在本年中是第几天,注意闰年问题 3 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 4 * 特殊情况,闰年且 ...
- 基于Struts2框架实现登录案例
一,准备工作 1)新建web项目,并导入Struts2jar文件和配置web.xml文件. struts2 jar文件 web.xml文件 <?xml version="1.0&qu ...
- Android handler.obtainMessage()
在handler.obtainMessage()的参数是这样写的: Message android.os.Handler.obtainMessage(int what, int arg1, int a ...
- 机器学习 —— log-linear 模型
昨天刚刚解决了 logistic regression 之后今天又来了个有趣的家伙. logistic regression 很强大,但是也有它的弱点.它最大的弱点就是只能告诉你是或者不是,而无法告诉 ...
- 实例学习Bloom Filter
0. 科普1. 为什么需要Bloom Filter2. 基本原理3. 如何设计Bloom Filter4. 实例操作5. 扩展 0. 科普 Bloom Filter是由Bloom在1970年提出的一种 ...