首页 > 系统相关 >Spark设置executor-memory后,executor显示的内存不符问题

Spark设置executor-memory后,executor显示的内存不符问题

时间:2024-04-23 13:00:57浏览次数:30  
标签:存储 executor 内存 memory spark Spark

以该命令为例,我们设置一个executor并分配内存为2800m,可以看到ui上只给executor分配了1.5G的内存。同理,如果你设置了--executor-memory=1g,那么实际上只会有1048.8M的内存会被分配。


spark-submit --master yarn \
--num-executors=1 \
--executor-memory=2800m \
--class org.apache.spark.examples.SparkPi \
/opt/module/spark-3.5.1-bin-hadoop3/examples/jars/spark-examples_2.12-3.5.1.jar 1000

这个问题是因为(https://spark.apache.org/docs/latest/tuning.html#memory-management-overview):

内存管理概览

在 Spark 中,内存使用主要分为两大类:执行内存和存储内存。执行内存用于计算处理,如 shuffles(洗牌)、joins(连接)、sorts(排序)和 aggregations(聚合);而存储内存则用于缓存和在集群中传播内部数据。在 Spark 中,执行内存和存储内存共享一个统一的区域(M)。当没有使用执行内存时,存储内存可以占用所有可用的内存,反之亦然。在必要时,执行内存可以驱逐存储内存,但只到存储内存的使用量降到某个阈值(R)以下。换句话说,R 描述了 M 中的一个子区域,在该区域内,缓存的数据块不会被驱逐。由于实现机制的复杂性,存储内存不能驱逐执行内存。

此设计确保了几项理想的特性。首先,不利用缓存的应用可以使用全部内存空间进行执行操作,避免不必要的磁盘溢出。其次,利用缓存的应用可以预留一定的存储空间(R),确保其数据块不会被驱逐。最后,这种方法为多种工作负载提供了合理的即插即用性能,而无需用户深入了解内部内存划分的细节。

尽管有两个相关的配置参数,但典型用户通常不需要调整它们,因为默认值已适用于大多数工作负载:

  • spark.memory.fraction 表示 M 占用的比例,计算公式为 (JVM 堆空间 - 300MiB) 的百分比(默认值为 0.6)。其余的空间(40%)留给用户数据结构、Spark 的内部元数据以及作为安全储备,以防出现稀疏或异常大的记录导致的 OOM(内存溢出)错误。
  • spark.memory.storageFraction 表示 R 占 M 的比例(默认值为 0.5)。R 是 M 内部的一块存储区域,其内的缓存数据块不会被执行操作驱逐。

spark.memory.fraction 的值应该设置在能够在 JVM 的老年代或“终身代”中舒适适应这部分堆空间。有关高级 GC(垃圾回收)调优的更多细节,请参考下面的讨论。

标签:存储,executor,内存,memory,spark,Spark
From: https://www.cnblogs.com/aminor/p/18152647

相关文章

  • Spark SQL 抽样函数 ——TABLESAMPLE 的坑点
    最近需要实现一段SparkSQL逻辑,对数据集进行抽样指定的行数。由于数据集较大,刚开始的逻辑是,取窗口函数随机排序后row_number的前n行。但运行速度较慢,所以想起了TABLESAMLE函数,支持直接取Rows,尝试后发现速度特别快,基本上几秒内就完成对亿级数据的采样。所以好奇就去查......
  • Kernel panic - not syncing: Out of memory: system-wide panic_on_oom is enabled
    内存不足,导致Java 进程被杀掉。 [1534.300650]Kernelpanic-notsyncing:Outofmemory:system-widepanic_on_oomisenabled[1534.301803]CPU:5PID:2930Comm:javaKdump:loadedTainted:GO5.10.0-60.18.0.50.r1083_58.hce2.x86_64#1[153......
  • cenots7.6系统报“fork:Cannot allocate memory” 报错的解决方法(实操)
    今日早晨上班上报一台虚拟机无法ssh连接,想着大抵是关机了,又或是存储满了(经常遇到这样的事情,因为基本上都是做的厚置备,所以会导致分配容量大于实际容量)。打开后台查看报警事件,没有!预感到此事不大简单。。。。进入控制台,输入w好家伙,输出fork:Cannotallocatememory翻译一下:内......
  • memory-cnblog
    linux虚拟内存系统进程的虚拟内存用户区分段:代码段、数据段、堆、共享库、栈内核区:存放进程信息,PID\程序计数器、打开文件列表、task和mm(描述虚拟内存)结构等Linux加载进程时(exec系列系统调用)会为该地址空间每个段分配VMA,VMA数据结构(vm_area_struct)会描述该段的虚拟空间......
  • springboot集成spark大数据
    1、特别申明,请注意JDK版本,最好用JDK1.8,用JDK17会导致很多报错2、导入pom依赖JDK1.8直接导入spark依赖就行。<dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.13</artifactId><version>3.4.1......
  • hive on spark内存模型
    内容介绍hiveonspark的调优,那必然涉及到这一系列框架的内存模型。本章就是来讲一下这些框架的内存模型。hiveonspark的任务,从开始到结束。总共涉及了3个框架。分别是:yarn、hive、spark其中,hive只是一个客户端的角色。就不涉及任务运行时的内存。所以这里主要讲的yarn和spa......
  • PHP Allowed memory size of 134217728 bytes exhausted (tried to allocate 10489856
    问题返回的json数据太大导致Allowedmemorysizeof134217728bytesexhausted(triedtoallocate10489856bytes)解决方案修改php.ini的memory_limit修改php.ini中的memory_limit数值,默认128M,不够用可以改成256M或512M宝塔中修改点击“服务”>重启或重载配置......
  • py_trees Sequence节点参数: memory=True | False
    Python行为树py_trees的一种注意情况:memory=True|Falsepy_trees…composites.Sequence(name=“root”,memory=True)官方文档是这样写的Ifconfiguredwithmemoryandachildreturnedwithrunningontheprevioustick,itwillproceeddirectlytotherunn......
  • ThreadPoolExecutor线程池解析
    ThreadPoolExecutor线程池解析一、ThreadPoolExecutor常见参数jdk中Executors提供了几种常用的线程池,底层都是ThreadPoolExecutor。publicThreadPoolExecutor(intcorePoolSize,//核心线程数intmaximumPoolSize,//最大线程数......
  • A Comprehensive Evaluation of Sequential Memory Editing in Large Language Models
    本文是LLM系列文章,针对《NavigatingtheDualFacets:AComprehensiveEvaluationofSequentialMemoryEditinginLargeLanguageModels》的翻译。双向导航:大型语言模型中顺序记忆编辑的综合评价摘要1引言2相关工作3符号和背景4实验设置5ME对LLM的评估......