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 ...
随机推荐
- window.open(url, "_black" , spec)
var url = "${request.contextPath}/test/openWindow.action?number="+number; var spec = " ...
- linux入门教程(二) 图形界面还是命令窗口
对于linux的应用,我想大多数都是用在服务器领域,对于服务器来讲真的没有必要跑一个图形界面.所以我们平时安装linux操作系统时往往是不安装图形界面的.说到这里也许你会有疑问,图形界面还能选择装或者 ...
- 使用wget和ftp共享文件
一.需求 有一个机器A,上面那有很多文件.现在新买一个机器B,不想用U盘复制,就想把A弄成个服务器,然后B登录到A,想要什么文件就下载什么文件. 二.Win7实现 A是Win7和Ubuntu双系统,首 ...
- *[topcoder]LongWordsDiv2
http://community.topcoder.com/stat?c=problem_statement&pm=13147 此题关键在于发现ABAB的组合最多有26*26种,可以穷举,然后 ...
- log4j的基本配置参数
转载:http://blog.csdn.net/fengyifei11228/article/details/6070006 log4j配置文件有三个主要的组件:Logger,Appender和Lay ...
- Orcle数据库查询练习复习:一
一.创建数据库和表 drop table student; create table student ( sid int, sname ), sage int, ssex ), snativeplac ...
- Android 在Intent中传递接口
总结:在Activity中不能用intent传递匿名接口,原因如下:Activity A中生成了匿名接口M, 这个接口的引用就在组Activity A中,Activity A会禁止接口M 序列化.因为 ...
- 【最新】最流行的java后台框架 springmvc mybaits 集代码生成器 SSM SSH
获取[下载地址] QQ: 313596790 [免费支持更新] A 代码生成器(开发利器);全部是源码 增删改查的处理类,service层,mybatis的xml,SQL( m ...
- JS对象基础
JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 访问对象的属性 属性是与对象相关的值. 访 ...
- 查看Linux服务器网络状态
ifconfig 用来显示所有网络接口的详细情况的,如:ip地址,子网掩码等. ethx是以太网网卡的名称. 配置文件在/etc/sysconfig/network-scripts/ifcfg-eth ...