1.版本介绍
cdh 5.16.2
Uber模式虽然在hadoop2.X版本提供,但是使用的人并不多,默认是关闭的。
那么启用它有什么优点?
Uber模式只会向RM申请一个Container,这个Container里会启用AM,接着本任务的所有mapreduce计算都会在该Container内完成,不需要AM向RM申请其他Container。
简单理解,就是针对于小数据量的计算,都在一个Container中完成,避免多次向集群申请资源。节约了资源和时间。比如像小数据量的count等类似计算,就可以通过启用Uber加速运算。
2.Uber参数设置
在YARN服务的Performance参数中:
mapreduce.job.ubertask.enable=true 当该值为true,并且满足以下三个条件时,启用Uber优化
mapreduce.job.ubertask.maxreduces=1 当任务的reduce数<=1时,启用Uber优化
mapreduce.job.ubertask.maxmaps=4 当任务的map数<=4时,启用Uber优化
mapreduce.job.ubertask.maxbytes=64M 当输入的字节数<=64M时,启用Uber优化
yarn.app.mapreduce.am.resource.mb AM的内存设置
yarn.app.mapreduce.am.resource.cpu-vcores AM的cpu设置
3.使用经验
- 为了让Uber模式下的任务计算更快,可以适当把AM的内存调大
- 第一次启用Uber后,MR任务会报错,Error running local (uberized) 'child' : java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z,是因为AM的环境变量中没有hadoop native相关lib
解决办法:修改参数 yarn.app.mapreduce.am.admin.user.env 为 LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
- 使用uber后在container的日志中会出现错误,
ERROR [uber-EventHandler] org.apache.hadoop.mapred.LocalContainerLauncher: Returning, interrupted : java.lang.InterruptedException 没有影响