hadoop参数优化

shuffle:map的输出到reduced的消化输入的过程就是shuffle

combine:写到本地磁盘和传到reduce端的数据更少

mapred-default.xml配置参数说明

map端

 

默认值

 

mapred.submit.replication

10

提交作业jar的副本,供tasktracker访问使用    

mapred.reduce.tasks

1

reduce任务数

mapred.map.tasks

2

Map任务数

job.end.notification.url

 

job任务完成后,http作业通知

mapred.task.timeout

10ms

map任务超时时间

mapred.reduce.max.attempts

4

reduce任务失败重试次数

mapred.map.max.attempts

4

map任务失败重试次数

mapred.tasktracker.expiry.intervaltasktracker

10ms

向jobtracker发送心跳间隔时间

mapred.jobtracker.taskScheduler

 

job任务调度器

io.sort.mb

100

内存缓冲区,用于map端的输出(估算map端输出大小,尽可能减小磁盘写操作,合理设置此值)

io.sort.spill.percent         

0.8

内存缓冲区达到80%时,缓冲区的数据将写到(spill)到磁盘

mapred.local.dir

 

内存缓冲区数据写到的目录

io.sort.factor

10

map输出到reduce接收数据期间(shuffle),一次最多能合并多少个文件,假如有50个map输出,每次合并10个,则要合并5次有5个中间文件

 

mapred.compress.map.output

false

写磁盘时压缩map端输出

mapred.map.output.compression.codec

 

压缩库

tasktracker.http.threads

40

tasktracker文件分区的工作线程,运行大型作业的环境中,此值可以根据需要增加

mapred.map.tasks.speculative.execution

true

如果任务变慢,是否启动map的另一个实例

mapred.reduce.tasks.speculative.execution

true

如果任务变慢,是否启动reduce的另一个实例

【注意】推测执行是以集群效率为代价,会减少集群吞吐量

 

         119

                                    

                                                       

 

 

 

 

reduce端

 

 

 

mapred.reduce.parallel.copies

5

reduce端复制map端输出数据的线程个数

mapred.job.shuffle.input.buffer.percent

0.7

 

map端输出数据较少时,且在指定空间百分比内,会把输出复制到reduce端的内存中,否则写入磁盘

 

 

当指定了JVM的堆内存最大值以后,上面这个配置项就是Reduce用来存放从Map节点取过来的数据所用的内存占堆内存的比例,默认是0.7,既70%,通常这个比例是够了,但是我们讨论的还是大数据的情况,所以这个比例还是小了一些,0.8-0.9之间比较合适。(前提是你的reduce函数不会疯狂的吃掉内存)

 

mapred.job.shuffle.merge.percent

0.66

指的从Map节点取数据过来,放到内存,当达到这个阈值之后,后台启动线程(通常是Linux native process)把内存中的数据merge sort,写到reduce节点的本地磁盘

mapred.inmem.merge.threshold

1000

是从map节点取过来的文件个数,当达到这个个数之后,也进行merger sort,然后写到reduce节点的本地磁盘;这两个配置项第一个优先判断,其次才判断第二个thresh-hold

mapred.child.java.opts

200m

运行map,reduce任务的JVM

mapred.job.reuse.jvm.num.tasks

1

在一个tasktracker上,对于给定的作业的每个jvm上可以运行的任务最大数,-1表示无限制,即同一个JVM可以被该作业的所有任务使用(对于有大量的小任务应该JVM重用,作业之间可以共享static字段)

mapred.tasktracker.reduce.tasks.maximum

2

Reduce任务槽数

 

 

 

 

 

stream.num.reduce.output.key.fields

 

 

stream.num.map.output.key.fields

 

定义有多少个字段作为map输出key与value的分隔符【列如,一个输出是"a,b,c",n设置2,则键为"a,b",值为"c"】

stream.reduce.output.field.separator

\t

 

mapred.textoutputformat.separator

\t

TextOutputFormat输出分隔符

stream.map.input.field.separator

\t

此分隔符用于将输入k/v字符串作为字节流传递到流map

stream.map.output.field.separator

\t

此分隔符用于将map流处理的输出分割成map输出需要的k/v字符串

mapred.max.split.size

Long.MAX

一个分片中最大的字节数

mapred.max.split.size

1

一个分片中最小的字节数

dfs.block.size

 

块大小

 

 

任务执行环境属性


core-default.xml配置参数 

io.file.buffer.size(默认值4kb)                            hadoop默认的缓冲区(应该调大)

 

 

 

CombineFileInputFormat

 

将多个小文件打包到一个分片中

 

 

 

 

 

 

 

 



 


shuffle过程尽量多提供内存空间,map,reduce函数尽量少有内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值