MapReduce内存参数自动推断

MapReduce内存参数自动推断。在Hadoop 2.0中,为MapReduce作业设置内存参数非常繁琐,涉及到两个参数:mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts,一旦设置不合理,则会使得内存资源浪费严重,比如将前者设置为4096MB,但后者却是"-Xmx2g",则剩余2g实际上无法让java heap使用到。

对应patch MAPREDUCE-5785

相关知识

mapreduce.map.java.opts和mapreduce.map.memory.mb

mapreduce.map.java.opts和mapreduce.map.memory.mb参数之间,有什么联系呢?

mapreduce.map.memory.mb 是task 所申请container的内存限制。mapreduce.{map|reduce}.java.opts 是在container中运行 jvm的限制。

在yarn container这种模式下,JVM进程跑在container中,mapreduce.{map|reduce}.java.opts能够通过Xmx设置JVM最大的heap的使用,一般设置为0.75倍的memory.mb,因为需要为java code,非JVM内存使用等预留些空间

具体逻辑

mapreduce.map/reduce.memory.mb键的内存值如果保留为默认值-1,则现在将自动从为mapreduce.map/reduce.java.opts键指定的堆大小值系统属性(-Xmx)推断。

反之亦然,即如果指定了mapreduce.map/reduce.memory.mb值,但没有为 mapreduce.map/reduce.java.opts键提供-Xmx,则-Xmx值将从前者的值派生。

I

如果两者都未指定,mapreduce.map/reduce.memory.mb 则使用默认值1024 MB。

对于这两种转换,使用属性mapreduce.job.heap.memory-mb.ratio(默认是0.8)指定的比例因子,以说明堆使用与实际物理内存使用之间的开销。已显式指定这两组属性的现有任务或作业代码将不受此推断更改的影响。

公式

mapreduce.map/reduce.memory.mb *mapreduce.job.heap.memory-mb.ratio =mapreduce.map/reduce.java.opts

参数

xml 复制代码
<property>
  <name>mapreduce.job.heap.memory-mb.ratio</name>
  <value>0.8</value>
  <description>The ratio of heap-size to container-size. If no -Xmx is
    specified, it is calculated as
    (mapreduce.{map|reduce}.memory.mb * mapreduce.heap.memory-mb.ratio).
    If -Xmx is specified but not mapreduce.{map|reduce}.memory.mb, it is
    calculated as (heapSize / mapreduce.heap.memory-mb.ratio).
  </description>
</property>

主要代码

java 复制代码
public String getTaskJavaOpts(TaskType taskType) {
    String javaOpts = getConfiguredTaskJavaOpts(taskType);

    if (!javaOpts.contains("-Xmx")) {
      float heapRatio = getFloat(MRJobConfig.HEAP_MEMORY_MB_RATIO,
          MRJobConfig.DEFAULT_HEAP_MEMORY_MB_RATIO);

      if (heapRatio > 1.0f || heapRatio < 0) {
        LOG.warn("Invalid value for " + MRJobConfig.HEAP_MEMORY_MB_RATIO
            + ", using the default.");
        heapRatio = MRJobConfig.DEFAULT_HEAP_MEMORY_MB_RATIO;
      }

      int taskContainerMb = getMemoryRequired(taskType);
      int taskHeapSize = (int)Math.ceil(taskContainerMb * heapRatio);

      String xmxArg = String.format("-Xmx%dm", taskHeapSize);
      LOG.info("Task java-opts do not specify heap size. Setting task attempt" +
          " jvm max heap size to " + xmxArg);

      javaOpts += " " + xmxArg;
    }

    return javaOpts;
  }


  @Private
  public int getMemoryRequired(TaskType taskType) {
    int memory = 1024;
    int heapSize = parseMaximumHeapSizeMB(getConfiguredTaskJavaOpts(taskType));
    float heapRatio = getFloat(MRJobConfig.HEAP_MEMORY_MB_RATIO,
        MRJobConfig.DEFAULT_HEAP_MEMORY_MB_RATIO);
    if (taskType == TaskType.MAP)  {
      if (get(MRJobConfig.MAP_MEMORY_MB) == null && heapSize > 0) {
        memory = (int) Math.ceil(heapSize / heapRatio);
        LOG.info(MRJobConfig.MAP_MEMORY_MB +
            " not specified. Derived from javaOpts = " + memory);
      } else {
        memory = getInt(MRJobConfig.MAP_MEMORY_MB,
            MRJobConfig.DEFAULT_MAP_MEMORY_MB);
      }
    } else if (taskType == TaskType.REDUCE) {
      if (get(MRJobConfig.REDUCE_MEMORY_MB) == null && heapSize > 0) {
        memory = (int) Math.ceil(heapSize / heapRatio);
        LOG.info(MRJobConfig.REDUCE_MEMORY_MB +
            " not specified. Derived from javaOpts = " + memory);
      } else {
        memory = getInt(MRJobConfig.REDUCE_MEMORY_MB,
            MRJobConfig.DEFAULT_REDUCE_MEMORY_MB);
      }
    }

    return memory;
  }
相关推荐
2401_883041087 分钟前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
青云交10 分钟前
大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-1))(11/30)
大数据·计算资源·应用案例·数据交互·impala 性能优化·机器学习融合·行业拓展
Json_181790144803 小时前
An In-depth Look into the 1688 Product Details Data API Interface
大数据·json
Qspace丨轻空间5 小时前
气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
大数据·人工智能·安全·生活·娱乐
Elastic 中国社区官方博客6 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
Aloudata7 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
水豚AI课代表7 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
拓端研究室TRL10 小时前
【梯度提升专题】XGBoost、Adaboost、CatBoost预测合集:抗乳腺癌药物优化、信贷风控、比特币应用|附数据代码...
大数据
黄焖鸡能干四碗10 小时前
信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)
大数据·人工智能·软件需求·设计规范·规格说明书
编码小袁11 小时前
探索数据科学与大数据技术专业本科生的广阔就业前景
大数据