Spark 1.4.1中Beeline使用的gc overhead limit exceeded

最近使用SparkSQL做数据的打平操作,就是把多个表的数据经过关联操作导入到一个表中,这样数据查询的过程中就不需要在多个表中查询了,在数据量大的情况下,这样大大提高了查询效率。

我启动了thriftserver,然后通过beeline去连接thriftserver, 打平操作进行的很顺利,但是在执行groupby操作的时候beeline报了一个错误:gc overhead limit exceeded

我分析可能是thriftserver报的错误。但是查看了thriftserver的日志没有任何异常打出来,没办法重新执行该sql ,通过jmap跟了下,JVM的old区一直没有满,那就是不是thriftserver的问题了。

那么可能就是beeline的问题了,jmap跟了一下 ,beeline只有512m的内存,old区满满的。

下面就可以着手调整beeline的参数设置,我调整了java_opts, spark_daemon_memory,spark_driver_memory, spark_java_opts.统统不行,看了1.4.1的源码。是程序的问题,

幸好在spark 1.5中fix这个问题了。

查看SparkClassCommandBuilder的源码

if (className.equals("org.apache.spark.deploy.master.Master")) {
      javaOptsKeys.add("SPARK_DAEMON_JAVA_OPTS");
      javaOptsKeys.add("SPARK_MASTER_OPTS");
      memKey = "SPARK_DAEMON_MEMORY";
    } else if (className.equals("org.apache.spark.deploy.worker.Worker")) {
      javaOptsKeys.add("SPARK_DAEMON_JAVA_OPTS");
      javaOptsKeys.add("SPARK_WORKER_OPTS");
      memKey = "SPARK_DAEMON_MEMORY";
    } else if (className.equals("org.apache.spark.deploy.history.HistoryServer")) {
      javaOptsKeys.add("SPARK_DAEMON_JAVA_OPTS");
      javaOptsKeys.add("SPARK_HISTORY_OPTS");
      memKey = "SPARK_DAEMON_MEMORY";
    } else if (className.equals("org.apache.spark.executor.CoarseGrainedExecutorBackend")) {
      javaOptsKeys.add("SPARK_JAVA_OPTS");
      javaOptsKeys.add("SPARK_EXECUTOR_OPTS");
      memKey = "SPARK_EXECUTOR_MEMORY";
    } else if (className.equals("org.apache.spark.executor.MesosExecutorBackend")) {
      javaOptsKeys.add("SPARK_EXECUTOR_OPTS");
      memKey = "SPARK_EXECUTOR_MEMORY";
    } else if (className.equals("org.apache.spark.deploy.ExternalShuffleService") ||
        className.equals("org.apache.spark.deploy.mesos.MesosExternalShuffleService")) {
      javaOptsKeys.add("SPARK_DAEMON_JAVA_OPTS");
      javaOptsKeys.add("SPARK_SHUFFLE_OPTS");
      memKey = "SPARK_DAEMON_MEMORY";
    } else if (className.startsWith("org.apache.spark.tools.")) {
      String sparkHome = getSparkHome();
      File toolsDir = new File(join(File.separator, sparkHome, "tools", "target",
        "scala-" + getScalaVersion()));
      checkState(toolsDir.isDirectory(), "Cannot find tools build directory.");
      Pattern re = Pattern.compile("spark-tools_.*\\.jar");
      for (File f : toolsDir.listFiles()) {
        if (re.matcher(f.getName()).matches()) {
          extraClassPath = f.getAbsolutePath();
          break;
        }
      }
      checkState(extraClassPath != null,
        "Failed to find Spark Tools Jar in %s.\n" +
        "You need to run \"build/sbt tools/package\" before running %s.",
        toolsDir.getAbsolutePath(), className);
      javaOptsKeys.add("SPARK_JAVA_OPTS");
    } else {
      javaOptsKeys.add("SPARK_JAVA_OPTS");
      memKey = "SPARK_DRIVER_MEMORY";
    }

看46.47的代码,1.5可以通过SPARk_JAVA_OPTS和SPARK_DRIVER_MEMORY来设置beeline的内存

时间: 2024-10-29 01:01:04

Spark 1.4.1中Beeline使用的gc overhead limit exceeded的相关文章

Spark OOM:java heap space,OOM:GC overhead limit exceeded解决方法

问题描述: 在使用spark过程中,有时会因为数据增大,而出现下面两种错误: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError:GC overhead limit exceeded 这两种错误之前我一直认为是executor的内存给的不够,但是仔细分析发现其实并不是executor内存给的不足,而是driver的内存给的不足.在standalone client模式下用spark-submit提交任务时(

spark出现GC overhead limit exceeded和java heap space

spark执行任务时出现java.lang.OutOfMemoryError: GC overhead limit exceeded和java.lang.OutOfMemoryError: java heap space 最直接的解决方式就是在spark-env.sh中将下面两个参数调节的尽量大 export SPARK_EXECUTOR_MEMORY=6000M    export SPARK_DRIVER_MEMORY=7000M 注意,此两个参数设置需要注意大小顺序: SPARK_EXEC

spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常

代码: import com.mongodb.spark.config.ReadConfig import com.mongodb.spark.sql._ val config = sqlContext.sparkContext.getConf .set("spark.mongodb.keep_alive_ms", "15000") .set("spark.mongodb.input.uri", "mongodb://10.100.12

OutOfMemoryError: Java heap space和GC overhead limit exceeded在Ant的Build.xml中的通用解决方案

这个只是一点点经验,总结一下,其中前两个对应第一个Error,后两个对应第二个Error,如果heap space还不够,可以再改大些. <jvmarg value="-Xms512m"/> <jvmarg value="-Xmx512m"/> <jvmarg value="-XX:-UseGCOverheadLimit"/> <jvmarg value="-XX:+UseConcMarkSwe

Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN

Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession 创建 DataFrames 无类型的Dataset操作 (aka DataFrame 操作) Running SQL Queries Programmatically 全局临时视图 创建Datasets RDD的互操作性 使用反射推断Schema 以编程的方式指定Schema Aggregatio

Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Input DStreams 和 Receivers(接收器) DStreams 上的 Transformations(转换) DStreams 上的输出操作 DataFrame 和 SQL 操作 MLlib 操作 缓存 / 持久性 Checkpointing Accumulators, Broadcas

Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN

SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 SparkDataFrames 从本地的 data frames 来创建 SparkDataFrames 从 Data Sources(数据源)创建 SparkDataFrame 从 Hive tables 来创建 SparkDataFrame SparkDataFrame 操作 Selecting rows(行), columns(列) Groupin

Spark(Python) 从内存中建立 RDD 的例子

Spark(Python) 从内存中建立 RDD 的例子: myData = ["Alice","Carlos","Frank","Barbara"]myRdd = sc.parallelize(myData)myRdd.take(2) ----In [52]: myData = ["Alice","Carlos","Frank","Barbara"

Apache Spark 2.2.0 中文文档 - 集群模式概述 | ApacheCN

集群模式概述 该文档给出了 Spark 如何在集群上运行.使之更容易来理解所涉及到的组件的简短概述.通过阅读 应用提交指南 来学习关于在集群上启动应用. 组件 Spark 应用在集群上作为独立的进程组来运行,在您的 main 程序中通过 SparkContext 来协调(称之为 driver 程序). 具体的说,为了运行在集群上,SparkContext 可以连接至几种类型的 Cluster Manager(既可以用 Spark 自己的 Standlone Cluster Manager,或者