一、问题现象:使用spark sql调用get_json_object函数后,报如下错误:yarn 容器被kill,导致任务失败,查看日志:Container killed by YARN for exceeding memory limits

使用spark命令:

/opt/software/spark-2.2.0-bin-hadoop2.6/bin/spark-sql \

--master yarn-client \

--driver-memory 2G \

--driver-cores 4  \

--num-executors 4 \

--executor-cores 4 \

--executor-memory 6G \

--conf "spark.default.parallelism=47"  \

--conf "spark.sql.shuffle.partitions=48" \

--conf "spark.sql.adaptive.enabled=true" \

--conf "spark.sql.adaptive.shuffle.targetPostShuffleInputSize=512000000"

二、问题分析过程:

1、既然executor内存不够,那么最先想到的就是增大executor-memory内存大小,从6G增大到12G  =》通过多次测试发现,有时任务能成功,有时还是报相同的错误,并且内存还越用越多

2、分析数据量发现其实并不大,也就几十万。以前上千万的数据量都不需要这么多内存。因此怀疑是get_json_object函数引起的问题

3、去掉get_json_object函数,果然任务非常流畅,而且内存调回6G依然是成功的

4、突然灵光一闪,spark.yarn.executor.memoryOverhead这个参数是spark excutor的堆外内存,用于 VM overheads, interned strings, other native overheads, etc。猜想get_json_object应该主要是用的堆外内存

5、spark.yarn.executor.memoryOverhead默认等于max( executorMemory * 0.10,384M),那么增大executorMemory再多,堆外内存实际增加的也比较少,因此考虑直接增大spark.yarn.executor.memoryOverhead值

6、设置spark.yarn.executor.memoryOverhead等于6G,executor-memory减少到4G,经过测试,任务非常稳定的成功

三、问题结论及终极解决方案:

原因分析:该问题是由于get_json_object使用的是堆外内存,默认堆外内存只有max( executorMemory * 0.10,384M),

可根据Container killed by YARN for exceeding memory limits. 19.9 GB of 14 GB physical memory used,这里的19.9G估算出堆外内存实际需要19.9G*0.1约等于1.99G,因此最少应该设置spark.yarn.executor.memoryOverhead为2G,

为保险起见,我最后设置成了4G,脚本如下:

/opt/software/spark-2.2.0-bin-hadoop2.6/bin/spark-sql \

--master yarn-client \

-d operate_date=$operate_date  -d partition_day=$partition_day \

-f $one \

--name sparksql-$one \

--driver-memory 2G \

--driver-cores 4  \

--num-executors 4 \

--executor-cores 4 \

--executor-memory 4G \

--conf "spark.yarn.executor.memoryOverhead=4G" \

--conf "spark.default.parallelism=47"  \

--conf "spark.sql.shuffle.partitions=48" \

--conf "spark.sql.adaptive.enabled=true" \

--conf "spark.sql.adaptive.shuffle.targetPostShuffleInputSize=512000000"

Container killed by YARN for exceeding memory limits常用解决方案:

1、增大executor-memory内存大小

2、增大spark.yarn.executor.memoryOverhead内存大小

具体选用那一种,效果更好,需要结合具体场景

