记一次Spark中 Container killed by YARN for exceeding memory limits的解决过程
一、问题现象:使用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的解决过程相关推荐
- 记录:ERROR YarnScheduler: Lost executor 2 on XXX: Container killed by YARN for exceeding memory limits
文章目录 问题描述 解决办法 1. 确保不是数据倾斜 2. 利用cache,算子调优 3. 资源调优 问题描述 最近在pyspark处理90多G数据的时候,遇到这个问题,特此记录,希望能够帮到你 首先 ...
- 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 ...
- Spark 中 JVM 内存使用及配置详情、spark报错与调优、Spark内存溢出OOM异常
一般在我们开发spark程序的时候,从代码开发到上线以及后期的维护中,在整个过程中都需要涉及到调优的问题,即一开始需要考虑如何把代码写的更简洁高效调优(即代码优化),待开发测试完成后,提交任务时综合考 ...
- Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数
Spark中Task,Partition,RDD.节点数.Executor数.core数目的关系和Application,Driver,Job,Task,Stage理解 from:https://bl ...
- Spark中资源与任务的关系
在介绍Spark中的任务和资源之前先解释几个名词: Dirver Program:运行Application的main函数(用户提交的jar包中的main函数)并新建SparkContext实例的程序 ...
- Container killed by the ApplicationMaster, Exit code is 143
之前发现在map任务里面经常看到Container killed by the ApplicationMaster,挺奇怪,不过任务最终是成功的,就没怎么管.不过最近测试集群跑的任务报143错误,还是 ...
- Spark中的内存计算是什么?
由于计算的融合只发生在 Stages 内部,而 Shuffle 是切割 Stages 的边界,因此一旦发生 Shuffle,内存计算的代码融合就会中断. 在 Spark 中,内存计算有两层含义: 第一 ...
- Java查询spark中生成的文件_java+spark-sql查询excel
Spark官网下载Spark 下载Windows下Hadoop所需文件winutils.exe 同学们自己网上找找吧,这里就不上传了,其实该文件可有可无,报错也不影响Spark运行,强迫症可以下载,本 ...
- Spark中常用的算法
Spark中常用的算法: 3.2.1 分类算法 分类算法属于监督式学习,使用类标签已知的样本建立一个分类函数或分类模型,应用分类模型,能把数据库中的类标签未知的数据进行归类.分类在数据挖掘中是一项重要 ...
- 解决spark中遇到的数据倾斜问题
一. 数据倾斜的现象 多数task执行速度较快,少数task执行时间非常长,或者等待很长时间后提示你内存不足,执行失败. 二. 数据倾斜的原因 常见于各种shuffle操作,例如reduceByKey ...
最新文章
- [导入]ExtJs 2.0 弹窗事例
- 如何快速get到AI工程师面试重点,这12道题必备!
- Asp.Net MVC 自定义的MVC框架(非EF操作数据库)
- Eclipse上的项目分享到GitHub
- 【Netty】NIO 网络通信 SelectionKey 常用 API 简介
- [YTU]_2428(C语言习题 计算该日在本年中是第几天)
- Redis 开发陷阱及避坑指南!
- 自定义视图 视图控制器(UIViewController)
- 更效率、更优雅 | 阿里巴巴开发者工具不完全盘点
- 【JAVA 第三章 流程控制语句】课后习题 输出正整数的顺序相反数
- pandas.describe()参数的意义
- 棋盘覆盖-分治法(代码实现)
- MyBatis3源码解析(1)探索准备
- VB 两种方法建立多级目录
- Java第四次作业,面向对象高级特性(继承和多态)
- 万字干货:阿里巴巴是怎么做大数据算法应用测试的? | 凌云时刻
- c语言程序设计第三版朱立华主编课后答案,C语言程序设计习题解析与实验指导...
- BeX5安装遇到问题
- nrf52840 spi 32MHz配置
- 如何编写python爬虫_如何完整写一个爬虫框架
热门文章
- Android 语言码_国家码
- 自动填充 superView的左边和下面
- 算法:工作窃取算法(work-stealing)。
- 关于app的几个核心功能的设计想法
- Python的三元运算符
- 微信小程序 关于头像上传,showActionSheet,chooseImage,uploadFile
- 致远OA-A8系统的0day远程命令执行的实战
- java正则匹配英文_匹配英文句子的正则表达式
- p站,一个神奇的网站
- Python 错误 RuntimeError: CUDA error (10): invalid device ordinal