【问题标题】:Hadoop Adding More Than 1 Core Per Container on Hadoop 2.7Hadoop 在 Hadoop 2.7 上为每个容器添加超过 1 个核心
【发布时间】:2015-10-16 15:56:06
【问题描述】:

我听说有一种方法可以向 Hadoop 2.7 纱线中的 1 个容器添加 32 个内核或任何你拥有的内核。

这可能吗?有人有我需要更改以实现此目的的示例配置吗?

测试将是 terasort,将我的 40 个内核添加到 1 个容器作业中。

【问题讨论】:

    标签: hadoop mapreduce hadoop-yarn


    【解决方案1】:

    以下是 vCore 的配置:

    yarn.scheduler.maximum-allocation-vcores - 指定每个容器请求的最大 vCore 分配

    通常在 yarn-site.xml 中将此值设置为 32。我认为,任何大于 32 的值都会被 YARN 拒绝。

      <property>
        <name>yarn.scheduler.maximum-allocation-vcores</name>
        <value>32</value>
      </property>
    

    如果未设置此值,则 YARN RM 采用默认值,即“4”

    public static final int DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES = 4;
    

    如果您正在运行 MapReduce 应用程序,那么您还需要在 ma​​pred-site.xml 中设置另外两个配置参数:

    • ma​​preduce.map.cpu.vcores - 从调度程序请求映射任务的 vCore 数量
    • ma​​preduce.reduce.cpu.vcores - 为 reduce 任务从调度程序请求的 vCore 数量

    mapper/reducer 请求的资源计算在调度程序代码中完成。如果您希望调度程序同时考虑内存和 CPU 进行资源计算,那么您需要使用 "DominantResourceCalculator"(它同时考虑 CPU 和内存进行资源计算)

    例如如果您使用的是容量调度程序,那么您需要在“capacity-scheduler.xml”文件中指定以下参数:

      <property>
        <name>yarn.scheduler.capacity.resource-calculator</name>
        <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
      </property>
    

    请查看此链接:http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_yarn_tuning.html

    这里给出了各种配置参数的详细描述。

    【讨论】:

    • 我今天正在尝试这个,如果它有效,我会给你一个绿色。我不知道 32 核的限制,谢谢
    • 请在此处查看“yarn.scheduler.maximum-allocation-vcores”的描述:hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/…。它将 32 声明为默认值。您可以尝试使用 40 并检查。
    • 我一直在运行 40 并且似乎工作正常,但在我获得 32 个内核或 40 个在 1 个容器上工作之前,为了安全起见,我将只使用 32 个内核,然后我会升级如果确实有效,核心计数。谢谢!
    • 仍然显示每个容器 1 个核心。下面附上mapred xml。仍在进行中以使其工作..
    • 抱歉,我没有看到任何附件。我希望你也照顾调度程序设置。如果您不使用“DominantResourceCalculator”,则不会考虑使用 vCore 进行资源计算。只会考虑内存。
    【解决方案2】:

    老实说,我对 Hadoop 2.7 了解不多,但如果映射器能够利用更多线程,则可以通过设置这些属性来设置每个映射(或减少)容器的核心数在mapred-site.xml 文件中:

    ma​​preduce.map.cpu.vcores - 每个地图任务从调度程序请求的虚拟核心数。

    ma​​preduce.reduce.cpu.vcores - 为每个 reduce 任务从调度程序请求的虚拟核心数。

    请参考Hadoop documentation

    【讨论】:

    • 我参考了hadoop文档但没有相关信息。我尝试了上面我已经设置但两者都是设置@ 1,所以我改为 40 核但它仍然没有工作。
    • 也许问题出在其他地方。您是否知道典型的映射器只使用一个内核,因为它在单线程中运行?即使您为容器提供更多内核,它也会只使用一个。你能发布你的映射器的源代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2016-06-22
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多