zoukankan      html  css  js  c++  java
  • 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.
    " +
            "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的内存

  • 相关阅读:
    git爬坑不完全指北(二):failed to push some refs to ‘XXX’的解决方案
    javascript精雕细琢(三):作用域与作用域链
    javascript精雕细琢(二):++、--那点事
    git爬坑不完全指北(一):Permission to xxx.git denied to user的解决方案
    深入浅出CSS(三):隐藏BOSS大盘点之默认属性小总结
    读书笔记
    MPP5运维手册
    HTML自闭合(self-closing)标签
    Mysql JDBC的通信协议(报文的格式和基本类型)
    详解 & 0xff 的作用
  • 原文地址:https://www.cnblogs.com/gaoxing/p/4714235.html
Copyright © 2011-2022 走看看