1.变量未序列化,任务无法提交
A: spark任务会分发到很多台机器去执行,这个过程伴随着数据的IO,如果传递的数据未序列化,将无法分发到执行机。如果传递的是未序列化的变量,可以将变量改为实例变量或类变量,在函数中直接引用该变量,取消传参行为。这样在任务执行的时候,代码和数据都会分发到执行机上
2.当前执行线程过多,超过上限,143错误码
A: 数据未shuffle,任务直接跑在数据所在的机器上,由于存储的数据过于细碎,机器太多,导致执行的任务过多,开启的线程过多,超过上限。解决办法是join数据,再做repartition,减少数据分散度,以便减少spark任务的执行数量
3.出现maxResultSize异常
A: Spark任务是基于内存的,调用collect()方法直接将所有数据都取出来,导致执行机没有足够大内存承载这么大数据,即使调大maxResultSize也是徒劳,因为内存是有限的,而数据却很大。解决办法是 TODO 数据分区再执行