Yarn 和 MapReduce 资源配置

Yarn and MapReduce resource configuration

我目前有一个伪分布式 Hadoop 系统 运行ning。该机器有 8 个内核(16 个虚拟内核),32 GB Ram。

我的输入文件在几 MB 到 ~68 MB 之间(gzip 日志文件,一旦达到 >60MB 就会上传到我的服务器,因此没有修复最大大小)。我想 运行 在这些文件中的大约 500-600 个上执行一些 Hive 作业。

由于输入文件大小不一致,到目前为止我还没有更改 Hadoop 中的块大小。据我所知,最好的情况是 blocksize = 输入文件大小,但是如果文件小于 blocksize,Hadoop 会填充该块直到它填满吗?输入文件的大小和数量如何影响性能,而不是说一个大约 40 GB 的大文件?

我对此设置的最佳配置是什么样的?

基于这个指南 (http://hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp-2-0/) 我想出了这个配置:

32 GB Ram,为 OS 保留 2 GB 给我 30720 MB 可以分配给 Yarn 容器。

yarn.nodemanager.resource.memory-mb=30720

对于 8 个核心,我认为最多 10 个容器应该是安全的。所以对于每个容器 (30720 / 10) 3072 MB 的 RAM。

yarn.scheduler.minimum-allocation-mb=3072

对于 Map Task Containers,我将最小容器大小增加了一倍,这将允许最多 5 个 Map Tasks

mapreduce.map.memory.mb=6144

如果我最多需要 3 个 Reduce 任务,我会分配:

mapreduce.map.memory.mb=10240

JVM 堆大小适合容器:

mapreduce.map.java.opts=-Xmx5120m
mapreduce.reduce.java.opts=-Xmx9216m

你觉得这个配置好不好,或者你会改变什么,为什么?

嗯,这个配置不错。但我想提的变化很少。

对于reducer内存,应该是 mapreduce.reduce.memory.mb=10240(我认为这只是一个错字。)

我建议的另一个主要补充是 cpu 配置。

你应该放

Container Virtual CPU Cores=15

对于Reducer,因为你是运行只有3个reducer,你可以给

Reduce Task Virtual CPU Cores=5

对于 Mapper

Mapper Task Virtual CPU Cores=3

number of containers that will be run in parallel in (reducer OR mapper) = min(total ram / mapreduce.(reduce OR map).memory.mb, total cores/ (Map OR Reduce) Task Virtual CPU Cores).

详细理解请参考http://openharsh.blogspot.in/2015/05/yarn-configuration.html