起因

新接触一个spark集群,明明集群资源(core,内存)还有剩余,但是提交的任务却申请不到资源。

分析

环境

spark 2.2.0

基于yarn集群

参数

spark任务提交参数中最重要的几个:

spark-submit --master yarn --driver-cores 1 --driver-memory 5G --executor-cores 2 --num-executors 16 --executor-memory 4G

driver-cores driver端核数

driver-memory driver端内存大小

executor-cores 每个执行器的核数

num-executors 此任务申请的执行器总数

executor-memory 每个执行器的内存大小

那么,该任务将申请多少资源呢?

申请的执行器总内存数大小=num-executor * (executor-memory +spark.yarn.executor.memoryOverhead) = 16 * (4 + 2) = 96

申请的总内存=执行器总内存+dirver端内存=101

申请的总核数=num-executor*executor-core + yarn.AM(默认为1)=33

运行的总容器(contanier) = num-executor + yarn.AM(默认为1) = 17

所以这里还有一个关键的参数 spark.yarn.executor.memoryOverhead

这个参数是什么意思呢?

堆外内存,每个executor归spark 计算的内存为executor-memory,每个executor是一个单独的JVM,这个JAVA虚拟机本向在的内存大小即为spark.yarn.executor.memoryOverhead,不归spark本身管理。在spark集群中配置。也可在代码中指定

spark.set("spark.yarn.executor.memoryOverhead", 1)

这部份实际上是存放spark代码本身的究竟,在executor-memory内存不足的时候也能应应急顶上。

问题所在

假设一个节点16G的内存,每个executor-memory=4,理想情况下4x4=16,那么该节点可以分配出4个节点供spark任务计算所用。

1.但应考虑到spark.yarn.executor.memoryOverhead.

如果spark.yarn.executor.memoryOverhead=2,那么每个executor所需申请的资源为4+2=6G,那么该节点只能分配2个节点,剩余16-6x2=4G的内存,无法使用。

如果一个集群共100个节点,用户将在yarn集群主界面看到,集群内存剩余400G,但一直无法申请到资源。

2.core也是一样的道理。

很多同学容易忽略spark.yarn.executor.memoryOverhead此参数,然后陷入怀疑,怎么申请的资源对不上,也容易陷入优化的误区。

优化结果

最终优化结果,将spark.yarn.executor.memoryOverhead调小,并根据node节点资源合理优化executor-memory,executor-core大小,将之前经常1.6T的内存占比,降到1.1左右。并能较快申请到资源。

一次spark任务提交参数的优化的更多相关文章

  1. spark作业提交参数设置(转)

    来源:https://www.cnblogs.com/arachis/p/spark_parameters.html 摘要 1.num-executors 2.executor-memory 3.ex ...

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

    当在YARN上运行Spark作业,每个Spark executor作为一个YARN容器运行.Spark可以使得多个Tasks在同一个容器里面运行. 以下参数配置为例子: spark-submit -- ...

  3. Spark性能调优篇一之任务提交参数调整

    问题一:有哪些资源可以分配给spark作业使用? 答案:executor个数,cpu per exector(每个executor可使用的CPU个数),memory per exector(每个exe ...

  4. spark源码分析以及优化

    第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...

  5. Spark 3.x Spark Core详解 & 性能优化

    Spark Core 1. 概述 Spark 是一种基于内存的快速.通用.可扩展的大数据分析计算引擎 1.1 Hadoop vs Spark 上面流程对应Hadoop的处理流程,下面对应着Spark的 ...

  6. Spark学习(四) -- Spark作业提交

    标签(空格分隔): Spark 作业提交 先回顾一下WordCount的过程: sc.textFile("README.rd").flatMap(line => line.s ...

  7. Spark集群模式&Spark程序提交

    Spark集群模式&Spark程序提交 1. 集群管理器 Spark当前支持三种集群管理方式 Standalone-Spark自带的一种集群管理方式,易于构建集群. Apache Mesos- ...

  8. 【Spark-core学习之四】 Spark任务提交

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  9. spark任务提交到yarn上命令总结

    spark任务提交到yarn上命令总结 1. 使用spark-submit提交任务 集群模式执行 SparkPi 任务,指定资源使用,指定eventLog目录 spark-submit --class ...

  10. Spark开发常用参数

    Driver spark.driver.cores driver端分配的核数,默认为1,thriftserver是启动thriftserver服务的机器,资源充足的话可以尽量给多. spark.dri ...

随机推荐

  1. python -m pip install --upgrade pip 解决升级不成功问题

    使用pip 提示更新: You are using pip version 18.1, however version 20.0.2 is available. You should consider ...

  2. Git系列 -> git commit 报错 “Invalid syntax in configuration ini file.”

    git commit 报错 提示信息为 "Invalid syntax in configuration ini file." 解决办法: 方法一:使用-n or --no-ver ...

  3. 【JavaScript】JS写法随笔(二) JS动态生成表格

    主要思路:通过Ajax请求后端接口并拿到结果list之后,然后通过DOM获取tbody并向tbody中添加行.单元格. $("#calculate").click(function ...

  4. 解决linux时间转换为yyyy-MM-dd

    linux时间显示为:Tue Nov 30 09:33:04 CST 2021 SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd ...

  5. c++ read and save txt

    read and save #include "util/image_util.h" #ifdef USE_PANGOLIN_VIEWER #include "pango ...

  6. 面向对象1(Java)

    什么是面向对象 面向对象编程(oop) 面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据 抽象 三大特征:封装.继承.多态 从认识论角度考虑是先有对象后有类.对象是具体的事物.类是抽 ...

  7. vue+element 表格动态列添加点击事件与排序(/或者空值排最后)

    <template> <div> <el-table     ref="tableData"       :data="tableData& ...

  8. 免费Linux RDP,用来练习linux或者Python,还能做成远程桌面

        分类:资源| 阅读:1103次阅读 goorm提供了免费的Linux容器,用它来在线练习命令行是非常不错的. 它的注册非常简单:https://ide.goorm.io/ 直接用谷歌账号登录即 ...

  9. 2022-03-02英语精读(Returning Youths)

    今天早上没写代码,记录一下英语学习吧~ flee to sw/ from sb(sth)----coastal city-----get one's break----clinch a job/ de ...

  10. Nexus系列---【使用docker搭建nexus3仓库】

    1.Docker搭建nexus3私服 如果机器配置比较低,建议指定初始内存大小,默认2G docker run -d \ --restart=always \ --name=nexus3 \ -p 6 ...