Spark读取Hive报错:java.lang.outofmemoryerror: java heap space

19 篇文章 0 订阅

Spark本地测试Hive数据时,报错:

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 =
      s"""
        | 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()
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

訾零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值