博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark 1.4.1中Beeline使用的gc overhead limit exceeded
阅读量:4696 次
发布时间:2019-06-09

本文共 2845 字,大约阅读时间需要 9 分钟。

最近使用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的内存

转载于:https://www.cnblogs.com/gaoxing/p/4714235.html

你可能感兴趣的文章
(Frontend Newbie) Web三要素(一)
查看>>
(转载-学习)python wsgi 简介
查看>>
QPushButton 控制两种状态
查看>>
一点小基础
查看>>
PHP 自动加载类 __autoload() 方法
查看>>
JDK中的Timer和TimerTask详解(zhuan)
查看>>
【python练习】ATM&购物商城程序
查看>>
nginx 日志问题(\x22)
查看>>
装饰器、迭代器、生成器
查看>>
类对象作为类成员
查看>>
面向对象和面向过程的区别及优劣对比详解
查看>>
const与指针
查看>>
thsi指针的一些用法及作用
查看>>
c++友元
查看>>
c++运算符重载
查看>>
一元运算符重载
查看>>
Windows 远程栈溢出挖掘
查看>>
(网页)the server responded with a status of 403 (Forbidden)
查看>>
葡萄城报表介绍:Java 报表
查看>>
android 通知消息一
查看>>