好记性不如烂笔头---hadoop配置调优
2018-01-02 11:17
274 查看
以下属性以作业为单位,默认值适合于常规作业。
map端的调优属性
属性
类型
默认值
io.sort.mb
int
100
排序map输出时所使用的的内存缓冲区的大小,以兆字节为单位
io.sort.spill.percent
float
0.80
map输出内存缓冲和用来开始磁盘溢出写过程的记录边界索引,这两者使用比例的阈值
io.sort.factor
int
10
排序文件时,一次最多合并的流数。这个属性也在reduce中用,将此值增加到100是很常见的。
min.num.spills.for.combine
int
3
如果指定了combiner,运行combiner所需的最少溢出文件数
mapred.compress.map.output
Boolean
false
压缩map输出
mapred.map.output.compression.cede
Class name
org.apache.hadoop.io.compress.DefaultCodec
用于map输出的压缩编解码器
tasktracker.http.threads
int
40
每个tasktracker的工作线程数,用于将map输出到reduce,ps.这是集群范围的设置,不能由单个作业设置。在MapReduce2中不适用
配置调优的总的原则是给shuffle过程尽量多提供内存空间,同时也要确保map函数和reduce函数能得到足够的内存来运行,因此,我们编写map函数和reduce函数时应该尽量少用内存,它们不应该无限使用内存。
运行map任务和reduce任务的JVM,其内存大小由mapred.child.java.opts属性设置,任务节点上的内存大小应该尽量大。
在map端,可以通过避免多次溢出写磁盘来获得最佳性能,一次是最佳情况。如果能估算map输出的大小,就可以合理的设置io.sort.*.属性来尽可能减少溢出写的次数。
在reduce端,中间数据全部驻留在内存时,就能获得最佳性能,在默认情况下,这是不可能发生的,因为所有内存一般都预留给reduce函数。如果reduce函数的内存需求不大,把mapred.inmem.merge.threshold设置为0,把mapred.job.reduce.input.buffer.percent设置为1.0或者一个更低的值,就可以提升性能。
reduce端的调优属性
属性
类型
默认值
mapred.reduce.parallel.copies
int
5
用于把map输出复制到reducer的线程数
mapred.reduce.copy.backoff
int
300
在声明失败之前,reducer获取一个map输出所花的最大时间,以秒为单位。如果失败(根据指数后退),reducer可以在此时间内尝试重传
io.sort.factor
int
10
排序文件时一次最多合并的流的数量,这个属性也在map端使用
mapred.job.shuffle.input.buffer.percent
float
0.70
在shuffle的复制阶段,分配给map输出的缓冲区占堆空间的百分比
mapred.job.shuffle.merge.percent
float
0.66
map输出缓冲区(由mapred.job.shuffle.input.buffer.percent定义)的阈值使用比例,用于启动合并输出和磁盘溢出写过程
mapred.inmem.merge.threshold
int
1000
启动合并输出和磁盘溢出写过程的map输出的阈值数。0或更小的数意味着没有阈值限制,溢出写行为由mapred.job.shuffle.merge.percent单独控制
mapred.job.reduce.input.buffer.percnt
float
0.0
在reduce过程中,在内存中保存map输出的空间占整个堆空间的比例。reduce阶段开始时,内存中的map输出大小不能大于这个值。默认情况下,在reduce任务开始之前,所有map输出都合并到磁盘上,以便为reducer提供尽可能多的内存。然而,如果reducer需要的内存较少,可以增加此值来最小化访问磁盘的次数
更常见的情况是,hadoop默认使用4KB的缓冲区,这是很低的,因此应该在集群中增加这个值(通过设置io.file.buffer.size,在core-site.xml文件中,设置为128KB)。
mapred.job.reuse.jvm.num.task
int
1
在一个tasktracker上,对于给定的作业的每个JVM上可以运行的任务最大数。-1表示无限制,即同一个JVM可以被该作业的所有任务使用。JobConf中的setNumTasksToExecutePerJvm()方法也可以用于设置这个属性。
hadoop在自己的Java虚拟机上运行任务,以区别于其他正在运行的任务。为每个任务启动一个新的JVM约1秒钟,对于运行时间在1分钟左右的作业而言,这个额外消耗是微不足道的。但是,有大量短任务的作业或初始化时间长的作业,它们启用JVM重用,就可以体现出性能上的优势。
map端的调优属性
属性
类型
默认值
io.sort.mb
int
100
排序map输出时所使用的的内存缓冲区的大小,以兆字节为单位
io.sort.spill.percent
float
0.80
map输出内存缓冲和用来开始磁盘溢出写过程的记录边界索引,这两者使用比例的阈值
io.sort.factor
int
10
排序文件时,一次最多合并的流数。这个属性也在reduce中用,将此值增加到100是很常见的。
min.num.spills.for.combine
int
3
如果指定了combiner,运行combiner所需的最少溢出文件数
mapred.compress.map.output
Boolean
false
压缩map输出
mapred.map.output.compression.cede
Class name
org.apache.hadoop.io.compress.DefaultCodec
用于map输出的压缩编解码器
tasktracker.http.threads
int
40
每个tasktracker的工作线程数,用于将map输出到reduce,ps.这是集群范围的设置,不能由单个作业设置。在MapReduce2中不适用
配置调优的总的原则是给shuffle过程尽量多提供内存空间,同时也要确保map函数和reduce函数能得到足够的内存来运行,因此,我们编写map函数和reduce函数时应该尽量少用内存,它们不应该无限使用内存。
运行map任务和reduce任务的JVM,其内存大小由mapred.child.java.opts属性设置,任务节点上的内存大小应该尽量大。
在map端,可以通过避免多次溢出写磁盘来获得最佳性能,一次是最佳情况。如果能估算map输出的大小,就可以合理的设置io.sort.*.属性来尽可能减少溢出写的次数。
在reduce端,中间数据全部驻留在内存时,就能获得最佳性能,在默认情况下,这是不可能发生的,因为所有内存一般都预留给reduce函数。如果reduce函数的内存需求不大,把mapred.inmem.merge.threshold设置为0,把mapred.job.reduce.input.buffer.percent设置为1.0或者一个更低的值,就可以提升性能。
reduce端的调优属性
属性
类型
默认值
mapred.reduce.parallel.copies
int
5
用于把map输出复制到reducer的线程数
mapred.reduce.copy.backoff
int
300
在声明失败之前,reducer获取一个map输出所花的最大时间,以秒为单位。如果失败(根据指数后退),reducer可以在此时间内尝试重传
io.sort.factor
int
10
排序文件时一次最多合并的流的数量,这个属性也在map端使用
mapred.job.shuffle.input.buffer.percent
float
0.70
在shuffle的复制阶段,分配给map输出的缓冲区占堆空间的百分比
mapred.job.shuffle.merge.percent
float
0.66
map输出缓冲区(由mapred.job.shuffle.input.buffer.percent定义)的阈值使用比例,用于启动合并输出和磁盘溢出写过程
mapred.inmem.merge.threshold
int
1000
启动合并输出和磁盘溢出写过程的map输出的阈值数。0或更小的数意味着没有阈值限制,溢出写行为由mapred.job.shuffle.merge.percent单独控制
mapred.job.reduce.input.buffer.percnt
float
0.0
在reduce过程中,在内存中保存map输出的空间占整个堆空间的比例。reduce阶段开始时,内存中的map输出大小不能大于这个值。默认情况下,在reduce任务开始之前,所有map输出都合并到磁盘上,以便为reducer提供尽可能多的内存。然而,如果reducer需要的内存较少,可以增加此值来最小化访问磁盘的次数
更常见的情况是,hadoop默认使用4KB的缓冲区,这是很低的,因此应该在集群中增加这个值(通过设置io.file.buffer.size,在core-site.xml文件中,设置为128KB)。
mapred.job.reuse.jvm.num.task
int
1
在一个tasktracker上,对于给定的作业的每个JVM上可以运行的任务最大数。-1表示无限制,即同一个JVM可以被该作业的所有任务使用。JobConf中的setNumTasksToExecutePerJvm()方法也可以用于设置这个属性。
hadoop在自己的Java虚拟机上运行任务,以区别于其他正在运行的任务。为每个任务启动一个新的JVM约1秒钟,对于运行时间在1分钟左右的作业而言,这个额外消耗是微不足道的。但是,有大量短任务的作业或初始化时间长的作业,它们启用JVM重用,就可以体现出性能上的优势。
相关文章推荐
- 好记性不如烂笔头-.bash_profile配置hadoop,hive,hbase环境变量
- 好记性不如烂笔头88-spring3学习(9)-schema的配置的解读和说明
- 好记性不如烂笔头---hadoop的作业调度
- 好记性不如烂笔头95-spring3学习(16)-spring配置log4j
- 好记性不如烂笔头---hadoop分布式文件系统HDFS
- 好记性不如烂笔头88-spring3学习(9)-schema的配置的解读和说明
- 好记性不如烂笔头73-多线程-继承thread实现简单多线程
- 好记性不如烂笔头,记录一下 ORA-30004 :使用sys_connect_by_path 函数时,不能将分隔符作为列值的一部分
- 好记性不如烂笔头85-spring3学习(6)-BeanFactory 于bean生命周期
- 好记性不如烂笔头——DML/DDL/DCL/TCL,OLTP/OLAP
- 好记性不如烂笔头——.NET运行原理
- 好记性不如烂笔头-解决Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 好记性不如烂笔头(一)
- 好记性不如烂笔头85-spring3学习(6)-BeanFactory 中bean的生命周期
- 好记性不如烂笔头38-java监听windows窗口事件Listener(2)
- 好记性不如烂笔头15-http协议
- 好记性不如烂笔头90-spring3学习(11)-小技巧汇总
- 记性不如烂笔头22-JAVA数据库连接池 C3P0
- 好记性不如烂笔头45-javaWeb中用Session控制表单重复提交(9)
- 好记性不如烂笔头47-java拦截器-用CGLib实现动态代理(2)