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 ...
随机推荐
- SQLMap使用
http://www.freebuf.com/articles/web/29942.html http://sqlmap.org/ http://blog.csdn.net/zgyulongfei/a ...
- LOGSTASH再入门第一发
慢慢弄起来... 前年搞过,现在生疏了,再慢慢拾起来吧. 一些URL: https://www.elastic.co/downloads/logstash https://www.elastic.co ...
- Linux查看机器型号
dmidecode | grep “Product Name”
- *[hackerrank]Volleyball Match
https://www.hackerrank.com/contests/w1/challenges/volleyball-match 此题不错,首先可以看出是DP,S(x, y)= S(x - 1, ...
- VC error LNK2005 解决办法
error LNK2005: "int __cdecl VerifyVMR9(void)" (?VerifyVMR9@@YAHXZ) 解决办法 在 属性->配置属性-> ...
- maven 环境搭建 Myeclipse配置
一:Maven的下载安装 准备工作: 1)安装环境 Windows xp 2)需安装JDK ,并配置环境变量(略) 3) Maven版本3.0.5 4)下载地址:http://mirror.bit.e ...
- C程序的内存分配
一.预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. ...
- React-用Jest测试
一. 1.目录结构 二.代码 1.CheckboxWithLabel.jsx var React = require('react/addons'); var CheckboxWithLabel = ...
- Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目
原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...
- shell脚本 -d 是目录文件,那么-e,-f等说明
-e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L fil ...