Hadoop参数API
- org.apache.hadoop.conf:定义了系统参数的配置文件处理API;
- org.apache.hadoop.fs:定义了抽象的文件系统API;
- org.apache.hadoop.dfs:Hadoop分布式文件系统(HDFS)模块的实现;
- org.apache.hadoop.mapred:Hadoop分布式计算系统(MapReduce)模块的实现,包括任务的分发调度等;
- org.apache.hadoop.ipc:用在网络服务端和客户端的工具,封装了网络异步I/O的基础模块;
- org.apache.hadoop.io:定义了通用的I/O API,用于针对网络、数据库、文件等数据对象进行读写操作等。
hadoop1的核心组成是两部分,即HDFS和MapReduce。在hadoop2中变为HDFS和Yarn(NameNode可存在一个active状态的,一个standby状态的)。
加载自定义配置
hadoop中,组件配置是由Hadoop的Configuration的一个实例实现。
例如创建一个这样的xml配置文件configuration.xml:
<?xml version="1.0"?>
<configuration>
<property>
<name>color</name>
<value>yellow</value>
<description>Color</description>
</property>
<property>
<name>size</name>
<value>10</value>
<description>Size</description>
</property>
<property>
<name>weight</name>
<value>heavy</value>
<final>true</final>
<description>Weight</description>
</property>
<property>
<name>size-weight</name>
<value>${size},${weight}</value>
<description>Size and weight</description>
</property>
</configuration>
//Hadoop只要addResource即可将配置加载
Configuration conf = new Configuration();
conf.addResource("configuration-1.xml");
Configuration实现了类似懒加载的方法来实现资源的读取,也就是说在add完成XML文件的时候,是不会去更新属性列表的,只有当有需要读取属性值的时候才会进行资源的加载。
合并资源指将多个配置文件合并,产生一个配置。如果有两个配置文件,也就是两个资源,如core-default.xml和core-site.xml,通过Configuration类的loadResources()方法,把它们合并成一个配置
Configurationconf = new Configuration();
conf.addResource("core-default.xml");
conf.addResource("core-site.xml");
如果这两个配置资源都包含了相同的配置项,而且前一个资源的配置项没有标记为final,那么,后面的配置将覆盖前面的配置。上面的例子中,core-site.xml中的配置将覆盖core-default.xml中的同名配置。如果在第一个资源(core-default.xml)中某配置项被标记为final,那么,在加载第二个资源的时候,会有警告提示。
加载系统默认配置
另外addDefaultResource()方法
这个加载系统默认配置的方法。
在HDFS中,会把hdfs-default.xml和hdfs-site.xml作为默认资源,并通过addDefaultResource()保存在成员变量defaultResources中;在MapReduce中,默认资源是mapred-default.xml和mapred-site.xml。
例如在HDFS的DataNode中,就有下面的代码,加载上述两个默认资源:
//下面的代码来自org.apache.hadoop.hdfs.server.datanode.DataNode
static{
Configuration.addDefaultResource("hdfs-default.xml");
Configuration.addDefaultResource("hdfs-site.xml");
}
core_site.xml, hdfs_site.xml, mapred_site.xml, 下面将经常会用到的配置项总结如下:
core_site.xml
- fs.default.name
说明: Name Node的URI
value: hdfs://hostname:port/
备注:hostname要用主机名或域名,不能使用ip
- fs.trash.interval
说明:hadoop垃圾回收机制,每隔多长时间清理一次垃圾
value:1440
备注:默认值是0,不打开垃圾收回机制。删除掉的文件将直接清除,不保存。如果设置了,则将保存到本地的.crash文件夹下。
- fs.checkpoint.dir
说明:本地文件系统DFS secondaryname节点存储临时图像目录
value:/disk2/cloudera/hadoop/dfs/namesecondary
备注:用于:hadoop namenode -importCheckpoint,从检查点目录装载镜像并保存到当前检查点目录,检查点目录由fs.checkpoint.dir指定。
- hadoop.tmp.dir
说明:Hadoop的默认临时文件存放路径
value:/home/hadoop/hadoop/tmp
备注:这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。
不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令
- io.file.buffer.size
说明:读写序列文件缓冲区大小
value:16384
备注:值应该设置为硬件页面大小的倍数,默认设置为4096,请设置为4096的倍数
- io.bytes.per.checksum
说明:校验位数
value:512
备注:校验位数为512字节
- io.skip.checksum.errors
说明:校验出错后是抛出异常还是略过标识。True则略过。
value:false
备注:
- 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.SnappyCodec
- io.serializations
说明:序例化和反序列化的类设定
value:org.apache.hadoop.io.serializer.WritableSerialization
备注:
hdfs_site.xml
- dfs.name.dir
说明:设定DFS Name节点中的命名空间表格文件,在本地系统中的保存位置。 可以设置多个,通过","分隔,fsimage文件,会被复制到多个路径中,用于备份。
value:/home/hadoop/hadoop/name
备注:其中的一个路径,可以利用nfs映射到我们的共享文件夹下,形成异地备份
- dfs.data.dir
说明:设定DFS Data节点中的数据块在本地系统中的保存位置。可以设置多个,通过 "," 分隔。设置的文件夹如果不存在,将被忽略。
value:/home/hadoop/data1, /home/hadoop/data2
备注:
- dfs.replication
说明:缺省的文件块被复制的次数。在文件被创建的时候可以指定复制的块数,如果在创建的时候没有指定,则使用该缺省值。
value:3
备注:
- dfs.block.size
说明:新文件被分隔的缺省块容量。
value:268435456
备注:必须是512的倍数
- dfs.datanode.max.xcievers
说明:datanode所允许同时执行的发送和接受任务的数量
value:10240
备注:默认是256.该值太小。可以修改为10240
- dfs.web.ugi
说明:hadoop的web界面访问权限设置。
value:hadoop,hadoop
备注:value语法:用户名,用户组
如何设置:
hadoop fs -chmod (修改文件所有者,文件所属组,其他用户的读、写、执行权限)
haddop fs -chown (修改文件所有者)
hadoop fs -chgrp (修改文件所属组)
- dfs.safemode.threshold.pct
说明:启动的时候,NameNode会等待所有的datanode报告block状态,查看所有的block的副本是否达到最低要求,当报告合格的数量达到设置的值,则退出safemode。
value:0.95f
备注:默认为0.999f
- dfs.safemode.extension
说明:Namenode在合格的datanode数目达到要求的时候,并不是马上离开safemode状态,会有一个扩展时间,让剩余的 datanode来报告block信息,这个扩展时间默认是30秒,单位是毫秒。
value:30000
备注:时间默认是30秒,单位是毫秒
- dfs.balance.bandwidthPerSec
说明:用于平衡数据。每秒平衡数据量最大带宽。可以放大。
value:10485760
备注:默认是10485760
- dfs.replication.min
说明:创建文件时的最小复制数。主要用于dfs.safemode.threshold.pct
value:1
备注:默认为1
- dfs.datanode.handler.count
说明:datanode上用于处理RPC的线程数。
value:3
备注:默认为3,较大集群,可适当调大些,比如8。需要注意的是,每添加一个线程,需要的内存增加。
- dfs.datanode.du.reserved
说明:表示在datanode对磁盘写时候,保留多少非dfs的磁盘空间, 从而避免dfs将所在的磁盘写满
value:10737418240
备注:默认为0,单位是字节
- dfs.df.interval
说明:磁盘使用统计刷新时间间隔,单位毫秒
value:60000
备注:默认是60000,单位是毫秒
- dfs.namenode.handler.count
说明:namenode的rpc调用线程数。
value:10
备注:默认是10
mapred_site.xml
- mapred.job.tracker
说明:JobTracker的地址
value:
备注:格式为 hostname:port
- mapred.local.dir
说明:运行 mapreduce 中间结果存储处,保存MapReduce临时文件的本地目录
value:
备注:可设置多个,用逗号分隔
- mapred.system.dir
说明:HDFS上MapReduce保存系统文件的目录
value:
备注:
- mapred.job.tracker.handler.count
说明: jobtracker同时与tasktracker通信的线程数
value:
备注:
- io.sort.factor
说明: 排序因子。同时合并的数据流的数量
value:
备注:当一个map task执行完之后,本地磁盘上(mapred.local.dir)有若干个spill文件,merge sort 把这些文件合成一个。执行merge sort的时候,每次同时打开多少个spill文件由该参数决定。 打开的文件越多,不一定merge sort就越快,所以要根据数据情况适当的调整。
- mapred.output.compress/mapred.compress.map.output
说明:中间结果和最终结果是否要进行压缩,如果是,指定压缩方式(Mapred.compress.map.output.codec/ Mapred.output.compress.codec)。 推荐使用LZO压缩。Intel内部测试表明,相比未压缩,使用LZO压缩的 TeraSort作业,运行时间减少60%,且明显快于Zlib压缩。
value
备注:
- tasktracker.http.threads
说明:HTTP server上的线程数。运行在每个TaskTracker上, 用于处理map task输出。
value:8
备注:tasktracker开http服务的线程数。用于reduce拉取map输出数据,大集群可以将其设为40~50。
- fs.inmemory.size.mb
说明:reducer在合并map输出数据使用的内存空间
value:
备注: 默认使用200M
推荐一个博客,里面有更详细的配置说明:
hadoop三个配置文件的参数含义说明
原文链接:Hadoop学习笔记(6)--系统配置,转载请注明来源!