脑补|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

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

如何在运行时修改serialVersionUID

优质博文:IT-BLOG-CN 问题 我正在使用第三方库连接到外部系统,一切运行正常,但突然出现序列化错误 java.io.InvalidClassException: com.essbase.api.base.EssException; local class incompatible: stream classdesc serialVersionUID = 90314637791991

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

Flink任务重启策略

概述 Flink支持不同的重启策略,以在故障发生时控制作业如何重启集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。常用的重启策略: 固定间隔 (Fixe

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

win7+ii7+tomcat7运行javaWeb开发的程序

转载请注明出处:陈科肇 1.前提准备: 操作系统:windows 7 旗舰版   x64 JDK:jdk1.7.0_79_x64(安装目录:D:\JAVA\jdk1.7.0_79_x64) tomcat:32-bit64-bit Windows Service Installer(安装目录:D:\0tomcat7SerV) tomcat-connectors:tomcat-connect

php 7之PhpStorm + Nginx + Xdebug运行调试

操作环境: windows PHP 7.1.10 PhpStorm-2017.2.4 Xdebug 2.5.4 Xdebug helper 1.6.1 nginx-1.12.2 注意查看端口占用情况 netstat -ano //查看所以端口netstat -aon|findstr "80" //查看指定端口占用情况 比如80端口查询情况 TCP 0.0.0.0:8

AsyncTask 异步任务解析

1:构建AsyncTask 子类的回调方法: A:doInBackground:   必须重写,所有的耗时操作都在这个里面进行; B: onPreExecute:     用户操作数据前的调用; 例如:显示一个进度条 等 ; C: onPostExecute:    当doInBackground 执行完成后;会自动把数据传给onPostExecute方法;也就是说:这个方法是处理返回的数据的方法

[轻笔记] ubuntu Shell脚本实现监视指定进程的运行状态,并能在程序崩溃后重启动该程序

根据网上博客实现,发现只能监测进程离线,然后对其进行重启;然而,脚本无法打印程序正常状态的信息。自己通过不断修改测试,发现问题主要在重启程序的命令上(需要让重启的程序在后台运行,不然会影响监视脚本进程,使其无法正常工作)。具体程序如下: #!/bin/bashwhile [ 1 ] ; dosleep 3if [ $(ps -ef|grep exe_name|grep -v grep|