java.lang.outofmemoryerror: java heap space
因为是本地测试,内存足够,所以IDEA中增大内存。Run/Bebug Configurations 中 VM options 设置 -Xmx2048m,问题同样。
基本排除了是内存不足的问题,可能存在问题的地方。
1. AppName
检查 Spark 配置,因为偷懒配置是直接拷贝其他类的,发现 appName 设置错误,改成当前类。
读简单的表没有问题了,但是读复杂的表问题同样。
SparkSession.builder().appName(s"${this.getClass.getSimpleName}")
2. Master
继续检查。因为本地测试,master 为 local 模式,直接调用了常量类设置的好的 Constants.SPARK_LOCAL_MODE。
查看设置成了 local[4],删除,使用全部核心进程处理。再运行,问题解决。
val SPARK_LOCAL_MODE = "local"
可以看出,有时候报内存堆栈问题并非都是内存不足。
object SdkUserBehaviorDaily {
private val warehouseLocation: String = new File("spark-warehouse").getAbsolutePath
def main(args: Array[String]): Unit = {
Logger.getLogger("org.apache.hadoop").setLevel(Level.WARN)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.spark_project.jetty").setLevel(Level.WARN)
// 数据分析日期,格式为2019-09-19,默认为当日
var time = DateUtils.getYesterdayDate
if (args.length == 1) {
time = args(0)
val spark = initSparkSession
val db = "sm_data"
val table = "ods_tb_sdk_user_behavior_log"
val sqlStr =
| select
| `PACKAGE_ID`,`GAME_ID`,`SDK_VERSION`,`PAGE`,`EVENT_ID`,`RESULT`,`REASON`,
| COUNT(`TIME`) AS `TIME_COUNT`,
| COUNT(DISTINCT `DEVICE_CODE`) AS `DEVICE_COUNT`,
| COUNT(DISTINCT `CORE_ACCOUNT`) AS `ACCOUNT_COUNT`
| from $db.$table
| WHERE `DATE`= $time
| GROUP BY `PACKAGE_ID`,`GAME_ID`,`SDK_VERSION`,`PAGE`,`EVENT_ID`,`RESULT`,`REASON`
""".stripMargin
import spark.sql
sql(sqlStr).show()
spark.stop()
def initSparkSession:SparkSession = SparkSession.builder()
.appName(s"${this.getClass.getSimpleName}")
.master(Constants.SPARK_LOCAL_MODE)
.config("spark.sql.warehouse.dir", warehouseLocation)
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.config("hive.exec.max.dynamic.partitions", 2000)
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.config("spark.kryoserializer.buffer", "1024m")
.config("spark.kryoserializer.buffer.max", "2046m")
.config("spark.io.compression.codec","snappy")
.config("spark.sql.codegen", "true")
.config("spark.sql.unsafe.enabled", "true")
.config("spark.shuffle.manager", "tungsten-sort")
.enableHiveSupport()
.getOrCreate()
Spark本地测试Hive数据时,报错:java.lang.outofmemoryerror: java heap space因为是本地测试,内存足够,所以IDEA中增大内存。Run/Bebug Configurations 中 VM options 设置-Xmx2048m,问题同样。基本排除了是内存不足的问题,可能存在问题的地方。1. AppName检查 Spar...
Hive查询时,报错java.lang.OutOfMemoryError: Java heap space
这种情况属于JVM堆内存溢出了,在yarn-site.xml文件中添加如下代码
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</...
主要就是java内存溢出。
之前尝试过很多方法:/conf中设置spark-java-opts 等,都没有解决问题。其实问题就是JVM在运行时内存不够导致。可以通过命令:./spark-submit --help可以看到大家运行时内存的默认值,有的电脑是512M有的电脑是1024M******:bin duyang$ ./spark-submit --help
Usage:
hive 开启了hiveServer2服务,连接了一段时间就拒绝连接,hive日志报错如下:
Exception in thread "org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor@56b9d43f" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Tri...
虚拟机出现Caused by: java.lang.OutOfMemoryError: Java heap space错误是因为堆内存不足。这个错误通常发生在系统导出大量数据到Excel时,比如180,000条左右的数据。解决这个问题的方法是增加虚拟机的堆内存。您可以按照以下步骤进行设置:
1. 打开hive/conf/hive-env.sh文件。
2. 在文件中找到-Xmx参数,它用于设置虚拟机的最大堆内存。
3. 将-Xmx参数的值增加到一个较大的值,比如3550m。
4. 保存并关闭文件。
5. 重新启动虚拟机。
这样,虚拟机将有更多的内存可用,从而避免了OutOfMemoryError错误。