相关文章推荐
帅气的生姜  ·  C++ ZeroMQ ...·  7 月前    · 
豪爽的鼠标  ·  docker - openssl key ...·  1 年前    · 

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错误。