记录:ERROR YarnScheduler: Lost executor 2 on XXX: Container killed by YARN for exceeding memory limits
文章目录
- 问题描述
- 解决办法
- 1. 确保不是数据倾斜
- 2. 利用cache,算子调优
- 3. 资源调优
问题描述
最近在pyspark处理90多G数据的时候,遇到这个问题,特此记录,希望能够帮到你
首先你可能会有以下错误或警告:
Lost executor 2 on bjxg-bd-slave65: Container killed by YARN for exceeding memory limits. 60.1 GB of 55 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled because of YARN-4714
或者在执行行动算子的时候遇到这种问题:
在web UI你会看到,stage里有好多failed
解决办法
1. 确保不是数据倾斜
如果你用了groupby这样的分组聚合操作,数据量大了之后可能就会发生数据倾斜,导致某几个task的数据量特别大,超出分配的内存被kill,像这种情况只能是优化算子,比如两端聚合的方式解决,具体看:
https://blog.csdn.net/qq_42363032/article/details/119824492
2. 利用cache,算子调优
- 其次要确保你的惰性算子没有被重复的执行,利用cache或者persist,在行动算子之前进行缓存,当然也可以设置存储级别,详细的可自行百度
- 关于spark算子调优也是一堆,我只说我解决这个错误所用到的:
- 1.广播大变量broadcast,用完之后记得手动GC unpersist
- 2.尽量少用count、collect这种拉取到driver端的行动算子,可以在它俩之前加cache,用后upersist。为什么要之前加cache?因为spark惰性计算。
- 3.尽量避免大表join小表的shuffle操作,如果实在避免不了可以利用广播,这个也是一百度一大堆
- 4.在处理的时候,能通过select或filter减少shuffle的数据一定要提前减少,降低处理时内存占用和通信时间
- 5.确保你处理的数据是没有null的,我试过,如果有null的话,明显要比没有null的快,就算你填个空串也比null强
3. 资源调优
大家可以百度到,这种报错,很多都说加executor memory和executor memoryOverhead,加这个是没错,但是要确保你的整个处理流程,算子是想不到哪里还可以优化了,然后再加资源,这才是正确的调优逻辑。先分享我的资源:
ss = SparkSession(sc).builder \.config('spark.sql.shuffle.partitions', 3000) \.config('spark.driver.memoryOverhead', '30g') \.config('spark.driver.maxResultSize', '30g') \.config('spark.executor.memoryOverhead', '40g') \.config('spark.shuffle.io.maxRetries', 10) \.config('spark.shuffle.io.retryWait', 10) \.config('spark.default.parallelism', 30) \.config('spark.kryoserializer.buffer.max', 5120) \.config('spark.dynamicAllocation.enabled', 'true') \.config("spark.sql.execution.arrow.enabled", "true")\.config("spark.memory.fraction", 0.2)\.config('spark.sql.caseSensitive', 'true') \.getOrCreate()
PYSPARK_PYTHON=/data/anaconda3/bin/python3 \/opt/spark/bin/spark-submit \--master yarn \--deploy-mode client \--driver-memory 30g \--driver-cores 4 \--executor-memory 50g \--num-executors 6 \--executor-cores 5 \
driver-memory
、driver-cores
:字面意思driver的内存和核数,这个根据数据量和处理复杂度进行设置executor-memory
、num-executors
、executor-cores
:分别为executor的内存、数量、核数,也是根据要处理的数据量和复杂度进行设置,我这两相当于给了50 * 6的内存,6*5的核数相当于我rdd并行度最高是30,记得看到过一篇文章说executor-cores最好不要超过6,最好的是num-executors多一点spark.sql.shuffle.partitions
:spark sql的并行度,对于大数据来说高点还是有用的,能够轻微的防止数据倾斜,但是小数据的并行度尽量别太高,要不然跑的太慢,默认是200spark.driver.memoryOverhead
:driver的堆外内存spark.driver.maxResultSize
:它是所有分区序列化结果大小的总和,它不能大于你的executor-memory,在范围内增大可以防止内存不足spark.executor.memoryOverhead
:executor的堆外内存,我理解的它是executor所需的额外内存开销spark.default.parallelism
:rdd的并行度,它是你executor数量和核数的乘数,比如我这就是5*10spark.memory.fraction
:这个值一定要调,它默认是0.6,也就是40%的空间保留你的数据结构,元数据等,调到0.2,说明你有80%的空间保留你的这些数据。它可以在你cache的时候,先在磁盘,在再内存,相当于减少了缓存时用的内存。
如果帮到你,请你点赞支持
记录:ERROR YarnScheduler: Lost executor 2 on XXX: Container killed by YARN for exceeding memory limits相关推荐
- Unity3D error: ArgumentException: Key duplication when adding: XXX
今天使用 Unity 编译出现一个错误, 最后解决了,做个记录. error: ArgumentException: Key duplication when adding: XXX System.C ...
- npm install 提示权限不足 Error: EPERM: operation not permitted, unlink XXX
问题描述 使用npm install出现 npm install 提示权限不足 Error: EPERM: operation not permitted, unlink XXX提示 原因 这里原因有 ...
- greta的问题及解决: LIBCMTD.lib(_wctype.obj) : error LNK2005: _iswspace already defined in xxx.obj...
greta,一个开源正则表达式模板库: http://research.microsoft.com/projects/greta/ 在debug unicode multithread dll的时候, ...
- 安装Uikit时ERROR in Entry module not found: Error: Can't resolve './src' in 'xxx'的解决思路
yarn安装Uikit时遇到了ERROR in Entry module not found: Error: Can't resolve './src' in 'xxx'这个问题 反复查看官方文档依然 ...
- 解决MySQL删除外键时报错Error Code: 1091. Can‘t DROP ‘XXX‘; check that column/key exists
解决MySQL删除外键时报错Error Code: 1091. Can't DROP 'XXX'; check that column/key exists 长期不写基础的 MySQL 代码,笔者 ...
- 解决python中html 代码被注释掉 依旧被解释导致报错ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)
ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx) 注释的是Html代码,是给浏览器看的. Html里的代码还是要执行.注释python代码用{# ...
- 异常记录---Error creating bean with name ‘sqlSessionFactory‘
异常记录---Error creating bean with name 'sqlSessionFactory' 参考文章: (1)异常记录---Error creating bean with na ...
- canal 记录 数据变更类型 QUERY ROWDATA INSERT xxx XXXXX
canal 记录 数据变更类型 QUERY ROWDATA INSERT xxx XXXXX 10:40:11.355 [Thread-0] INFO org.canal.CanalClient - ...
- iOS:error: exportArchive:No certificate for team ‘xxx‘ matching ‘‘xxx found
打包上 appstore 的时候,报错: error: exportArchive:No certificate for team 'xxx' matching ''xxx found 发现本地钥匙串 ...
最新文章
- 【WP8】ResourceDictionary
- C语言函数集(十四)
- 2018-2019-1 20165234 实验三 并发程序
- 通信电子线路期末复习第六章 反馈控制电路
- ArrayList刷题总结
- hdu 1058 Humble Numbers
- mac 安装nodejs_阿里开源——用于前端和nodejs的轻量级任务管理和构建工具Dawn
- 【LeetCode笔记】剑指Offer 37. 序列化二叉树(Java、二叉树、序列化、BFS、队列)
- Matlab--三维散点插值成曲面
- 关于ArcGIS动态图层空间内栅格数据,JS前端显示颜色不正确的解决方案
- python multiprocessing遇到Can’t pickle instancemethod问题
- 解决VS 2017/2019社区版无法登陆的方法
- 前端上传组件Plupload
- 小米Air3笔记本拆机踩坑教程
- 微信支付全流程对接文档
- 【C++】*P、P 、P的区别
- hnu 模型机组合部件的实现(一)
- switch好玩吗_Switch游戏没那么少!我今天就推荐几个好玩的
- JavaScript实现React实现网页转换成图片截屏下载
- android ROM设置默认Launcher(主屏幕应用)
热门文章
- 项目——3——lnmp-gitlab-jenkins-ansible
- 物联网:可穿戴设备与世界杯球员
- 逆天了!全地形、四舵轮、八连杆、独立悬挂的机器人运动结构方案,来了!
- 知识图谱文献综述(第二章 知识表示学习)
- 网考英语和计算机范围,中考英语听说机考周六首考,考生要依据计算机提示作答...
- 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区
- 设计模式之十一个行为型模式的相关知识,简单易懂。
- 【无标题】上班族做什么副业赚钱?4种副业让你超过主业!
- 学习javaweb第二天
- python读取tsv文件_Python 读写 tsv