spark千万数据join问题?

这种情况一般是内存使用超出了最大的内存设置,被yarn给kill了,可以看一下Executor的日志,确认下。异常情况检查:1. join操作需要检查关联条件的列是否有重复数据,大量重复数据会导致数据膨胀,这个没有太好的解法,需要结合业务,尽可能的避免重复数据的出现2. 检查是否有数据倾斜的情况(从SparkApplication的WebUI中分析Task的执行情况),美团有篇文章,专门介绍了这种问题的处理方案:Spark性能优化指南——高级篇正常join,则需要考虑:1. 修改spark.sql.shuffle.partitions提高shuffle阶段的任务并行度,降低单个任务的内存占用2. 增加spark.yarn.executor.memoryOverhead
■网友
我测试过百万数据join亿级数据。你可以从如下几个方面入手:1.减少data shuffle的规模。多map掉无用column再进行reduce like的操作。2.检查数据是否是skewed data。也就是说join出的key value pair大小极度不均。3. Spark参数调优。4.升级集群。至于是否升级,建议采用ganglia监控集群,如果Total used memory的peak接近所有可用memory,那么要么加大spill到disk的量,要么就升级集群内存。
■网友
遇到过类似问题。 可以有几个办法,
一个方法是试着用union, groupbykey, mapvalues。 似乎会节约一些内存。
方法2 join前,将两个集合拆成几部分,组合起来做join。
方法3, 一种简单的办法, 遇到这种情形的join用map reduce代替spark,计算完了再转回spark继续就成了。
【spark千万数据join问题?】 方法4,使用spark-submit时,指定内存。另外将每个node中spark配置里的单任务内存优化一下。比如从5GB改成9GB


    推荐阅读