运行Spark常见问题处理方法(持续更新中......)

1.MaxResultSize问题

首先,出现这个错误的时候Spark会产生如下错误信息:

org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized results of 77 tasks (1028.5 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)

而后,继而会出现异常信息:java.lang.InterruptedException

这就是由于设置MaxResultSize这个参数过小而导致的,由上面信息可以看出Spark默认的MaxResultSize大小为1GB,所以解决这类错误的方法就是增大MaxResultSize。

解决方法:在设置SparkConf,即设置Spark参数时加入如下内容:

.set("spark.driver.maxResultSize", "4g")

2.Java heap space问题

内存溢出问题,异常信息为:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

之后会罗列出现此异常的代码位置信息,从根源开始,从上往下逐步罗列由此方法或者变量而导致后续出现的从小到大异常,简而言之,异常出现的根源是在此异常信息下的头一行语句中。

解决此类问题的方法有三:

(1)调整所用eclipse或者IDEA等软件设置的基础内存大小(eclipse在启动文件夹下存放的以.ini为后缀的文件即为配置文件;IDEA安装目录下bin目录下vmoptions文件,根据32位和64位选择配置)。

(2)调整jvm内存大小(eclipse内Window-Preferences-Java-Installed JREs选中所用jdk进行edit即可)。

(3)调整分页内存设置(虚拟机内存设置),即VM arguments,即此次运行内存设置。(eclipse内Run-Run Configurations...-Arguments)。

补:设置内存参数及其含义:

-VM Arguments        jvm配置参数

-Xms                         jvm初始分配堆内存

-Xmx                         jvm最大允许分配的堆内存,按需分配

-XX:PermSize          jvm初始分配的非堆内存

-XX:MaxPermSize   jvm最大允许分配的非堆内存,按需分配

实例:-vmargs    -Xmx8G    -Xms512m    -XX:MaxPermSize=2G

3.Relative path问题

    是关于设置Spark缓存目录问题,异常信息如下:

    Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:E:/临时文件夹/临时使用/eclipseWorkStation/com.cntrust/spark-warehouse

    在设置SparkConf时加入语句.set("spark.sql.warehouse.dir","E:/SparkTemp/"),为其添加缓存目录即可。

运行Spark常见问题处理方法(持续更新中......)