首页 » 大数据 » Hadoop » Hadoop学习笔记(6)--系统配置

Hadoop学习笔记(6)--系统配置

 
文章目录

Hadoop参数API

  1. org.apache.hadoop.conf:定义了系统参数的配置文件处理API;
  2. org.apache.hadoop.fs:定义了抽象的文件系统API;
  3. org.apache.hadoop.dfs:Hadoop分布式文件系统(HDFS)模块的实现;
  4. org.apache.hadoop.mapred:Hadoop分布式计算系统(MapReduce)模块的实现,包括任务的分发调度等;
  5. org.apache.hadoop.ipc:用在网络服务端和客户端的工具,封装了网络异步I/O的基础模块;
  6. 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)--系统配置,转载请注明来源!

0