Hadoopd 的 Configuration 对象与参数设置

分享 Anonymous ⋅ 于 2017-01-21 20:54:08 ⋅ 最后回复由 青牛 2017-01-21 22:20:14 ⋅ 7083 阅读

一、介绍

我们在使用MapReduce框架进行开发时,总会使用到Configuration类的一个实例对象去初始化一个人任务,然后进行任务提交,而在整个任务执行过程中,客户点实例化的Configuration的对象,将作为整个任务过程中参数版本,任务执行过程中所需要的所有参数都是从客户端实例化的Configuration对象中进行获取。下面详细介绍一下Configuration的参数过程。

二、初始化过程

Configuration初始化时主要两步:读取默认文件和读取site级别的文件。

1、读取默认文件

Configuration初始化过程中,首先会读取整个CLASSPATH中的CORE-DEFAULT.XML、HDFS-DEFAULT.XML、YARN-DEFAULT.XML以及想起默认配置文件,这些文件需要用需要进行添加就已经存在项目的CLASSPATH中,因为这些文件存储在MR开发的依赖Jar文件中,用户不需要操心这一部分默认配置文件。

(1)yarn-default.xml文件在hadoop-yarn-common-version.jar文件的根目录下


(2)mapred-default.xml文件在hadoop-mapreduce-client-core-version.jar 文件的根目录下


(3)core-default.xml文件在Hadoop-common-version.jar 文件根目录下


(4)hdfs-default.xml文件在 hadop-hdfs-version.jar文件根目录下

这几个default级别的文件中包含了Hadoop集群最基本也是默认的配置,下面借去了core-default.xml文件的一部分:


我截取的部分中包括了fs.defaultFS属性,该属性也是我们在搭建HDFS集群时的重要参数,相信有过搭建经理的人对这个参数应该很熟悉。

当Configuration对象对所有的default.xml文件读取完成后,整个Hadoop的参数配置基本航都已经加载完成,但是这些参数的值都是默认值。

2、读取site级别的文件

我们在搭建Hadoop集群时,会通过配置HADOOP_HOME/etc/hadoop/*-site.xml 文件去设置集群参数想,这里的site级别的文件就是指HADOOP_HOME/etc/hadoop文件夹下的带有site的文件。


这些site级别的文件也会被加载到CLASSPATH中,然后Configuration对象才能够进行加载。

# Allow alternate conf dir location.
if [ -e "${HADOOP_PREFIX}/conf/hadoop-env.sh" ]; then
  DEFAULT_CONF_DIR="conf"
else
  DEFAULT_CONF_DIR="etc/hadoop"
fi

export HADOOP_CONF_DIR="${HADOOP_CONF_DIR:-$HADOOP_PREFIX/$DEFAULT_CONF_DIR}"# CLASSPATH initially contains $HADOOP_CONF_DIR
CLASSPATH="${HADOOP_CONF_DIR}"
# CLASSPATH initially contains $HADOOP_CONF_DIR
CLASSPATH="${HADOOP_CONF_DIR}"

Hadoop在启动时,会通过这两段代码,讲HADOOP_HOME/etc/hadoop文件夹指定到classpath变量中,然后加载到JVM中,这样etc/hadoop下的所有文件都加载到了classpath下。所以当我们在进行MapReduce开发过程时,可以将集群的site级别的配置文件加载到 项目的src根目录下,这样就可以实现远程提交了。如果如果根目录下没有site级别的文件,不会进行报错,当然也无法 加载相应的值。

三、设置参数与加载顺序

1、参数设置

当Configuration初始化时,讲defalut级别的配置和site级别的配合加载到了Configuration对象中,这时如果我们还想要修改Configuration对象的值时,可以使用Configration对象的set(key,value)方法进行设置。但是Configuration对象的参数分为可设置参数和不可设置参数两种:

(1)不可设置参数

不可设置参数不是代表这种参数不可以被设置,只是设置了以后不会有作用。这类参数一般都是集群的设置参数,例如集群的可利用内存与CPU核数的两个参数:

yarn.nodemanager.resource.memory-mb
yarn.nodemanager.resource.cpu-vcores

上述两个参数指的是datanode节点,yarn占用节点的内存数量与CPU的核数,因为这个参数是集群参数,如果设置了只有在集群重启后才会生效,因此用户在MR任务中设置该数据是无效的。

(2)可设置参数

mapreduce.map.memory.mb
mapreduce.map.cpu.vcores

这类参数主要是涉及到HDFS的文件参数,MR任务的单个任务的内存大小或者是CPU核数。这类参数能够在MR开发过程中进行设置,MR在运行过程中会读取并发生相应的表换。

2、加载顺序

Configuration 设置的参数是具有一定顺序并进行加载的: default.xml < site.xml < configuration.set  。

Configuration 在进行参数加载时,首先会加载 default.xml 文件内容,设置好所有的默认值,然后加载site.xml文件,然后site.xml 文件中的参数值将覆盖default.xml 文件中的值,最后Configuration.set() 方法会对已经加载site.xml和default.xml文件的configutaion对象进行修改。

(1)default.xml 类文件是第一次设置

(2)site.xml 类文件是第二次设置

(3)Configuration.set 方法会进行第三次设置

四、任务的Configuration对象信息的存储

当用户提交任务后,Configuration对象的值被序列化以后存储在HDFS上,我们可以在hdfs文件系统的 /tmp 文件夹下找到相应的Configuration对象。这里简单的介绍是Configuration对象存储在hdfs上也是任务提交的一部分,以后会详细介绍MR任务进行远程提交的过程。

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-Anonymous,http://hainiubl.com/topics/47
本帖由 青牛 于 7年前 解除加精
回复数量: 1
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2017-01-21 22:20:14

    刚讨论完的问题,你就整理出文章来,不错啊。

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter