浅谈Spark应用程序的性能调优 :http://geek.csdn.net/news/detail/51819
下面列出的这些API会导致Shuffle操作,是数据倾斜可能发生的关键点所在
1. groupByKey
2. reduceByKey
3. aggregateByKey
4. sortByKey
5. join
6. cogroup
7. cartesian
8. coalesce
9. repartition
10. repartitionAndSortWithinPartitions
要避免数据倾斜的出现,一种方法就是选择合适的key,或者是自己定义相关的partitioner。在Spark中Block使用了ByteBuffer来存储数据,而ByteBuffer能够存储的最大数据量不超过2GB。如果某一个key有大量的数据,那么在调用cache或persist函数时就会碰到spark-1476这个异常。
尽可能使用reduceByKey, aggregateByKey, foldByKey和combineByKey