spark on yarn的cpu使用

在yarn-site.xml中,可以配置virutal core的个数,请注意不是physical core的个数,相关配置如下:

<property>

<name>yarn.nodemanager.resource.cpu-vcores</name>

<value>30</value>

<description>NodeManager总的可用虚拟CPU个数</description>

</property>

virutal core的概念是将所有physical cpu组成8个可调度的队列,linux使得有任务的时候每个physical cpu都能够调度,达到负载均衡。假设一台pc有16个physical cpu,当只有一个container的时候,这个container会使用这16个cpu,如果有2个container则每个container各占用8个physical cpu

spark运行的时候,通过--executor-cores指定的cpu个数都是vcore的个数,所以spark on yarn运行程序的时候,虽然通过--executor-cores指定vcore个数为1,但是所有的cpu都是很忙被占用。

yarn默认情况下,只根据内存调度资源,所以spark on yarn运行的时候,即使通过--executor-cores指定vcore个数为N,但是在yarn的资源管理页面上看到使用的vcore个数还是1. 相关配置在capacity-scheduler.xml 文件:

<property>
    <name>yarn.scheduler.capacity.resource-calculator</name>
    <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
    <description>
      The ResourceCalculator implementation to be used to compare
      Resources in the scheduler.
      The default i.e. DefaultResourceCalculator only uses Memory while
      DominantResourceCalculator uses dominant-resource to compare
      multi-dimensional resources such as Memory, CPU etc.
    </description>
  </property>

要想--executor-cores的是指起效,得修改这项配置为:

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

这样就可以起效果了

cpu调度的时候,需要启动CGroups机制来达到cpu进程隔离的效果,但是windows不支持CGroups机制

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 13:38:05

spark on yarn的cpu使用的相关文章

Spark On YARN内存和CPU分配

本篇博客参考:http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/ 软件版本: CDH:5.7.2,JDK:1.7: 问题描述: 在使用Spark On YARN时(无论是Client模式或者是Cluster模式,当然下面会有这种模式的对比区别),可以添加诸如: --executor-memory 8G --executor-cores 5 --num-executors 20 等等这样的

Spark on Yarn彻底解密(DT大数据梦工厂)

内容: 1.Hadoop Yarn的工作流程解密: 2.Spark on Yarn两种运行模式实战: 3.Spark on Yarn工作流程解密: 4.Spark on Yarn工作内幕解密: 5.Spark on Yarn最佳实践: 资源管理框架Yarn Mesos是分布式集群的资源管理框架,和大数据没关系,但是可以管理大数据的资源 ==========Hadoop Yarn解析============ 1.Yarn是Hadoop推出的资源管理器,是负责分布式(大数据)集群计算的资源管理的,负

Spark on Yarn: Cluster模式Scheduler实现

背景 主体逻辑 具体实现 AM YarnAllocator Executor 背景 Spark on Yarn分yarn-cluster和yarn-client两种模式. 本文通过Cluster模式的TaskScheduler实现入手,梳理一遍spark on yarn的大致实现逻辑. 前提我对两种模式以及yarn任务的整体运行逻辑不是很清楚. 主体逻辑 cluster模式中,使用的TaskScheduler是YarnClusterScheduler. 它继承了默认使用的TaskSchedule

&lt;YARN&gt;&lt;MRv2&gt;&lt;Spark on YARN&gt;

MRv1 VS MRv2 MRv1: - JobTracker: 资源管理 & 作业控制- 每个作业由一个JobInProgress控制,每个任务由一个TaskInProgress控制.由于每个任务可能有多个运行实例,因此,TaskInProgress实际管理了多个运行实例TaskAttempt,每个运行实例可能运行了一个MapTask或ReduceTask.每个Map/Reduce Task会通过RPC协议将状态汇报给TaskTracker,再由TaskTracker进一步汇报给JobTrac

Spark on Yarn 架构解析

. 一.Hadoop Yarn组件介绍: 我们都知道yarn重构根本的思想,是将原有的JobTracker的两个主要功能资源管理器 和 任务调度监控 分离成单独的组件.新的架构使用全局管理所有应用程序的计算资源分配. 主要包含三个组件ResourceManager .NodeManager和ApplicationMaster以及一个核心概念Container. 1.ResourceManager(RM)  就是所谓的资源管理器,每个集群一个,实现全局的资源管理和任务调度.它可以处理客户端提交计算

Spark On YARN内存分配

本文转自:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 此文解决了Spark yarn-cluster模式运行时,内存不足的问题. Spark yarn-cluster模式运行时,注意yarn.app.mapreduce.am.resource.mb的设置.默认为1G Spark On YARN内存分配 本文主要了解Spark On YARN部署模式下的内存分配情况,因为没有

Spark on Yarn:任务提交参数配置

当在YARN上运行Spark作业,每个Spark executor作为一个YARN容器运行.Spark可以使得多个Tasks在同一个容器里面运行. 以下参数配置为例子: spark-submit --master yarn-cluster   #使用集群调度模式(一般使用这个参数) --num-executors  132      # executor 数量 --executor-cores  2        #设置单个executor能并发执行task数,根据job设置,推荐值2-16 (

Spark源码系列(七)Spark on yarn具体实现

本来不打算写的了,但是真的是闲来无事,整天看美剧也没啥意思.这一章打算讲一下Spark on yarn的实现,1.0.0里面已经是一个stable的版本了,可是1.0.1也出来了,离1.0.0发布才一个月的时间,更新太快了,节奏跟不上啊,这里仍旧是讲1.0.0的代码,所以各位朋友也不要再问我讲的是哪个版本,目前为止发布的文章都是基于1.0.0的代码. 在第一章<spark-submit提交作业过程>的时候,我们讲过Spark on yarn的在cluster模式下它的main class是or

Spark on Yarn年度知识整理

大数据体系结构: Spark简介 Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子,如filter.join.groupByKey等.是一个用来实现快速而同用的集群计算的平台. Spark将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度.RPC.序列化和压缩,并为运行在其上的上层组件提供API.其底层采用Scala这种函数式语言书写而成,并且所提供的API深度借鉴Sca