记一次Spark中 Container killed by YARN for exceeding memory limits的解决过程相关推荐

  1. 记录:ERROR YarnScheduler: Lost executor 2 on XXX: Container killed by YARN for exceeding memory limits

    文章目录 问题描述 解决办法 1. 确保不是数据倾斜 2. 利用cache,算子调优 3. 资源调优 问题描述 最近在pyspark处理90多G数据的时候,遇到这个问题,特此记录,希望能够帮到你 首先 ...

  2. Spark 运行内存不足Not enough space to cache rdd in memory,Container killed by YARN for exceeding memory

    日志报错(WARN类型最后执行成功可以忽略): 19/04/15 12:35:37 INFO memory.MemoryStore: Will not store rdd_2_5119/04/15 1 ...

  3. Spark 中 JVM 内存使用及配置详情、spark报错与调优、Spark内存溢出OOM异常

    一般在我们开发spark程序的时候,从代码开发到上线以及后期的维护中,在整个过程中都需要涉及到调优的问题,即一开始需要考虑如何把代码写的更简洁高效调优(即代码优化),待开发测试完成后,提交任务时综合考 ...

  4. Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数

    Spark中Task,Partition,RDD.节点数.Executor数.core数目的关系和Application,Driver,Job,Task,Stage理解 from:https://bl ...

  5. Spark中资源与任务的关系

    在介绍Spark中的任务和资源之前先解释几个名词: Dirver Program:运行Application的main函数(用户提交的jar包中的main函数)并新建SparkContext实例的程序 ...

  6. Container killed by the ApplicationMaster, Exit code is 143

    之前发现在map任务里面经常看到Container killed by the ApplicationMaster,挺奇怪,不过任务最终是成功的,就没怎么管.不过最近测试集群跑的任务报143错误,还是 ...

  7. Spark中的内存计算是什么?

    由于计算的融合只发生在 Stages 内部,而 Shuffle 是切割 Stages 的边界,因此一旦发生 Shuffle,内存计算的代码融合就会中断. 在 Spark 中,内存计算有两层含义: 第一 ...

  8. Java查询spark中生成的文件_java+spark-sql查询excel

    Spark官网下载Spark 下载Windows下Hadoop所需文件winutils.exe 同学们自己网上找找吧,这里就不上传了,其实该文件可有可无,报错也不影响Spark运行,强迫症可以下载,本 ...

  9. Spark中常用的算法

    Spark中常用的算法: 3.2.1 分类算法 分类算法属于监督式学习,使用类标签已知的样本建立一个分类函数或分类模型,应用分类模型,能把数据库中的类标签未知的数据进行归类.分类在数据挖掘中是一项重要 ...

  10. 解决spark中遇到的数据倾斜问题

    一. 数据倾斜的现象 多数task执行速度较快,少数task执行时间非常长,或者等待很长时间后提示你内存不足,执行失败. 二. 数据倾斜的原因 常见于各种shuffle操作,例如reduceByKey ...

最新文章

  1. [导入]ExtJs 2.0 弹窗事例
  2. 如何快速get到AI工程师面试重点,这12道题必备!
  3. Asp.Net MVC 自定义的MVC框架(非EF操作数据库)
  4. Eclipse上的项目分享到GitHub
  5. 【Netty】NIO 网络通信 SelectionKey 常用 API 简介
  6. [YTU]_2428(C语言习题 计算该日在本年中是第几天)
  7. Redis 开发陷阱及避坑指南!
  8. 自定义视图 视图控制器(UIViewController)
  9. 更效率、更优雅 | 阿里巴巴开发者工具不完全盘点
  10. 【JAVA 第三章 流程控制语句】课后习题 输出正整数的顺序相反数
  11. pandas.describe()参数的意义
  12. 棋盘覆盖-分治法(代码实现)
  13. MyBatis3源码解析(1)探索准备
  14. VB 两种方法建立多级目录
  15. Java第四次作业,面向对象高级特性(继承和多态)
  16. 万字干货:阿里巴巴是怎么做大数据算法应用测试的? | 凌云时刻
  17. c语言程序设计第三版朱立华主编课后答案,C语言程序设计习题解析与实验指导...
  18. BeX5安装遇到问题
  19. nrf52840 spi 32MHz配置
  20. 如何编写python爬虫_如何完整写一个爬虫框架

热门文章

  1. Android 语言码_国家码
  2. 自动填充 superView的左边和下面
  3. 算法:工作窃取算法(work-stealing)。
  4. 关于app的几个核心功能的设计想法
  5. Python的三元运算符
  6. 微信小程序 关于头像上传,showActionSheet,chooseImage,uploadFile
  7. 致远OA-A8系统的0day远程命令执行的实战
  8. java正则匹配英文_匹配英文句子的正则表达式
  9. p站,一个神奇的网站
  10. Python 错误 RuntimeError: CUDA error (10): invalid device ordinal