看很少有博客说这种问题,那我就分享一下踩坑记录吧~
首先说一下解决方法:增加executor的内存资源:--executor-memory
最近用spark做了一个有关风险传导的算子,其中调用了GraphX进行计算,测试时用的数据量比较少,所以没有意外地执行完毕了。
但是在数据量增加之后,首先报了shuffle读写不平衡的错,这是在图计算中产生的大量shuffle和资源配置不平衡导致的,了解spark的童鞋都清楚,调整资源就可以解决。但是在调整资源之后,又报了个错: java.lang.ArrayIndexOutOfBoundsException: -1
具体如图:
按照常规思路:资源的问题解决了,又报这个错,而且是数组越界,很容易就想到---不会是代码逻辑出问题了吧? 然后,对数据中的null、空字符串等等进行检查之后,发现没有问题。
之后查询发现,graphx数据量变大的时候,很容易出现这种问题:[SPARK-5480] GraphX pageRank: java.lang.ArrayIndexOutOfBoundsException: - ASF JIRAz
既然是数据量大导致的,那么就放大资源试试好了,然后试着增加每个executer的内存,解决啦~