第三章:小朱笔记hadoop之conf分析
一、Configurable
void setConf(Configuration conf);
//获取配置信息的方法:
Configuration getConf();
二、Configured
实现了Configurable接口,也就是必须实现接口中的两个方法,当然并不是直接实现的,而是调用Configuration类来实现的,这里我们如果希望自己实现Configurable接口也是可以的。Configured类的方法比较简单,主要是通过调用Configuration类的方法来完成接口方法的。
三、 Configuration
Hadoop 中的组件是根据以上 API 进行配置的。一个 Configuration 实例包括一系列名值对形式的配置属性。每个属性是一个 String 类型,值类型可以任何 java 基础类型或 String 等其他类型。配置属性可以从以下方式加载:
(1)通过名值对设置
(2)通过其他的 Configuration 配置
(3)通过 URL 配置
(4)通过 Path 配置(将会从本地读取)
需要注意的是,当多次使用 addResource 时,后面的属性会覆盖以前设置的非 final 属性, final 属性是不可以被覆盖的。同时 Configuration 实现了 Writable 接口,是可序列化的。
下面重点讨论Configuration类,这个类实现了两个接口:Iterable 迭代接口、Writable 序列化接口
主要属性:
(1)static代码段首先获得了当前线程的类加载器然后找到资源hadoop-site.xml,如果找到了这个资源文件,就会log出一段提示信息: 因为找到了hadoop-site.xml这个文件,那么core-default.xml、hdfs-default.xml、mapred- default.xml的文件中的配置信息将会被core-site.xml、hdfs-site.xml、mapred-site.xml三个文件中的 配置所取代,从这段日志中也可以看出*-site的配置文件的优先级要高于*-default文件。
(2)defaultResources是个CopyOnWriteArrayList的连续数组,这个CopyOnWriteArrayList类会在io包中具体分析,这个数组的目的是存储配置文件的名字而不是配置文件的全路径,配置文件指的就是上文中提到的xml文件。
(3)finalParameters存储所有被声明为final的参数
(4)loadDefault是布尔类型的变量意思是是否加载默认的配置信息,也就是上文中提到的三个default.xml中的配置
(5)LOG是用apache的logging包中的日志方式记录日志
(6)int MAX_SUBST = 20 是设定对带有环境变量的值所能够深入解析的层次数,超出这个最大的层数的值将不能够解析
(7)overlay属性类型变量,记录了进行覆盖的属性
(8)properties存储的是Configuration对象中读取到的全部配置信息
(9)布尔值quietmode: 对应的是配置信息加载过程是否属于默认的模式,如果属于默认的模式下也就是快速模式,则在配置信息加载的过程中的一些信息不会记录在日志中,这个值的作用是影响log的输出,当然也会影响一些异常的抛出。
(10)REGISTRY是一个WeakHashMap的变量,key为Configuration,value为Object,可以看出这个对象存储了不同对象的多个配置信息,弱HashMap可以自动清除不在正常使用的键对应的条目,发现如果这个值不是null会重新加载默认的配置文件中的信息。
(11)resources列表中存放了包含配置信息的对象。
(12)varPat对含有环境变量的值的进行转换的正则表达式对象。
//Hadoop在创建配置类的时候,考虑了三种资源: // //URL资源(网络资源,指的是一个链接); // //CLASSPATH资源(String形式); // //Hadoop文件系统中的Path资源(该资源是基于Hadoop的FileSystem的,使用斜线“/”作为分隔符,如果是绝对路径,应该以“/”开始) public class Configuration implements Iterable<Map.Entry<String,String>>, Writable { //LOG是记录日志的对象 private static final Log LOG = LogFactory.getLog(Configuration.class); //quietmode对应的是配置信息加载过程是否属于默认的模式,如果属于默认的模式下也就是快速模式,则在配置信息加载的过程中的一些信息不会记录在日志中 private boolean quietmode = true; /** * List of configuration resources. * resources是一个对象组,用于存放有关包含配置信息的对象。 */ private ArrayList<Object> resources = new ArrayList<Object>(); /** * List of configuration parameters marked <b>final</b>. * 是所有配置值被声明为final变量的集合 */ private Set<String> finalParameters = new HashSet<String>(); //是否加载默认配置 private boolean loadDefaults = true; /** * Configuration objects * 用于多有个对象的相关配置的注册对它们进行管理,弱哈希可以自动清除不再正常使用的键对应的条目 */ private static final WeakHashMap<Configuration,Object> REGISTRY = new WeakHashMap<Configuration,Object>(); /** * List of default Resources. Resources are loaded in the order of the list * entries * defaultResources用于存储默认的配置资源名或者路径 */ private static final CopyOnWriteArrayList<String> defaultResources = new CopyOnWriteArrayList<String>(); /** * Flag to indicate if the storage of resource which updates a key needs * to be stored for each key */ private boolean storeResource; /** * Stores the mapping of key to the resource which modifies or loads * the key most recently */ private HashMap<String, String> updatingResource; //如果是老版本的hadoop则加载配置文件hadoop-site.xml不是老版本则加载配置文件core-default.xml,core-site.xml static{ //print deprecation warning if hadoop-site.xml is found in classpath ClassLoader cL = Thread.currentThread().getContextClassLoader(); if (cL == null) { cL = Configuration.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"); } addDefaultResource("core-default.xml"); addDefaultResource("core-site.xml"); } //properties存储的是Configuration对象中的全部配置信息,类型Properties是Java提供的对KV配置的一个属性集,提高了对KV配置参数的存储和操作方法 private Properties properties; //overlay则是进行覆盖的属性 private Properties overlay; //主要是用于配置冲根据配 置的参数构造相应的对象实例时提供上下文环境的类加载器 private ClassLoader classLoader; { classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = Configuration.class.getClassLoader(); } } ............. }
主要方法:
(1)初始化方法:
Configuration() :默认构造函数
Configuration(boolean loadDefaults):是否加载默认配置的构造函数
Configuration(Configuration other):通过克隆其他的配置对象配置来构造自己,这个构造函数主要克隆了resources、properties、overlay和 finalParameters四个对象,克隆的时候加了线程锁,确保在同一个jvm下的单线程执行,这个也很容易理解,为了保证配置的统一。
(2)增加资源的方法:
addResource(InputStream in):通过inputstream流来增加资源
addResource(Path file):通过制定的path文件加载资源
addResource(String name):通过资源名称来加载资源
addResource(URL url):通过资源的url来加载资源
上述四个方法的实现都调用了
addResourceObject(Object resource)这个方法,这个方法的设计巧妙之处在于参数是Object类型,充分体现了面向对象设计中的李氏替换的原则,把资源全部加入 resources变量后调用reloadConfiguration()方法重新加载配置信息。
(3)设置资源属性的方法:
set(String name, String value):设置指定参数的值,因为是加载后设置,所以除了要在设置properties中设置以外还需要在overlay中设置,表明之前的属性被覆盖掉了。
setBoolean(String name, boolean value):设置参数的布尔值
setBooleanIfUnset(String name, boolean value) :如果指定的属性没设置,则设置值为指定的布尔值
其他的set方法基本大同小异
(4)取得资源属性的方法:
这些方法很多与set方法相似,就是取得设置的资源属性的值,还有一些是取得Configuration对象中属性的值。
(5)其他方法:
Properties getProps():获得properties对象和overlay对象中的属性配置
reloadConfiguration():清除properties和finalParameters以便于重新加载配置信息
substituteVars(String):上面的正则表达式对象对含有环境变量的参数值进行解析的方法
相关推荐
3. `hadoop-lzo-0.4.21-SNAPSHOT-sources.jar`:这个文件包含了Hadoop-LZO的源代码,对于开发者来说非常有用,因为可以直接查看源码来理解其内部工作原理,也可以方便地进行二次开发或调试。 集成Hadoop-LZO到你的...
赠送jar包:hadoop-yarn-api-2.5.1.jar; 赠送原API文档:hadoop-yarn-api-2.5.1-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.5.1.pom; 包含翻译后...
赠送jar包:parquet-hadoop-1.8.2.jar; 赠送原API文档:parquet-hadoop-1.8.2-javadoc.jar; 赠送源代码:parquet-hadoop-1.8.2-sources.jar; 赠送Maven依赖信息文件:parquet-hadoop-1.8.2.pom; 包含翻译后的API...
赠送jar包:hadoop-yarn-server-common-2.6.5.jar; 赠送原API文档:hadoop-yarn-server-common-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-server-common-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-...
Flink1.10.1编译hadoop2.7.2 编译flink-shaded-hadoop-2-uber
4. **日志查看**:插件集成了Hadoop作业的日志查看功能,开发者可以实时监控作业执行情况,定位并解决问题。 5. **调试功能**:这是一个非常重要的特性,用户可以设置断点,进行单步调试,查看变量值,从而有效地...
4. **配置文件**:修改`conf/core-site.xml`和`conf/hdfs-site.xml`配置文件,定义HDFS的相关参数,如默认的文件系统、NameNode地址等。 5. **启动Hadoop服务**:通过`sbin`目录下的脚本启动Hadoop的各个服务,如`...
赠送jar包:hadoop-yarn-server-applicationhistoryservice-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-applicationhistoryservice-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-...
赠送jar包:hadoop-mapreduce-client-jobclient-2.7.3.jar; 赠送原API文档:hadoop-mapreduce-client-jobclient-2.7.3-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-jobclient-2.7.3-sources.jar; 赠送...
Hadoop权威指南----读书笔记
赠送jar包:hadoop-common-2.7.3.jar; 赠送原API文档:hadoop-common-2.7.3-javadoc.jar; 赠送源代码:hadoop-common-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-common-2.7.3.pom; 包含翻译后的API文档...
赠送jar包:hadoop-yarn-api-2.6.5.jar; 赠送原API文档:hadoop-yarn-api-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.6.5.pom; 包含翻译后...
hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...
**Hadoop Core源码分析** Hadoop-core-0.20.2是Hadoop早期版本的核心组件,它包含了Hadoop的文件系统接口、分布式计算模型MapReduce以及其他的工具和库。在源码中,我们可以看到以下几个关键部分: 1. **HDFS接口*...
4. 在编辑环境变量窗口中,点击“新建”,然后添加`C:\hadoop\hadoop-2.6.0\bin`(假设你解压到了这个位置)。 5. 确认更改后,需要重启命令提示符或计算机使更改生效。 **配置Hadoop** 安装完成后,还需要配置...
hadoop-mapreduce-examples-2.6.5.jar 官方案例源码
Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...
3. **配置Hadoop**:在Hadoop的conf目录下,编辑`core-site.xml`,设置HDFS的默认FS(如`fs.defaultFS`为`hdfs://localhost:9000`),以及临时目录(如`hadoop.tmp.dir`为`C:\Hadoop\tmp`)。然后编辑`hdfs-site.xml...
Hadoop是一个基于Apache的开源大数据处理框架,广泛应用于大数据处理、数据分析和机器学习等领域。然而,在使用Hadoop时,经常会遇到一些常见的问题,这些问题可能会导致Hadoop集群无法正常工作或者性能下降。因此,...