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 ...
随机推荐
- [转]SQL Server建立应用程序安全性和程序角色
转自:http://dev.yesky.com/450/7619450.shtml 2007-10-22 14:00 来源:论坛整理 作者:luolina 责任编辑:幽灵·yesky Microsof ...
- POJ3414Pots
http://poj.org/problem?id=3414 题意 : 大意是说给你两个杯子的体积和一个目标体积,a,b,c,通过对a,b进行6种操作,调出c体积的水,6种操作分别是把a倒满,把b倒满 ...
- Selenium WebDriver 中鼠标和键盘事件分析及扩展(转)
本文将总结 Selenium WebDriver 中的一些鼠标和键盘事件的使用,以及组合键的使用,并且将介绍 WebDriver 中没有实现的键盘事件(Keys 枚举中没有列举的按键)的扩展.举例说明 ...
- eclipse配置jdk问题
1.JDK安装成功,eclipse也安装成功,这时候实际上是可以不配置JDK,因为系统已经默认给你配置好了,
- PowerDesinger逆向数据库物理模型及关系图
原文:PowerDesinger逆向数据库物理模型及关系图 利用PowerDesinger生成的数据库物理模型及关系图 收集五年的开发资料下载地址: http://pan.baidu.com/sha ...
- Shell 是个什么玩意
Shell的定义: 计算机分为软件和硬件,管理计算机硬件的是操作系统,也就是我们说的kernel,而这个核心是需要被保护起来的. 那我们如何通过软件与硬件进行沟通,让硬件执行我们要完成的指令呢? 这个 ...
- 区分int a() 和 int a
事因 #include <iostream> using namespace std; struct A { A(int) {} A() {} void fun() {}; }; int ...
- 剖析MapReduce 作业运行机制
包含四个独立的实体: · Client Node 客户端:编写 MapReduce代码,配置作业,提交MapReduce作业. · JobTracker :初始化作业,分配作业,与 TaskTra ...
- IOS数据类型
id – 动态对象类型.动态类型和静态类型对象的否定词汇为 nil. Class – 动态类的类型.它的否定词汇为 Nil.SEL – 选择器的数据类型(typedef):这种数据类型代表运行时的一种 ...
- [UVA796]Critical Links(割边, 桥)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...