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
我目前有一个伪分布式 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