HADOOP
调劣常用参数统计表
查找hadoop相闭材料,对照新旧版本配置参数转变,清算hadoop集群调劣常用参数,并梳理相闭参数调劣需求遵循按照战思念。 |
| 所正在配置文件 |
旧版本配置参数(0.X , 1.X) |
新版本配置参数(2.X) |
参数配置调试申明 |
备注 |
|
hdfs-site.xml |
dfs.block.size |
dfs.blocksize |
2.X 版本默许值:134217728
申明:
这个便是hdfs里一个文件块的大小了,默许128M;
太大年夜的话会有较少map同时计算,太小的话也铺张可用map个数资本,并且文件太小namenode便铺张内存多。闭于较大年夜集群,可设为256MB,按照需求进止设置。
|
|
| dfs.data.dir |
dfs.datanode.data.dir |
把这些位置离散正在每个节面上的一切磁盘上可以也许实现磁盘
I/O 平衡,因而会明显改善磁盘 I/O 性能。 |
|
| dfs.replication.min |
dfs.namenode.replication.min (新旧参数对照)
dfs.replication
(配置文件现使用参数) |
默许值:3
hdfs数据块的复制份数,实际上份数越多跑数速度越快,可是需求的存储空间也更多。有钱人可以也许调5或6。 |
|
| mapred-site |
io.sort.mb |
mapreduce.task.io.sort.mb |
默许值:100M
申明:
这个参数设置用于 map 端排序的缓冲区大小,单位是
MB,默许值是 100。这个值越大年夜,溢出到磁盘便越少,因而会加少 map 真个 I/O
工夫。寄望,删加这个值会导致每个 map 使命需求的内存删加。
按照**经验,正在 map 输出很大年夜并且 map 端
I/O 很频繁的景遇下,应当检验考试删加这个值。
Map
task的输出结局战元数据正在内存中所占的buffer总大小。闭于大年夜集群,可设为200M。当buffer达到一定阈值,会启动一个后台线程来对buffer的内容进止排序,然后写进当地磁盘(一个spill文件)。 |
|
| io.sort.factor |
mapreduce.task.io.sort.factor |
默许值:10
申明:
当一个map
task执止完以后,当地磁盘上(mapred.local.dir)有若干个spill文件,map
task最后做的一件事便是执止merge
sort,把这些spill文件合成一个文件(partition)。执止merge
sort的时候,每次同时挨开几个spill文件由该参数决意。挨开的文件越多,没有一定merge
sort便越快,所以要按照数据景遇恰当的调解。
这个参数设置正在 map/reduce
使掷中同时吞并的输进流(文件)数量。这个值越大年夜,溢出到磁盘便越少,因而会加少 map/reduce 的 I/O
工夫。寄望,假设给每个使命分派的内存没有够大年夜,删加这个值可以也许会导致更多垃圾搜集举止。
按照**经验,假设闪现大年夜量溢出到磁盘,并且排序战
shuffle 阶段的 I/O 工夫很下,便应当检验考试删加这个值。 |
|
| io.sort.spill.percent |
mapreduce.map.sort.spill.percent |
这个值便是上述buffer的阈值,默许是0.8,即80%,当buffer中的数据达到这个阈值,后台线程会起来对buffer中已有的数据进止排序,然后写进磁盘。 |
|
| mapred.local.dir |
mapreduce.cluster.local.dir |
这两个参数决意把 Hadoop
中的数据放正在甚么中心,mapred.local.dir决意存储 MapReduce 中心数据(
map 输出数据)的位置,dfs.data.dir决意存储 HDFS
数据的位置。 |
|
| mapred.job.reduce.input.buffer.percent |
mapreduce.reduce.input.buffer.percent |
默许值是: 0;
申明:这个参数设置用于正在 reduce 阶段糊口 map
输出的内存的百分比(相闭于最大年夜堆大小),当 shuffle 竣事时,内存中剩余的 map
输出必须少于这个阈值,然后 reduce
阶段才可以也许开初。这个值越大年夜,磁盘上的吞并便越少,因而会加少 reduce 阶段当地磁盘上的 I/O 工夫。假设
map 输出很大年夜并且正在 reduce 到排序阶段当地磁盘 I/O
很频繁,应当检验考试删加这个值。
寄望,假设给每个使命分派的内存没有够大年夜,删加这个值可以也许会导致更多垃圾搜集举止。
|
|
| mapred.job.shuffle.merge.percent |
mapreduce.reduce.shuffle.merge.percent |
默许值: 0.66
申明:reduce回并吸取map的输出数据可占用的内存配置百分比。相同mapreduce.reduce.shuffle.input.buffer.percen属性。 |
|
| mapred.job.tracker.handler.count |
mapreduce.jobtracker.handler.count |
默许值:10
申明:JobTracker可以也许启动的线程数,通常是tasktracker节面的4%。
namenode或jobtracker中用于处置RPC的线程数,默许是10,较大年夜集群,可调大年夜些,比如64。 |
|
| mapred.output.compress |
mapreduce.output.fileoutputformat.compress |
默许值:false
这些参数节制可否对输出进止压缩,磁盘 I/O
相闭的参数
申明:
mapreduce.output.fileoutputformat.compress 用于 map
输出压缩;
mapreduce.map.output.compress
用于作业输出压缩;
mapreduce.output.fileoutputformat.compress.codec用于压缩代码;
启用输出压缩可以也许加快磁盘(当地/Hadoop
Distributed File System (HDFS))写操纵,加少数据传输的总工夫(正在
shuffle 战 HDFS 写阶段),可是正在另外一圆面压缩/解压过程会删加开销。
经验:启用压缩闭于使用随机键/值的操纵序列是无效的。倡议只正在处置大年夜量有组织的数据(特别是自然语言数据)时启用压缩。
中心结局战终极结局可否要进止压缩,假设是,指定压缩圆法(Mapred.compress.map.output.codec/
Mapred.output.compress.codec)。引荐使用LZO压缩。Intel内部测试注释,相比已压缩,使用LZO压缩的TeraSort作业运止工夫加少60%,且明显快于Zlib压缩。 |
|
| mapred.compress.map.output |
mapreduce.map.output.compress |
|
mapred.output.compression.codec
|
mapreduce.output.fileoutputformat.compress.codec
|
|
| mapred.map.output.compression.codec |
mapreduce.map.output.compress.codec |
默许值:false
申明:
map输出可否进止压缩,假设压缩便会多耗cpu,可是加少传输工夫,假设没有压缩,便需求较多的传输带宽。配合mapreduce.map.output.compress.codec使用,默许是org.apache.hadoop.io.compress.DefaultCodec,可以也许按照需求设定数据压缩圆法。 |
|
| mapred.reduce.child.java.opts |
参数有冲突:
mapreduce.reduce.java.opts(新旧参数对此结局)
mapred.child.java.opts
(mapred-site参数诠释参数) |
默许值是 -Xmx200m,
申明:
与内存相闭的参数,同时这是这个参数用于 JVM
调劣的次要参数。这给每个子使命线程分派最多 200 MB
内存。假设作业很大年夜,可以也许删加这个值,可是应当确保这没有会造成交流,交流会严重低落性能。
我们来研究一下这个参数若何影响总内存使用量。
假定 map/reduce 使命的最大年夜数量设置为
7,mapred.child.java.opts 贯穿跟尾默许值。那末,正正在运止的使命的内存开销为
2x7x200 MB =2800 MB。假设每个工作者节面皆有 DN 战 TT
回护进程,每个回护进程正在默许景遇下占用 1 GB 内存,那末分派的总内存大年夜约为 4.8
GB。
正在 mapred-site.xml
中设置此参数。
默许值:-Xmx200m
申明:jvms启动的子线程可以也许使用的最大年夜内存。改成-Xmx1024m,内存再大年夜也可以也许继尽删加。可是假设一般使命文件小,逻辑没有重大用没有了那末多的话太大年夜也铺张。 |
|
| mapred.reduce.parallel.copies |
mapreduce.reduce.shuffle.parallelcopies |
默许值是 5:
这个参数决意把 map 输出复制到 reduce
所使用的线程数量。删加这个值可以也许提下搜集传输速度,加快复制 map 输出的过程,可是也会删加 CPU
使用量。
按照小我经验,删加这个值的效果没有太明显,倡议只正在 map
输出十分大年夜的景遇下删加这个值。
Reduce
shuffle阶段copier线程数。默许是5,闭于较大年夜集群,可调解为16~25。 |
|
| mapred.tasktracker.map.tasks.maximum |
mapreduce.tasktracker.map.tasks.maximum |
默许值是 2:
与 CPU 相闭的参数:
申明:决意由使命跟踪器同时运止的 map/reduce
使命的最大年夜数量。这两个参数与 CPU 放置率最相闭。这两个参数的默许值皆是 2。
按照集群的具体景遇恰当地删加它们的值,这会提下 CPU
放置率,由此提下性能。例如,假定集群中的每个节面有 4 个 CPU,撑持并发多线程,每个 CPU
有两个核;那末回护进程的总数没有应当超出跨越 4x2x2=16 个。考虑到 DN 战 TT 要占用两个,map/reduce
使命最多可以也许占用 14 个,所以这两个参数最吻合的值是 7。 |
|
| mapred.tasktracker.reduce.tasks.maximum |
mapreduce.tasktracker.reduce.tasks.maximum |
|
| tasktracker.http.threads |
mapreduce.tasktracker.http.threads |
默许值:40
申明:map战reduce是通过http进止数据传输的,这个是设置传输的并止线程数。
HTTP
server上的线程数。运止正在每个TaskTracker(nodemanager)上,用于处置map
task输出。大年夜集群,可以也许将其设为40~50。 |
|
|
core-site.xml |
topology.script.file.name |
net.topology.script.file.name |
与搜集相闭的参数:topology.script.file.name
==> net.topology.script.file.name
这个参数指向一个用户界说的足本,这个足本判定机架-主机(rack-host)映照以配置机架感知。正在
core-site.xml 文件中设置此参数。
机架感知是闭于提下搜集性能最首要的配置,强烈倡议按http://hadoop.apache.org/common/docs/current/cluster_setup.html#Hadoop+Rack+Awareness
战http://wiki.apache.org/hadoop/topology_rack_awareness_scripts
上的申明配置它。 |
|