• HDP 中 yarn 和 MR2 的配置


           以下说明均以集群中 slave 结点的配置为 48G内存,12块硬盘,12核(core) CPU 为例。

           在 Yarn 中,一个 Container 是一个基础的包含内存和CPU 的单元。为了较好的平衡利用集群的资源,通常建议每块磁盘和每个core 分配1~2 个 container。所以在上面的配置下,每个结点允许最大配置 20 个 container。

           我们给 yarn 分配 40G内存,另外 8G留给操作系统。40G分配给 20 个 container,所以每个 container 分配到 2个G的内存。在 yarn-site.xml 中配置如下:

    <property>
        <!-- 总共有多少资源可以被分配 --> <name>yarn.nodemanager.resource.memory-mb</name> <value>40960</value> </property> <property>
        <!-- 分配给AM单个容器可申请的最小内存 --> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property>

          MapReduce2 运行在 Yarn 之上,利用 container 去安排 Map 和 Reduce 任务, 配置 MR2 的资源,需要考虑以下三个方面:

        (1)每个 map 和 reduce 任务的物理内存限制

        (2)每个任务的 JVM 堆大小

        (3)每个任务获得的虚拟内存的总量

        每个 map 和 reduce 任务运行在不同的 container 中,因此 Map 和 reduce 最大的内存配置应该等于或大于 yarn.scheduler.minimum-allocation-mb 的值。

    在 mapred-site.xml 里配置:

    <property>
    <!-- AM 中分配给map Container的内存大小 --> <name>mapreduce.map.memory.mb</name> <value>4096</value> </property> <property>
    <!-- AM 中分配给 reduce container 的内存大小,一般为 map 的两倍 --> <name>mapreduce.reduce.memory.mb</name> <value>8192</value> </property>

        每个 container 均会开启 JVM , JVM 的堆大小必须小于上面 Map 和 Reduce 的 memory 的配置。因此在 mapred-site.xml 中加入下面的配置:

    <property>
        <name>mapreduce.map.java.opts</name>
        <value>-Xmx3072m</value>
    </property>
    
    <property>
        <name>mapreduce.reduce.java.opts</name>
        <value>-Xmx6144m</value>
    </property>

       上面配置了 Map 和 Reduce 使用的物理内存的上限。map 和 reduce 任务使用的虚拟内存(physical + paged memory)由 yarn container 允许的 ratio 决定。这个ratio 可以在 yarn-site.xml 中进行配置(2.1 是默认值):

    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>2.1</value>
    </property>

       综上所述,每个 map 任务可获得如下的内存分配:

    (1) 物理 RAM = 4G

    (2)map 任务的 container 的 JVM 的堆大小上限 = 3G

    (3)虚拟内存上限 = 4*2.1 = 8.4G

    总的来说,以 yarn.nodemanager. 开头的配置,配置的是硬件资源相关的东西, yarn.scheduler. 开头的配置,配置的是资源调度相关的,其值不能大于 yarn.nodemanager 中相关的资源限制。

  • 相关阅读:
    如何将本地项目发布到gitee?
    spingboot使用redis连接池报错
    swagger2中UI界面接口点击无法展开问题解决
    idea在Mybatis的xml里面写sql时,表名、字段、报红问题的解决方法
    svn如何创建分支
    Java 反射修改类的常量值、静态变量值、属性值
    Vue简单入门
    Ajax原理简说
    《机器学习Python实现_10_15_集成学习_lightgbm_进一步优化》
    《机器学习Python实现_10_14_集成学习_xgboost_优化介绍》
  • 原文地址:https://www.cnblogs.com/langfanyun/p/10560767.html
Copyright © 2020-2023  润新知