spark 使用中会遇到的一些问题及解决思路
7 内存溢出问题 在Spark中使用hql方法执行hive语句时,由于其在查询过程中调用的是Hive的获取元数据信息、SQL解析,并且使用Cglib等进行序列化反序列化,中间可能产生较多的class文件,导致JVM中的持久代使用较多,如果配置不当,可能引起类似于如下的OOM问题: Exception in thread "Thread-2" java.lang.OutOfMemoryError: PermGen space 复制代码 原因是实际使用时,如果用的是JDK1.6版本, Server模式的持久代默认大小是64M,Client模式的持久代默认大小是32M ,而Driver端进行SQL处理时,其持久代的使用可能会达到90M,导致OOM溢出,任务失败。 解决方法就是在Spark的conf目录中的 spark-defaults.conf 里,增加对Driver的JVM配置,因为Driver才负责SQL的解析和元数据获取。配置如下: spark.driver.extraJavaOptions -XX:PermSize=128M -XX:MaxPermSize=256M 复制代码 但是,上述情况是在yarn-cluster模式下出现,yarn-client模式运行时倒是正常的,原来在$SPARK_HOME/bin/spark-class文件中已经设置了持久代大小: JAVA_OPTS