关键词:yarn 资源分配 mapreduce spark


简要指南

适合不想看太多原理细节直接上手用的人。

基本原则:

  • container分配的内存不等于机器实际用掉的内存。NM给container分配的内存是预留这么多内存,但实际用多少取决于你的-Xmx加上你的堆外内存。大部分堆外内存使用不多的情况下,实际主要就是JVM堆内存。
  • container内存是按yarn.scheduler.minimum-allocation-mb的整数倍分配的,用户设置的内存不足整数倍会向上取整,并且不会超过 yarn.scheduler.maximum-allocation-mb 。
  • 还有一个增量概念 yarn.scheduler.increment-allocation-mb (默认1024m),即如果yarn.scheduler.minimum-allocation-mb设置较大,假设4g,那客户端申请了4.5G内存,按道理最终container内存是要变成 4+4=8g 的,但有增量内存1024m配置的话,分配内存时会尝试 4+1=5g 是否能满足,从而避免内存资源浪费。
  • 所有上线的任务都要手动设置资源配置,尤其是内存。

MapReduce:

  • mapreduce.map.memory.mb表示给map的container申请的最大内存,即container内存;mapreduce.map.java.opts则是设置jvm启动的实际参数,其中堆内存-Xmx也是在这里设置,不能超过mapreduce.map.memory.mb,一般设置为0.75倍的mapreduce.map.memory.mb(只是建议,不一定),留给堆外内存一点空间。reduce同理。

Spark 1.x:

关于Spark On YARN相关的配置参数,请参考Spark配置参数。一般主要关注以下几个参数:
  • spark.driver.memory:默认值512m
  • spark.executor.memory:默认值512m
  • spark.yarn.am.memory:默认值512m
  • spark.yarn.executor.memoryOverhead:值为executorMemory * 0.07, with minimum of 384
  • spark.yarn.driver.memoryOverhead:值为driverMemory * 0.07, with minimum of 384
  • spark.yarn.am.memoryOverhead:值为AM memory * 0.07, with minimum of 384

  • --executor-memory/spark.executor.memory 控制 executor 的堆的大小,但是 JVM 本身也会占用一定的堆空间,比如内部的 String 或者直接 byte buffer,spark.yarn.XXX.memoryOverhead 属性决定向 YARN 请求的每个 executor 或dirver或am 的额外堆内存大小,默认值为 max(384, 0.07 * spark.executor.memory)。所以实际计算container内存的时候是 memory + memoryOverhead。
  • 在 executor 执行的时候配置过大的 memory 经常会导致过长的GC延时,内存并不是越大越好。

spark core分配:

  • 默认的yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator , 这种时候的vcore会按container个数分配,而不是实际的spark core数。即设置了5个executor,每个executor2个core,实际除去ApplicationMaster和spark driver,最后只有5个vcore。
  • 改成org.apache.hadoop.yarn.util.resource.DominantResourceCalculator,上述案例则会变成10个vcore。暂未测试和看代码确定是否能客户端配置生效,一般服务端配置,在ambari里或部分语境下,有时也叫CPU-schedule的ResourceCalculator,相比default版的只考虑memory,dominant的同时考虑了memory和cpu。

Reference(值得一读):

Resource Allocation of Yarn的更多相关文章

  1. Spark动态资源分配-Dynamic Resource Allocation

    微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理.OLAP分析与可视化平台 | 赞助作者:赞助作者 Spark动态资源分配-Dynamic Resource Allocation S ...

  2. Hadoop Aggregate Resource Allocation解释

    1.在hadoop里面运行程序的时候,查看某个任务的具体信息如下: [hadoop@master monitor]$ yarn application -list 如上图,这里面的Aggregate ...

  3. hdu 3288 Resource Allocation

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3288 Resource Allocation Description HDU-Sailormoon i ...

  4. 【转】Resource Localization in YARN

    一个Applciation运行在YARN上的流程为,从YARN Client向ResourceManager提交任务,将Applciation所需资源提交到HDFS中,然后ResourceManage ...

  5. Service Function Chaining Resource Allocation: A Survey

    摘要: 服务功能链(SFC)是未来Internet的一项关键技术. 它旨在克服当前部署模型的僵化和静态限制. 该技术的应用依赖于可以将SFC最佳映射到衬底网络的算法. 这类算法称为"服务功能 ...

  6. Solving Large-Scale Granular Resource Allocation Problems Efficiently with POP(2021-POP-SOSP-文献阅读笔记)

    读者 这篇文章来自2021的SOSP,单位是斯坦福大学和微软.选该文章的理由有二,一是资源分配的主题较为相关:二是文章结构.语言很清晰,读起来很舒服. 本文的中心思想可以概括为:分化瓦解,各个击破.即 ...

  7. YARN - Yet Another Resource Negotiator

    http://www.socc2013.org/home/program http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-ya ...

  8. PatentTips - Systems, methods, and devices for dynamic resource monitoring and allocation in a cluster system

    BACKGROUND  1. Field  The embodiments of the disclosure generally relate to computer clusters, and m ...

  9. Docker on YARN在Hulu的实现

    这篇文章是我来Hulu这一年做的主要工作,结合当下流行的两个开源方案Docker和YARN,提供了一套灵活的编程模型,目前支持DAG编程模型,将会支持长服务编程模型. 基于Voidbox,开发者可以很 ...

随机推荐

  1. 微服务之路由网关—zuul

    Zuul 简介Zuul 是 Netflix 公司开发的一个开源 APIGateway,其本质上是一个 WebServlet 应用.Zuul 的核心是一系列的 Filter. 为什么要使用 Zuul微服 ...

  2. Centos7 升级内核版本

    1.查看当前内核版本 $ uname -r -.el7.x86_64 $ uname -a Linux k8s-master -.el7.x86_64 # SMP Tue Nov :: UTC x86 ...

  3. 2018-2019-2 《Java程序设计》第3周学习总结

    20175319 2018-2019-2 <Java程序设计>第3周学习总结 教材学习内容总结 第三周通过课本与蓝墨云上的视频学习了<Java2实用教程>第四章类与对象 成功激 ...

  4. .net使用Aspose.Words进行Word替换操作的实现代码

    DLL文件下载 示例: Aspose.Words.Document doc = new Aspose.Words.Document(TempFile); Aspose.Words.DocumentBu ...

  5. Linux文件权限命令及配置

    http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html

  6. 使用Roslyn编译项目的示例

    using System; using System.Collections.Generic; using System.IO; using Microsoft.CodeAnalysis; using ...

  7. MYSQL实战

    基础架构 更新操作 日志模块 redo log 和 binlog 两阶段提交: prepare commit 事务隔离 读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到.读已提交:别人改数据 ...

  8. ubuntu 16.04 安装 kubelet、kubeadm 和 kubectl

    解决了***之后,就开始K8S安装的正式旅程,本次记录  kubelet.kubeadm 和 kubectl 的安装: apt-get update && apt-get instal ...

  9. 【原创】运维基础之Nginx(1)简介、安装、使用

    官方:http://nginx.org nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a ...

  10. 【原创】大叔经验分享(46)用户提交任务到yarn报错

    用户提交任务到yarn时有可能遇到下面的错误: 1) Requested user anything is not whitelisted and has id 980,which is below ...