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函数尽量少有内存