Yarn 的资源分配机制里,Uber 模式算是个蛮实用的小技巧。默认配置下,每跑一个 task 就得重新拉起一个 JVM,资源用得有点浪费,效率也上不来。嗯,如果任务不多,其实可以让多个 task 共享一个 JVM,这就是 Uber 的思路。简单说,就是在一个 container 里连续跑多个 task,省事儿不少。

Application Master负责给每个 task 找 container,Yarn 默认一 task 一 JVM,这就导致频繁启动和销毁,挺耗资源的。你要是任务小又密集,建议直接打开 Uber 模式,把 JVM 复用上,执行速度提升还蛮的。

配置也不复杂,改下yarn-site.xml里的几个参数就行了,比如mapreduce.job.ubertask.enable设成true。记得加点内存保护,别一个 container 挂了带飞全部 task。

要是你对 MapReduce 或者 Yarn 本身还不太熟,可以看看下面这些相关文章。像MapReduce 设计模式那篇就挺实用的,讲了不少实际应用场景。