脑补|yarn能并行运行任务总数~

2023-10-09 03:08

本文主要是介绍脑补|yarn能并行运行任务总数~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近知识星球没动静主要原因是知识星球他们在做系统升级,我也很无奈,由此给球友带来的不安,深感抱歉。

前几天球友问了我一个问题:

请问浪总,集群400GB内存,提交了10个任务后就不能继续提交任务了,
资源还剩余300GB,CPU也很充足,完全满足新任务的资源,为啥就不能提交新任务了呢???

各位同仁也可以先思考一下可能的原因及解决方案。

估计很多人会说:

 

很明显,新任务申请的资源,大于了可提供的资源了~

但是这位球友说的很清楚了,剩余的资源很充足,完全可以提供新任务所需的资源。

知识点小贴士~

对spark on yarn研究比较多的朋友都应该发现过你明明给executor申请了1GB内存,结果发现该executor占用了yarn的2GB内存。

其实,对于spark的driver和executor在申请内存的时候有个计算公式:

spark.yarn.am.memoryOverhead 
除了指定的申请资源外额外申请(yarn-client模式):
AM memory * 0.10, with minimum of 384

spark.driver.memoryOverhead
除了指定的申请资源外,额外申请:
driverMemory * 0.10, with minimum of 384

spark.executor.memoryOverhead
除了指定的申请资源外,额外申请:
executorMemory * 0.10, with minimum of 384

由于1GB*0.10才100MB,所以会是1GB+384MB<2GB,不符合预期。实际上这个还依赖于yarn的内存调度粒度。resourcemanager的参数:
 

最小值
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
最大值
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>20480</value>
</property>

默认yarn的调度最小单元就是1GB,所以结果就是使你原本申请1GB(+额外内存)的内存变为了2GB。

读到这里估计很多同学该说了,这个我了解但是貌似跟yarn最大并行度没什么关系呀?别急!

重磅来袭~

其实,yarn为了很方便控制在运行的任务数,也即是处于running状态任务的数目,提供了一个重要的参数配置,但是很容易被忽略。

 

<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.1</value>
<description> Maximum percent of resources in the cluster which can be used to run application masters i.e. controls number of concurrent running applications. </description>
</property>

配置文件是:hadoop-2.7.4/etc/hadoop/capacity-scheduler.xml

参数含义很明显就是所有AM占用的总内存数要小于yarn所管理总内存的一定比例,默认是0.1。

也即是yarn所能同时运行的任务数受限于该参数和单个AM的内存。

那么回归本话题,可以看看该同学所能申请的AM总内存的大小是:

400GB*0.1=40GB。

但是,该同学配置的yarn的内存调度最小单元是4GB,这样虽然他申请的任务AM每个都是1GB,但是由于调度单位是4GB,所以在这里实际内存就是4GB,刚好10个任务40GB,也就不能提交第11个任务了。

所以需要将调度内存调到默认值1GB,其实一般情况下没必要调整,然后将AM总内存占比提高,比如1,即可。

好了,更多优良知识欢迎加入浪尖知识星球。

推荐阅读:

spark面试该准备点啥

不可不知的spark shuffle

640?wx_fmt=png

这篇关于脑补|yarn能并行运行任务总数~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169910

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro