我的Spark应用程序分几个阶段处理输入CSV文件。在每个阶段, RDD创建的大小(以MB为单位)。我创建了不同数量的分区并尝试过,但是分区总是不均匀地完成了这个阶段。一些分区很快就完成了一个阶段,但是最后几个分区总是花费大量时间并继续抛出心跳超时和执行程序丢失失败并继续重试。
我已尝试将分区数更改为不同的值,但始终最后几个分区永远不会完成。在尝试了很久之后我无法解决这个问题。
我该如何处理?
答案 0 :(得分:3)
问题的根源很可能就是这部分:
aggregateByKey(Vector.empty[(Long, Int)])(_ :+ _, _ ++ _)
基本上你正在做的是效率明显低于groupByKey
的版本。如果密钥的分布是倾斜的,那么聚合后的分布将会偏斜,导致不同机器上的负载不均匀。
此外,如果单个密钥的数据不适合主存储器,则整个过程将因与groupByKey
相同的原因而失败。