少年游

欲买桂花同载酒,终不似,少年游。

0%

Spark调优指南

spark.yarn.executor.memoryOverhead

ExecutorLostFailure (executor 52 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 11.0 GB of 11 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.

emoryOverhead是JVM进程中除Java堆以外占用的空间大小,包括方法区(永久代)、Java虚拟机栈、本地方法栈、JVM进程本身所用的内存、直接内存(Direct Memory)等。 通过spark.yarn.executor.memoryOverhead设置,单位MB。如果Java堆或者永久代的内存不足,则会产生各种OOM异常,executor会被结束。 在Java堆以外的JVM进程内存占用较多的情况下,应该将MemoryOverhead设置为一个足够大的值,以防JVM进程因实际占用的内存超标而被kill。

  • spark-submit --conf spark.yarn.executor.memoryOverhead=10G
  • spark里面设置 `spark.conf.set("spark.yarn.executor.memoryOverhead", "10G")

spark.sql.caseSensitive

spark在读取json时候spark.read.json(dataPath).toDF()会自动inferschema(推断类型),可能有些json的key写的不标准,比如同时存在Uid和uid就会解析错误。

  • 在spark程序里面设置 spark.conf.set(“spark.sql.caseSensitive”, “true”)

spark.sql.shuffle.partitions

数据倾斜的时候,通过设置distribute by task numer, 重新shuffle数据均衡

  • spark.conf.set(“spark.sql.shuffle.partitions”, 800)
  • spark.conf.set(“spark.default.parallelism”, 800)

spark.sql.parquet.compression.codec

lzo压缩文件spark自动解压

  • spark.conf.set(“spark.sql.parquet.compression.codec”, “lzo”)

设置spark.driver.extraJavaOptions -Dhdp.version

Exception in thread “main” java.lang.IllegalStateException: hdp.version is not set while running Spark under HDP

  • spark.conf.set(“spark.driver.extraJavaOptions -Dhdp.version”, “3.1.0.0-78”)
  • spark.conf.set(“spark.yarn.am.extraJavaOptions -Dhdp.version”, “3.1.0.0-78”)
    以上均可以通过--conf设置