Hadoop Configuration介绍
来源:互联网 发布:网络诈骗报警平台登录 编辑:程序博客网 时间:2024/06/05 06:11
配置信息来源
static{ // print deprecation warning if hadoop-site.xml is found in classpath ClassLoader cL = Thread.currentThread().getContextClassLoader(); if (cL == null) { cL = TestConf.class.getClassLoader(); } if(cL.getResource("hadoop-site.xml")!=null) { LOG.warn("DEPRECATED: hadoop-site.xml found in the classpath. " + "Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, " + "mapred-site.xml and hdfs-site.xml to override properties of " + "core-default.xml, mapred-default.xml and hdfs-default.xml " + "respectively"); }if(cL.getResource("core-default.xml")!=null) {LOG.warn("1:" + cL.getResource("core-default.xml")); } if(cL.getResource("core-site.xml")!=null) {LOG.warn("2:" + cL.getResource("core-site.xml")); } addDefaultResource("core-default.xml"); addDefaultResource("core-site.xml"); }通过红色新增代码可以发现,配置信息来自:
1、系统默认配置文件core-default.xml(位于hadoop-core-1.0.3.jar文件下);
2、项目classpath下的core-site.xml文件。
Configuration类的属性清单
LOG是记录日志的对象。
quietmode对应的是配置信息加载过程中是否属于静默(安静、不写日志)的模式,如果处于静默的模式下,则在配置信息加载的过程中的一些信息不会被记录在日志中,默认情况是设置为true的。
resources是一个对象数组,用于存放有关包含配置信息的对象。
finalParameter是所有配置值被声明为final的变量的一个集合。
loadDefault从表面字段上可以理解为是否要加载默认的配置。
REGISTRY是一个WeakHashMap,用于多有个对象的相关配置的注册对它们进行管理,弱哈希可以自动清除不在正常使用的键对应的条目。
defaultResources是一个CopyOnWriteArrayList的字符串数组,用于存储默认的配置资源名或者路径。
{…}是一个静态初始化块,用于加载默认的配置资源。
overlay则是进行覆盖的属性。
properties存储的是Configuration对象中的全部配置信息,它的类型是Properties的,这个类型是Java提供的对KV配置的一个属性集,提高了对KV配置参数的存储和操作方法。
classLoader主要是用于配置冲根据配置的参数构造相应的对象实例时提供上下文环境的类加载器
MAX_SUBST是设定对带有环境变量的值所能够深入解析的层次数,超出这个最大的层数的值将不能够解析。
varPat是一个对含有环境变量的值的进行转换的正则表达式对象,比如我们设定的一个路径变量的值为$HOME/data,那么这个变量就会以一定的规则把该变量的值分为字串$HOME和/data,之后会把$HOME解析成系统上的目录了。
构造方法
第二个是可以指定是否加载默认设置,默认为true,第三个是用一个configuration对象构造一个新的configuration对象。
添加配置资源的方法
分别是添加默认的或者指定的各种来源的配置资源,而reloadConfiguration()则是一个清除所有原有配置信息,以便于重新加载配置信息的方法,这可以在值的覆盖中或者用新的配置资源覆盖之前的配置资源的时候用到。
获取一些配置信息的set或者get方法和其他方法
set和get方法主要是获取各种参数值的方法,它的主要机制是通过getPros()调用loadResources(Properties,ArrayList,boolean)方法再调用loadResource(Properties,Object,boolean)加载配置资源中的配置信息,而set(String,String)和get(String)的方法中会调用getPros()方法获取当前Configuration对象的properties对象,如果该对象为空,则调用loadResources(Properties,ArrayList,boolean)方法加载配置信息,之后的其他get和set方法都是通过调用get(String)和set (String,String)方法来实现对配置信息的操作的。
substituteVars(String)是配合正则表达式对象对含有环境变量的参数值进行解析的方法
size()方法是获取配置信息大小的
clear()方法是用于清除配置信息的
IntegerRanges是一个关于整型数范围的内部类
iterator()是配置对象的一个迭代器
readFields(DataInput)、write(DataOutput)是因为Configuration类实现了Writable接口的实现方法,这样Configuration类就可以在集群中进行分发,使得同一个作业的所有节点上的配置信息都完全相同。测试类
package com.test.conf;import java.io.IOException;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import org.apache.hadoop.conf.Configuration;public class TestConfigration {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); //配置参数个数 System.out.println(conf.size()); //查看配置参数信息Iterator<Map.Entry<String, String>> it = conf.iterator(); while(it.hasNext()) { Entry<String, String> en = it.next(); String key = en.getKey(); String value = en.getValue(); System.out.println("key=" + key + " value=" + value); } conf.writeXml(System.out); //显示配置文件路径 System.out.println("\n\n" + conf.getResource("core-default.xml")); System.out.println("\n\n" + conf.getResource("core-site.xml"));System.out.println(conf.get("test")); conf.addResource("core-site-1.xml"); System.out.println(conf.get("test")); conf.set("test", "123"); System.out.println(conf.get("test"));}}core-site.xml<?xml version="1.0"?><configuration><property><name>test</name><value>abc</value><final>true</final></property></configuration>core-site-1.xml<?xml version="1.0"?><configuration><property><name>test</name><value>abc</value></property></configuration>输出:55key=io.seqfile.compress.blocksize value=1000000key=io.skip.checksum.errors value=falsekey=fs.checkpoint.size value=67108864key=fs.default.name1 value=file:///abckey=fs.s3n.impl value=org.apache.hadoop.fs.s3native.NativeS3FileSystemkey=fs.s3.maxRetries value=4key=webinterface.private.actions value=falsekey=fs.s3.impl value=org.apache.hadoop.fs.s3.S3FileSystemkey=hadoop.native.lib value=truekey=fs.checkpoint.edits.dir value=${fs.checkpoint.dir}key=ipc.server.listen.queue.size value=128key=fs.default.name value=file:///key=ipc.client.idlethreshold value=4000key=hadoop.tmp.dir value=/tmp/hadoop-${user.name}key=fs.hsftp.impl value=org.apache.hadoop.hdfs.HsftpFileSystemkey=fs.checkpoint.dir value=${hadoop.tmp.dir}/dfs/namesecondarykey=fs.s3.block.size value=67108864key=hadoop.security.authorization value=falsekey=io.serializations value=org.apache.hadoop.io.serializer.WritableSerializationkey=hadoop.util.hash.type value=murmurkey=io.seqfile.lazydecompress value=truekey=io.file.buffer.size value=4096key=io.mapfile.bloom.size value=1048576key=fs.s3.buffer.dir value=${hadoop.tmp.dir}/s3key=hadoop.logfile.size value=10000000key=fs.webhdfs.impl value=org.apache.hadoop.hdfs.web.WebHdfsFileSystemkey=ipc.client.kill.max value=10key=io.compression.codecs value=org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodeckey=topology.script.number.args value=100key=fs.har.impl value=org.apache.hadoop.fs.HarFileSystemkey=io.seqfile.sorter.recordlimit value=1000000key=fs.trash.interval value=0key=local.cache.size value=10737418240key=hadoop.security.authentication value=simplekey=hadoop.security.group.mapping value=org.apache.hadoop.security.ShellBasedUnixGroupsMappingkey=ipc.server.tcpnodelay value=falsekey=hadoop.security.token.service.use_ip value=truekey=fs.ramfs.impl value=org.apache.hadoop.fs.InMemoryFileSystemkey=ipc.client.connect.max.retries value=10key=hadoop.rpc.socket.factory.class.default value=org.apache.hadoop.net.StandardSocketFactorykey=fs.kfs.impl value=org.apache.hadoop.fs.kfs.KosmosFileSystemkey=fs.checkpoint.period value=3600key=topology.node.switch.mapping.impl value=org.apache.hadoop.net.ScriptBasedMappingkey=hadoop.logfile.count value=10key=hadoop.security.uid.cache.secs value=14400key=fs.ftp.impl value=org.apache.hadoop.fs.ftp.FTPFileSystemkey=fs.file.impl value=org.apache.hadoop.fs.LocalFileSystemkey=fs.hdfs.impl value=org.apache.hadoop.hdfs.DistributedFileSystemkey=ipc.client.connection.maxidletime value=10000key=io.mapfile.bloom.error.rate value=0.005key=io.bytes.per.checksum value=512key=fs.har.impl.disable.cache value=truekey=ipc.client.tcpnodelay value=falsekey=fs.hftp.impl value=org.apache.hadoop.hdfs.HftpFileSystemkey=fs.s3.sleepTimeSeconds value=10<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration><property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property><property><name>fs.default.name1</name><value>file:///abc</value></property><property><name>fs.webhdfs.impl</name><value>org.apache.hadoop.hdfs.web.WebHdfsFileSystem</value></property><property><name>hadoop.logfile.count</name><value>10</value></property><property><name>fs.har.impl.disable.cache</name><value>true</value></property><property><name>ipc.client.kill.max</name><value>10</value></property><property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property><property><name>hadoop.security.token.service.use_ip</name><value>true</value></property><property><name>io.mapfile.bloom.size</name><value>1048576</value></property><property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property><property><name>fs.s3.block.size</name><value>67108864</value></property><property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property><property><name>ipc.server.listen.queue.size</name><value>128</value></property><property><name>hadoop.util.hash.type</name><value>murmur</value></property><property><name>ipc.client.tcpnodelay</name><value>false</value></property><property><name>io.file.buffer.size</name><value>4096</value></property><property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property><property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property><property><name>fs.trash.interval</name><value>0</value></property><property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property><property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property><property><name>fs.checkpoint.size</name><value>67108864</value></property><property><name>fs.checkpoint.period</name><value>3600</value></property><property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property><property><name>hadoop.native.lib</name><value>true</value></property><property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property><property><name>ipc.client.connect.max.retries</name><value>10</value></property><property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property><property><name>fs.s3.maxRetries</name><value>4</value></property><property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property><property><name>hadoop.logfile.size</name><value>10000000</value></property><property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property><property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property><property><name>topology.script.number.args</name><value>100</value></property><property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property><property><name>ipc.client.connection.maxidletime</name><value>10000</value></property><property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec</value></property><property><name>hadoop.security.uid.cache.secs</name><value>14400</value></property><property><name>ipc.server.tcpnodelay</name><value>false</value></property><property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property><property><name>ipc.client.idlethreshold</name><value>4000</value></property><property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property><property><name>io.bytes.per.checksum</name><value>512</value></property><property><name>hadoop.security.group.mapping</name><value>org.apache.hadoop.security.ShellBasedUnixGroupsMapping</value></property><property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property><property><name>io.seqfile.lazydecompress</name><value>true</value></property><property><name>local.cache.size</name><value>10737418240</value></property><property><name>hadoop.security.authorization</name><value>false</value></property><property><name>hadoop.security.authentication</name><value>simple</value></property><property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property><property><name>io.skip.checksum.errors</name><value>false</value></property><property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property><property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property><property><name>webinterface.private.actions</name><value>false</value></property><property><name>fs.default.name</name><value>file:///</value></property></configuration>jar:file:/F:/java/_1_doc/hadoop/soft/lib_hbase/hadoop-core-1.0.3-1.jar!/core-default.xmlfile:/F:/eclipsews/testhadoop/bin/core-site.xmlabcabc12312/10/15 15:51:13 WARN conf.Configuration: core-site-1.xml:a attempt to override final parameter: test; Ignoring.
总结以下几点:
1. 需要提供各种的set和get方法,方便获取各种的配置参数值。
2. 灵活使用集合、垃圾回收机制,采用合理的存储数据结构处理线程同步问题,比如这里用到的弱哈希和CopyOnWriteArrayList,还有在对Configuration.class进行的加锁。
3. 分布式系统中的配置一定要实现序列化,这样才能在集群中保持配置信息的一致性,使得配置信息可以从流中来到流中去。
4. 一个分布式系统的配置方法应该是至少分为3层的:
第一层就是全局的默认配置(core-default.xml);
第二层是针对某个项目总体配置(core-site.xml);
第三层针对某个作业或任务进行特定设置(通过set配置文件方法或set属性方法)。
这三层的作用域不同,每一层都可以覆盖前一层的参数值(final标记的配置属性特例)。
5. addResource方法说明:增加配置文件只需要将配置文件名放入resources中,然后将properties清空,再次获取配置信息时(调用getProps())重新加载(延迟加载)配置文件信息。
public void addResource(String name) { addResourceObject(name); }private synchronized void addResourceObject(Object resource) { resources.add(resource); // add to resources reloadConfiguration(); }public synchronized void reloadConfiguration() { properties = null; // trigger reload finalParameters.clear(); // clear site-limits }private synchronized Properties getProps() { if (properties == null) { properties = new Properties(); loadResources(properties, resources, quietmode); if (overlay!= null) { properties.putAll(overlay); if (storeResource) { for (Map.Entry
- Hadoop Configuration介绍
- hadoop Configuration
- hadoop configuration print
- hadoop ganglia configuration
- 2.2 Hadoop Configuration详解
- Hadoop Configuration详解
- Hadoop Configuration详解
- Hadoop Configuration详解
- hadoop -- setup and configuration
- Hadoop Configuration详解
- Hadoop configuration详解
- Hadoop Configuration 源码详解
- hadoop之Configuration.java
- Commons Configuration 介绍
- Commons Configuration 介绍
- commons-configuration使用介绍
- hadoop源码之Configuration解析
- HADOOP集群配置(Configuration)
- android获取手机内部存储空间和外部存储空间 && 如何确定一个应用的安装位置
- Failed to acquire pid file '/usr/local/var/run/libvirtd.pid'问题
- goroutine背后的系统知识
- C/C++中利用空指针简化代码,提高效率
- CDLOD Terrain Paper
- Hadoop Configuration介绍
- X-Y Problem
- UVa:10069 Distinct Subsequences
- archive存取
- 黑马程序员——Map集合
- Hadoop 2.2.0 + HBase 0.96.1.1 + Hive 0.12.0 整合
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKCONSTRAINTS检查当前数据库中指定表上的指定约束或所有约束的完整性
- Android开发(7)数据库和Content Provider
- More Effective C++