版权声明:欢迎转载,转载请说明出处. 大数据Github项目地址https://github.com/SeanYanxml/bigdata。 https://blog.csdn.net/u010416101/article/details/89058937
前言
在前面的章节内, 我们主要讲解了Hadoop MR
的相关知识. 本章, 主要讲解Hadoop
中主要的参数. 通常的程序的性能调优都和这些参数无不关系.
本文相关代码, 可在我的Github项目 https://github.com/SeanYanxml/bigdata/ 目录下可以找到. PS: (如果觉得项目不错, 可以给我一个Star.)
相关参数
本地MR参数
mapreduce.map.memory.mb
: 一个Map Task可以使用的资源上限(单位 MB), 默认为1024MB. 如果Map Task实际使用的资源量超过该值, 则会被强制杀死.mapreduce.reduce.memory.mb
: 一个Reduce Task可以使用的资源上限(单位 MB), 默认为1024MB. 如果实际使用的资源量超过该值, 则会被强制杀死.mapreduce.map.java.opts
: MapTask的JVM参数, 你可以设置默认的java.heap.size
.(eg.-Xmx1024m -verbose:gc -Xloggc:/tmp/@[email protected]
(@taskid@会被Hadoop框架自动转换为对应的taskid)). 默认值为“”.mapreduce.reduce.java.opts
: Reduce Task的JVM参数, 你可以在此配置默认的java.heap.size
等参数.(eg.-Xmx1024m -verbose:gc -Xloggc:/tmp/@[email protected]
(@taskid@会被Hadoop框架自动转换为对应的taskid)). 默认值为“”.mapreduce.map.cpu.vcores
: 每个MapTask 可以使用的最多的cpu core
数目, 默认值为1.mapreduce.reduce.cpu.vcores
: 每个Reduce Task可以使用的最多cpu core
数目, 默认值为1.
在Yarn启动之前 配置在服务器的配置文件中.
yarn.scheduler.minimum-allocation-mb
: 1024 (给应用程序container分配的最小内存.)yarn.scheduler.maximum-allocation-mb
: 8192 (最大内存)yarn.schedulr.minimum-allocation-ycores
1yarn.schedulr.maximum-allocation-ycores
32yarn.nodemanager.resource.memory-mb
8192 (总内存)
Shuffle 性能优化参数 在Yarn启动之前配置好
mapreduce.task.io.sort.mb
100 (shuffle内环形缓冲区的大小 默认为100m)mapreduce.map.sort.spill.percent
0.8 (环形缓冲区溢出的阈值, 默认80%)
容错相关参数
mapreduce.map.maxattempts
: 每个Map Task最大重试次数. 一旦重试超过该值, 则认为Map Task运行失败. 默认为4.mapreduce.reduce.maxattempts
: 每个Reduce Task的最大重试次数, 一旦超过该值, 则认为Reduce Task运行失败. 默认为4.mapreduce.map.failures.maxpercent
: 当失败的MapTask失败比例超过该值, 整个作业则失败. 默认值为0. 如果你的程序允许丢失部分数据, 则该值设为一个大于0的数字.(比如5,表示如果有低于5%的MapTask失败).mapreduce.reduce.failures.maxpercent
: Reduce Task的相关数据, 同上.mapreduce.task.timeout
: Task超过时间,经常需要设置一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block专题,也许是临时卡住,也许是永久卡住.为了防止用户永远block住不退出,则强制设置一个超时时间,默认为300000(毫秒).如果你的程序每条数据的输入时间过长(比如访问数据库,网络延迟).建议将参数调大.(相关异常AttemptID:attempt_142xxx_xxx-m_0000_0 Timed out after 300 secsContainer killed by the ApplicationMaster
. )
开发相关
我们在开发过程中有时会将这些配置文件放入ClassPath
下, 随打包一起打入包内.
上文所说的本地MR参数
就可通过这样进行修改. 当然你也可以创建一个Configuration类
, 并使用conf.set(key,value)
方式进行修改.