在启动hadoop集群的守护线程时,一定会加载并运行相关的class字节码文件。通过common模块和hdfs模块里的源码可以看到,它们读取了相关的配置文件。
hadoop-common-2.7.3-sources.jar下的org.apache.hadoop.conf.Configuration源文件的部分源码:
package org.apache.hadoop.conf; //类的全路径
public class Configuration implements Iterable>,
Writable {
static{
//print deprecation warning if hadoop-site.xml is found in classpath
ClassLoader cL = Thread.currentThread().getContextClassLoader();
........................
addDefaultResource("core-default.xml"); //加载common模块的默认配置文件
addDefaultResource("core-site.xml"); //加载个人配置的common配置文件
}
}
hadoop-hdfs-2.7.3-sources.jar下的org.apache.hadoop.hdfs.HdfsConfiguration源文件的部分源码:
package org.apache.hadoop.hdfs; //类的全路径
import org.apache.hadoop.conf.Configuration; //引用hadoop-common-2.7.3-sources.jar里的类
public class HdfsConfiguration extends Configuration {
static {
addDeprecatedKeys();
// adds the default resources
Configuration.addDefaultResource("hdfs-default.xml"); //#加载hdfs模块的默认配置文件
Configuration.addDefaultResource("hdfs-site.xml"); //加载个人配置的hdfs配置文件
}
}
那么,今天,我们就来了解一下hadoop的默认配置文件(core-default.xml、hdfs-default.xml、mapred-default.xml、yarn-default.xml)里的内容
打开这个文件后,有这样一个属性:hadoop.tmp.dir,默认设置的值为/tmp/hadoop-${user.name}。
hadoop.tmp.dir
/tmp/hadoop-${user.name}
在hadoop伪分布式集群下,经过格式化后,就会默认到/tmp/hadoop-${user.name}/下。这个路径格外的重要,很多其他路径的设置都要依赖于这个路径。我们来看看伪分布式下的内容:
/tmp/hadoop-hyxy
----dfs #与hdfs有关的文件存储位置
----name
----data
----mapred #与mr有关的文件存储位置
而将路径设置在/tmp下很不安全,Linux在重新启动时,很可能就删除这个路径下的文件。因此在安全分布式集群下,我们都会在etc/hadoop/core-site.xml重新设置这个路径。
在来看core-default.xml中的另一个比较重要的属性:fs.defaultFS
fs.defaultFS
file:///
这个属性的作用就是定义hdfs文件系统的主机和端口号的。不管在是伪分布式下,还是在完全分布式下,我们都会在etc/hadoop/core-site.xml配置文件里重新定义它的值。主机名可以使用ip,也可以使用主机名称。端口号我们可以自定义,不过在hadoop1.x版本默认使用的是9000,而在hadoop2.x中默认使用的是8020。value的值可以这样设置:
fs.defaultFS
hdfs://[ip|hostname]:port #配置时,请使用真实的ip、hostname、port
或者
fs.defaultFS
hdfs://[ip|hostname]/ #这种写法就会使用默认端口号
io.file.buffer.size
4096
这个属性设置的是集群在进行读写操作时,缓冲区的大小。默认是4K。
core-default.xml内的其余的属性,可以自行查看,这里不做讲解了。
dfs.namenode.name.dir
file://${hadoop.tmp.dir}/dfs/name
我们可以借助有道翻译,将每个属性的描述翻译一下,而这个属性,有道是这样翻译的:确定DFS名称节点应该在本地文件系统的何处存储名称表(fsimage)。如果这是一个以逗号分隔的目录列表,那么name表将复制到所有目录中,以实现冗余。这样的解释应该很清楚了吧,而且用到了core-default.xml/core-site.xml里的属性hadoop.tmp.dir。当然我们可以在etc/hadoop/hdfs-site.xml进行指定设置。
dfs.datanode.data.dir
file://${hadoop.tmp.dir}/dfs/data
用于定义DFS数据节点应将其块存储在本地文件系统的何处。如果这是一个以逗号分隔的目录列表,那么数据将存储在所有命名的目录中,通常存储在不同的设备上。对于HDFS存储策略,应该用相应的存储类型([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK])标记目录。如果目录没有显式标记存储类型,则默认存储类型为磁盘。如果本地文件系统权限允许,将创建不存在的目录。
可以在etc/hadoop/hdfs-site.xml进行指定设置。
dfs.replication
3
DFS上的数据库的副本数,缺省值是3。可以在创建文件时进行指定,如果没有指定,就使用缺省值。
dfs.blocksize
134217728
文件系统中的块大小,以字节为单位,如134217728表示128 MB。你也可以使用以下后缀(不区分大小写):k,m,g,t,p,e以指定大小(例如128k, 512m, 1g等)。
dfs.namenode.http-address
0.0.0.0:50070
dfs namenode web ui使用的监听地址和基本端口。可以在etc/hadoop/hdfs-site.xml进行指定设置。
dfs.webhdfs.enabled
true
在namenode和datanode中启用WebHDFS (REST API)。false表示不启用。
hdfs-default.xml配置文件内的其他属性,可以自行查看,这里就不一一介绍了。
当我们使用mapreduce程序时,hadoop集群就会读取该配置文件里的配置信息,我们来看几个比较重要的属性
mapreduce.framework.name
local
这个属性用于指定执行MapReduce作业的运行时框架。属性值可以是local,classic或yarn。我们可以在etc/hadoop/mapred-site.xml里来重新指定值。不过呢,在etc/hadoop/目录下没有mapred-site.xml文件,倒是有一个mapred-site.xml.template样板。我们可以复制一份,将名称改为mapred-site.xml。
mapreduce.jobhistory.address
0.0.0.0:10020
指定了查看运行完mapreduce程序的服务器的IPC协议的主机名和端口号。可以通过mapred-site.xml进行设置
mapreduce.jobhistory.webapp.address
0.0.0.0:19888
MapReduce JobHistory Server Web UI host:port
指定了使用webui查看mapreduce程序的主机名和端口号。可以通过mapred-site.xml进行设置。
mapred-default.xml配置文件内的其他属性,可以自行查看,这里就不一一介绍了。
如果在hadoop下指定使用了yarn,那么一定会读取yarn-default.xml这个配置文件。一起来看看里面的属性吧
yarn.nodemanager.aux-services
这个属性用于指定在进行mapreduce作业时,yarn使用mapreduce_shuffle混洗技术。这个混洗技术是hadoop的一个核心技术,非常重要。可以在yarn-site.xml里进行设置。
用于指定混洗技术对应的字节码文件。
yarn.nodemanager.aux-services.mapreduce_shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
用于指定resourcemanager的主机名
yarn.resourcemanager.hostname
0.0.0.0
用于指定在RM中的应用程序管理器接口的地址
yarn.resourcemanager.address
${yarn.resourcemanager.hostname}:8032
用于指定调度程序接口的地址。
yarn.resourcemanager.scheduler.address
${yarn.resourcemanager.hostname}:8030
用于指定rm下的resource-tracker的地址
yarn.resourcemanager.resource-tracker.address
${yarn.resourcemanager.hostname}:8031
用于指定RM管理界面的地址。
yarn.resourcemanager.admin.address
${yarn.resourcemanager.hostname}:8033
用于指定RM的web访问的地址
The http address of the RM web application.
yarn.resourcemanager.webapp.address
${yarn.resourcemanager.hostname}:8088
这些属性我们都可以在etc/hadoop/yarn-site.xml里进行重新设置。yarn-default.xml默认配置文件里其他的属性,就不一一介绍了,可以自己查看哦。
------------------------------------如有疑问,敬请留言----------------------------------------------