1.常规设置
在我另一篇文章中也有提到,即常规设置:
(假设物理机内存大小为32G)
-Xms 物理内存的1/64 -Xms512m
-Xmx 物理内存的1/4 -Xmx8G
-XX:PermSize 物理内存的1/64 -XX:PermSize=512m
-XX:MaxPermSize 物理内存的1/4 -XX:MaxPermSize=8G
2.出现内存溢出时
1)首先调整eclipse或者IDEA配置文件内的内存大小。
2)其次调整jvm内存大小设置,jvm内存大小设置应同配置文件设置。
3)分页内存设置(一般不需要)
3.判断和设置
运行Spark时会显示日志消息,如下:
18/06/19 12:00:00 INFO MemoryStore: MemoryStore started with capacity 4.1 GB
判断方法就是根据Spark产生的日志信息:Spark可用内存即为4.1G,这个参数的设置仅与-Xmx大小有关,大体即为-Xmx值乘以默认参数0.6来推算。而-Xms在我另一文章中提到过,是jvm的GC内存大小,达到这个值的时候,jvm才开始进行回收。
设置大小应根据参与运算数据内存的大小除以0.6来设置,根据官方文档中所提到的spark.memory.fraction默认为0.6来推算相应数据需要设置的内存大小,如运算数据为8G,则应设置为14G左右。
4.补充
磁盘空间不足问题:
由于Spark为减少IO开销而将job中间输出结果保存在了本机内存中,因此设置Spark缓存目录,
在设置SparkConf时添加参数.set("spark.local.dir","E:\SparkTemp"),即设置Spark本地缓存目录即可。