spark运行报错:Container killed by YARN for exceeding memory limits
用spark跑数据量大的离线调度任务报错:Reason: Container killed by YARN for exceeding memory limits. 19.0 GB of 19 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled because of YARN-4714.
Spark 报错 Container killed by YARN for exceeding memory limits 表示 Spark 的 Executor 容器因为超出 YARN 分配的内存限制而被 YARN 杀死。在 Spark 中,每个 Executor 进程都会有自己的容器,并且这个容器的内存使用是由 YARN 监控的。
错误信息中的 "19.0 GB of 19 GB physical memory used" 指出了问题的关键点:Executor 使用了全部分配给它的物理内存。通常情况下,Executor 的内存需求可能超过你为其分配的内存,这是因为除了应用程序的堆内存(Heap Memory)之外,还有一些额外的开销,例如操作系统本身、JVM 的非堆内存(如代码缓存、线程栈等)、以及 Spark 的内部开销。
spark.yarn.executor.memoryOverhead 配置项就是用来处理这种额外开销的。如果你的 Executor 正好用完了所有分配的内存,那么增加 spark.yarn.executor.memoryOverhead 可以帮助预留更多的内存,避免被 YARN 因为超出限制而杀死。
解决方案:
-
增加
spark.yarn.executor.memoryOverhead配置: 在 Spark 的配置中增加或修改spark.yarn.executor.memoryOverhead的值。默认情况下,这个值是基于你配置的executor-memory自动计算的。但是,如果默认值不够,你可以手动增加它。例如,如果你的 Executor 内存是 19GB,你可能需要增加memoryOverhead到一个合适的值,比如 3GB 或更多:深色版本
spark.yarn.executor.memoryOverhead 3072 -
禁用 YARN 虚拟内存检查: 如果你确定你的应用程序不会滥用虚拟内存,并且你的节点有足够的交换空间来处理可能的内存溢出,你可以禁用 YARN 的虚拟内存检查,通过设置
yarn.nodemanager.vmem-check-enabled为 false:深色版本
yarn.nodemanager.vmem-check-enabled false注意:这可能会导致节点的不稳定,因为它允许 Executor 使用比物理内存更多的虚拟内存,从而可能导致系统交换过多,降低性能甚至崩溃。
-
调整 Executor 内存分配: 如果可能的话,减少每个 Executor 的内存需求,或者增加集群的总内存资源。你可以通过调整
spark.executor.memory参数来控制 Executor 的内存大小。 -
优化数据处理逻辑: 优化你的 Spark 应用程序,减少内存消耗。这可能包括使用更有效的数据结构、减少数据集的大小、使用内存友好的算法等。
在实施这些更改后,你应该重新启动 Spark 应用程序并监控其内存使用情况,确保没有再次超出限制。如果问题仍然存在,可能需要进一步调查你的应用程序是否有效利用了内存资源。
要在使用 spark-submit 命令行工具时解决因内存溢出而导致的 YARN 容器被杀的问题,你需要在提交 Spark 应用程序时修改相关的配置参数。以下是如何在 spark-submit 命令中进行修改的详细步骤:
修改 spark.yarn.executor.memoryOverhead
假设你的原始 spark-submit 命令如下:
spark-submit --class com.example.MainClass \--master yarn \--deploy-mode cluster \--num-executors 10 \--executor-memory 19g \--executor-cores 4 \path/to/your/application.jar arg1 arg2
要增加 spark.yarn.executor.memoryOverhead,你可以在命令中添加一个新的参数:
spark-submit --class com.example.MainClass \--master yarn \--deploy-mode cluster \--num-executors 10 \--executor-memory 19g \--executor-cores 4 \--conf spark.yarn.executor.memoryOverhead=3072 \path/to/your/application.jar arg1 arg2
这里将 spark.yarn.executor.memoryOverhead 设置为了 3072 MB (3 GB)。这个值可以根据你的实际需求进行调整。
禁用 YARN 虚拟内存检查
如果要禁用 YARN 的虚拟内存检查,你可以在 spark-submit 命令中添加如下配置:
spark-submit --class com.example.MainClass \--master yarn \--deploy-mode cluster \--num-executors 10 \--executor-memory 19g \--executor-cores 4 \--conf spark.yarn.executor.memoryOverhead=3072 \--conf yarn.nodemanager.vmem-check-enabled=false \path/to/your/application.jar arg1 arg2
请注意,禁用虚拟内存检查是一个高风险的操作,因为它可能导致整个节点的稳定性下降。
总结修改后的 spark-submit 命令
最终的 spark-submit 命令应该看起来像这样:
spark-submit --class com.example.MainClass \--master yarn \--deploy-mode cluster \--num-executors 10 \--executor-memory 19g \--executor-cores 4 \--conf spark.yarn.executor.memoryOverhead=3072 \--conf yarn.nodemanager.vmem-check-enabled=false \path/to/your/application.jar arg1 arg2
确保在修改任何配置之前,你已经理解了这些配置项的作用,并且在生产环境中谨慎操作,避免造成不必要的性能影响或稳定性问题。如果可能,先在测试环境中试验这些修改。
相关文章:
spark运行报错:Container killed by YARN for exceeding memory limits
用spark跑数据量大的离线调度任务报错:Reason: Container killed by YARN for exceeding memory limits. 19.0 GB of 19 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled becaus…...
(三)大模型/人工智能/机器学习/深度学习/NLP
一.模型 模型,简单来说,就是用来表示或解释某个事物、现象或系统的一种工具或框架。它可以是实体的,也可以是虚拟的,目的是为了帮助我们更好地理解和预测所描述的对象。在生活中,模型无处不在,它们以各种形…...
数学基础 -- 三角学
三角学 三角学(Trigonometry)是数学的一个分支,主要研究三角形的边长与角度之间的关系。三角学在几何学、物理学、工程学等多个领域中有广泛的应用。以下是三角学的一些基本概念和公式: 基本概念 直角三角形:一个角…...
基于BitMap的工作日间隔计算
背景问题 在我们实际开发过程中,时常会遇到日期的间隔计算,即计算多少工作日之后的日期,在不考虑法定节假日的情况下也不是那么复杂,毕竟周六、周日是相对固定的,Java语言也提供了丰富的类来处理此问题。 然而&#x…...
sqlite3 — DB-API 2.0 interface for SQLite databases
sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.4 documentation sqlite3 — DB-API 2.0 interface for SQLite databasessqlite3 — SQLite数据库的DB-API 2.0接口 Source code: Lib/sqlite3/ 源代码位置:Lib/sqlite3/ SQLite is a C…...
Spring Boot中的安全配置与实现
Spring Boot中的安全配置与实现 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Spring Boot中的安全配置与实现,看看如何保护你的…...
DepthAnything(2): 基于ONNXRuntime在ARM(aarch64)平台部署DepthAnything
DepthAnything(1): 先跑一跑Depth Anything_depth anything离线怎么跑-CSDN博客 目录 1. 写在前面 2. 安装推理组件 3. 生成ONNX 4. 准备ONNXRuntime库 5. API介绍 6. 例程 1. 写在前面 DepthAnything是一种能在任何情况下处理任何图像的简单却又强大的深度估计模型。 …...
JAVA简单封装UserUtil
目录 思路 一、TokenFilterConfiguration 二、FilterConfig 三、TokenContextHolder 四、TokenUtil 五、UserUtil 思路 配置Token过滤器(TokenFilterConfiguration):实现一个Token过滤器配置,用于拦截HTTP请求,从请求头中提取Token&…...
【TOOLS】Chrome扩展开发
Chrome Extension Development 1. 入门教程 入门案例,可以访问【 谷歌插件官网官方文档 】查看官方入门教程,这里主要讲解大概步骤 Chrome Extenson 没有固定的脚手架,所以项目的搭建需要根据开发者自己根据需求搭建项目(例如通过…...
分享WPF的UI开源库
文章目录 前言一、HandyControl二、AduSkin三、Adonis UI四、Panuon.WPF.UI五、LayUI-WPF六、MahApps.Metro七、MaterialDesignInXamlToolkit八、FluentWPF九、DMSkin总结 前言 分享WPF的UI开源库。 一、HandyControl HandyControl是一套WPF控件库,它几乎重写了所…...
[ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)
最新消息ICVISP 2024-已通过ACM出版申请投稿免费参会,口头汇报或海报展示(可获得相应证明证书) ————————————————————————————————————————— [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVI…...
JVM:类加载器
文章目录 一、什么是类加载器二、类加载器的应用场景三、类加载器的分类1、分类2、启动类加载器3、Java中的默认类加载器(1)扩展类加载器(2)应用程序类加载器(3)arthas中类加载器相关的功能 四、双亲委派机…...
支持向量机 (support vector machine,SVM)
支持向量机 (support vector machine,SVM) flyfish 支持向量机是一种用于分类和回归的机器学习模型。在分类任务中,SVM试图找到一个最佳的分隔超平面,使得不同类别的数据点在空间中被尽可能宽的间隔分开。 超平面方…...
宝塔面板以www用户运行composer
方式一 执行命令时指定www用户 sudo -u www composer update方式二 在网站配置中的composer选项卡中选择配置运行...
昇思25天打卡营-mindspore-ML- Day24-基于 MindSpore 实现 BERT 对话情绪识别
学习笔记:基于MindSpore实现BERT对话情绪识别 算法原理 BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年开发的一种预训练语言表示模型。BERT的核心原理是通过在大量文本上预训练深度双向表示࿰…...
【精品资料】模块化数据中心解决方案(33页PPT)
引言:模块化数据中心解决方案是一种创新的数据中心设计和部署策略,旨在提高数据中心的灵活性、可扩展性和效率。这种方案通过将数据中心的基础设施、计算、存储和网络资源封装到标准化的模块中,实现了快速部署、易于管理和高效运维的目标 方案…...
N6 word2vec文本分类
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊# 前言 前言 上周学习了训练word2vec模型,这周进行相关实战 1. 导入所需库和设备配置 import torch import torch.nn as nn import torchvision …...
excel、word、ppt 下载安装步骤整理
请按照我的步骤开始操作,注意以下截图红框标记处(往往都是需要点击的地方) 第一步:下载 首先进入office下载网址: otp.landian.vip 然后点击下载 拉到下方 下载站点(这里根据自己的需要选择下载&#x…...
【python学习】标准库之日期和时间库定义、功能、使用场景和示例
引言 datetime模块最初是由 Alex Martelli 在 Python 2.3 版本引入的,目的是为了解决之前版本中处理日期和时间时存在的限制和不便 在datetime模块出现之前,Python 主要使用time模块来处理时间相关的功能,但 time模块主要基于 Unix 纪元时间&…...
Android --- Kotlin学习之路:基础语法学习笔记
------>可读可写变量 var name: String "Hello World";------>只读变量 val name: String "Hello World"------>类型推断 val name: String "Hello World" 可以写成 val name "Hello World"------>基本数据类型 1…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...
