zoukankan      html  css  js  c++  java
  • spark on yarn运行机制和资源分配

    http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/

     

    http://blog.csdn.net/xiangxizhishi/article/details/79102860

     

    https://www.cnblogs.com/wonglu/p/8459694.html

     

    http://blog.csdn.net/u010657789/article/details/52623107

     

    http://blog.csdn.net/zhongyuan_1990/article/details/79064191

     

      

     这里是转别人的博客,感谢作者的幸苦。

    为的是说明spark on yarn的基本机制和参数

    spark on yarn的那些事 ---第一篇

     

    1. spark on yarn后一个spark application资源使用情况如何?

    在不考虑动态分配spark资源的情况下: 一个spark application程序资源主要分为两部分:driver + executor,下面分别以client、cluster模式说明:

     

    client模式:

    spark driver启动在本地,而YARN Application Master启动在集群的某个节点中,所以要设置driver的资源必须要在启动时设定。AM仅用作资源管理。

         driver资源:(因为是本地的JVM程序,并没有运行在容器中,不能做到cpu资源的隔离)

              --driver-memory(也可以使用spark.driver.memory)

         AM资源:

              spark.yarn.am.cores

              spark.yarn.am.memory

              spark.yarn.am.memoryOverhead

         executor资源:    

              spark.executor.cores

              spark.executor.memory

              spark.yarn.executor.memoryOverhead  

              spark.executor.instances

    故而:

         一个spark application所使用的资源为:

    cores = spark.yarn.am.cores + spark.executor.cores * spark.executor.instances

    memory = spark.yarn.am.memory + spark.yarn.am.memoryOverhead + (spark.executor.memory + spark.yarn.executor.memoryOverhead) * spark.executor.instances + --driver-memory

     

    cluster模式:

    spark driverYARN Application Master运行在同一个JVM中,所以driver的资源参数也意味着控制着YARN AM的资源。

    通过spark.yarn.submit.waitAppCompletion设置为false使spark client(运行在本地JVM中)提交完任务就退出,下面将不考虑其资源使用情况:

         driver(AM)资源:

              spark.driver.cores

              spark.driver.memory

              spark.yarn.driver.memoryOverhead

         executor:

              spark.executor.cores

              spark.executor.memory

              spark.yarn.executor.memoryOverhead

              spark.executor.instances

    故而:

         一个spark application所使用的资源为:

    cores = spark.driver.cores + spark.executor.cores * spark.executor.instances

    memory = spark.driver.memory + spark.yarn.driver.memoryOverhead + (spark.executor.memory + spark.yarn.executor.memoryOverhead) * spark.executor.instances

     

    总上所述:

         client模式,AM和executor运行在yarn的container中;cluster模式,AM(和spark driver共享JVM)executor运行在yarn的container中,可以享用container的资源隔离机制。

     

     

    这里是重点

    1. 运行在yarn container中的程序资源域值如何?

         首先,运行在yarn container中的程序,其可使用的资源域值受container限制,即:

    each container mem:

         yarn.scheduler.minimum-allocation-mb

         yarn.scheduler.maximum-allocation-mb

    each container vcore:

         yarn.scheduler.minimum-allocation-vcores

         yarn.scheduler.maximum-allocation-vcores

    PS:

    每个物理节点上的可以被nodemanager管理的资源受限于

    total container mem:

         yarn.nodemanager.resource.memory-mb

    total container vcore:

         yarn.nodemanager.resource.cpu-vcores(无法限制yarn可以管理的vcore,只是表示这么多vcore可以用于RM scheduler分配给container的)

    必须保证这些值大于单个container的资源使用值。

         其次,运行在yarn container中的程序,其可使用的资源域值受自身参数限制。比如说spark的进程要求最小内存512MB,分配到1个core。

     

         3.  分配给executor的core是如何被使用的?

    private val tasksPerExecutor = conf.getInt("spark.executor.cores", 1) / conf.getInt("spark.task.cpus", 1)

         executor将她拥有的全部core,按照每一个任务需要的core数目,分配给这个executor上的任务。

     

     

     

    下面是我个人的一点总结::

           对应的cpu和内存的设置,一定不能超过父级角色的资源限制。

    1、container是运行在nodemanager节点中的,所以其资源配置不能大于节点设置的可用资源值。

         

    2、task任务是运行在container中的,所以每个task资源配置不能大于container设置的可用资源值。一个container中可以运行多个task任务。

     

    3、spark on yarn模式多了一个executor在container中运行task。所以executor受到container的资源限制。

     

    以上限制用参数表示:

        内存::  yarn.nodemanager.resource.memory-mb  >  spark.yarn.executor.memoryOverheadspark.executor.memory )  >  yarn.scheduler.maximum-allocation-mb

        cpu::   yarn.nodemanager.resource.cpu-vcores  >  ( spark.executor.cores )  >  yarn.scheduler.maximum-allocation-mb

    标记颜色的是spark对应的提交参数

     

     

  • 相关阅读:
    sublime设置node.js编译
    Markdown基本语法规范
    vue2.0学习笔记之组件
    使用let声明变量的理解
    vue2.0学习笔记之路由(二)路由嵌套+动画
    vue2.0学习笔记之路由(二)路由嵌套
    设置webstorm支持ES6语法
    vue2.0环境搭建
    bower包管理工具
    【转】jquery cookie操作
  • 原文地址:https://www.cnblogs.com/double-kill/p/8547616.html
Copyright © 2011-2022 走看看