问题描述: 在使用spark过程中,有时会因为数据增大,而出现下面两种错误: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError:GC overhead limit exceeded 这两种错误之前我一直认为是executor的内存给的不够,但是仔细分析发现其实并不是executor内存给的不足,而是driver的内存给的不足。在standalone client模式下用spark-submit提交任务时(standalone模式部署时,默认使用的就是standalone client模式提交任务),我们自己写的程序(main)被称为driver,在不指定给driver分配内存时,默认分配的是512M。在这种情况下,如果处理的数据或者加载的数据很大(我是从hive中加载数据),driver就可能会爆内存,出现上面的OOM错误。 解决方法: 参考:http://spark.apache.org/docs/latest/configuration.html 方法一:在spark-submit中指定 --driver-memory memSize参数来设定driver的jvm内存大小,可以通过spark-submit --help查看其他可以设置的参数。 eg: ./spark-submit \ --master spark://7070 \ --class $MAIN_CLASS \ --executor-memory 3G \ --total-executor-cores 10 \ --driver-memory 2g \ --name $APP_NAME \ --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \ "$SPARK_APP_JAR" 方法二:在spark_home/conf/目录中,将spark-defaults.conf.template模板文件拷贝一份到/spark_home/conf目录下,命名为spark-defaults.conf,然后在里面设置spark.driver.memory memSize属性来改变driver内存大小。 eg: spark.master spark://master:7077 spark.default.parallelism 10 spark.driver.memory 2g spark.serializer org.apache.spark.serializer.KryoSerializer spark.sql.shuffle.partitions 50
spark执行任务时出现java.lang.OutOfMemoryError: GC overhead limit exceeded和java.lang.OutOfMemoryError: java heap space 最直接的解决方式就是在spark-env.sh中将下面两个参数调节的尽量大 export SPARK_EXECUTOR_MEMORY=6000Mexport SPARK_DRIVER_MEMORY=7000M 注意,此两个参数设置需要注意大小顺序: SPARK_EXECUTOR_MEMORY < SPARK_DRIVER_MEMORY< yarn集群中每个nodemanager内存大小
总结一下Spark中各个角色的JVM参数设置: (1)Driver的JVM参数: (2)Executor的JVM参数: (3)Executor数目及所占CPU个数
|
- 浏览: 123086 次
- 性别:
- 来自: 成都
相关推荐
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...
- **错误日志**:`java.lang.OutOfMemoryError: Java heap space` 和 `java.lang.OutOfMemoryError: GC overhead limit exceeded` - **原因**:创建大量对象或者内存泄露可能导致Java堆空间不足。例如,大数据加载...
Android编译gradle.properties文件及说明, 解决Android gradle编译错误OOM:java heap space
Exception in thread http-nio-8080-exec-1027 java.lang.OutOfMemoryError: Java heap space Exception in thread http-nio-8080-exec-1031 java.lang.OutOfMemoryError: Java heap space 看线程名称应该是tomcat的...
当程序运行时分配给它的内存空间不足以支撑其正常运行时,就会出现“内存溢出”(Out of Memory Error,简称OOM)。这通常发生在堆内存或方法区等内存区域耗尽时。对于Java应用而言,了解如何有效识别并解决内存溢出...
此外,从Spark 1.6.0开始引入了堆外内存,这是一种不在JVM堆上分配的内存,不受GC影响,适合存储大对象。堆外内存可以通过两种方式使用:一是通过`StorageLevel.OFF_HEAP`配合Tachyon;二是通过设置`spark.memory....
在Java项目中,java heap space的问题是非常常见的,尤其是在大型项目中,内存溢出导致的OOM(Out of Memory)问题经常会出现。本文将详细介绍如何解决项目中java heap space的问题,并提供了详细的示例代码和解决...
在Java中,这主要与JVM(Java虚拟机)的内存模型有关,该模型包括堆(Heap)、栈(Stack)、方法区(Method Area)和程序计数器(PC Register)等几个区域。当堆或方法区的内存耗尽时,就会抛出`OutOfMemoryError`。...
2. GC Overhead Limit Exceeded 错误 * 原因分析:应用程序已经基本耗尽了所有可用内存,GC 也无法回收 * 解决方案:检查大对象的合理性、添加机器资源、做限流降级、找到持有的对象、修改代码设计 3. Permgen ...
高手总结了9种OOM常见原因及解决方案,涵盖Java heap space、GC overhead limit exceeded、Permgen space、Metaspace、Unable to create new native thread等多种情况。 1. Java heap space Java heap space错误...
"快速简单避免OOM的java处理Excel工具"可能指的是阿里巴巴的EasyExcel,这是一个专门为了解决Java处理Excel时的内存问题而设计的开源项目。EasyExcel基于Apache POI,但优化了内存使用,尤其适用于大数据量的读写...
oom:https的镜像
本篇文章将重点讨论如何使用Java的Apache POI库以及两种不同的解决方案——EasyExcel和xlsx-Streamer来高效地读取大量Excel数据,避免OOM。 首先,Apache POI是Java中广泛使用的API,用于读写Microsoft Office格式...
implementation ' com.kwai.koom:java-oom:1.0.7 ' } 快速教程 您可以在要启动内存监视时立即设置KOOM,在应用程序启动时进行设置,您可以像这样: public class KOOMApplication extends Applicat
- 当堆内存不足时,会出现“Java heap space”错误。解决方法包括增大堆大小(通过`-Xms`和`-Xmx`设置初始和最大堆大小),或者优化代码以减少内存消耗。 2. **元空间(Meta Space)**: - 在Java 8及更高版本中...
本存储库"OOM: 面向对象的建模-2UIB"可能是某个课程或项目的一部分,用于教授和实践面向对象的设计和实现。 面向对象编程(OOP)基于三个主要原则:封装、继承和多态。下面我们将深入探讨这些概念: 1. **封装**:...
问题原因分析:使用ScriptEngine.eval每次都会对脚本进行编译,生成一个新的类,被GroovyClassLoader加载,大量执行计算后,将导致被加载的类数量不断增加,最终OOM。 解决办法:对计算的表达式expression进行预...
JavaCore和HeapDump是两种重要的Java应用程序诊断工具,它们用于理解和优化Java应用程序的性能和内存使用情况。在Java运行环境中,遇到性能问题或者内存泄漏时,开发者通常会借助这类工具来定位问题。 JavaCore,也...