Apache Spark - 更多分区,性能更低

时间:2015-04-21 16:30:30

标签: performance amazon-ec2 apache-spark

我一直在EC2上运行Apache Spark程序,我的结果显示,通过将数据分区到每个核心推荐的2-3个分区远比使用(看似)默认分区2的速度慢得多。

在没有分区的情况下完成纳秒:

u1 - 650472112996
u2 - 654525970891
u3 - 498530412012
u4 - 568162162934
u5 - 659015135256

总分区数为2,我使用sparkContext.partitions.size进行了检查。 *

完成纳秒,每个核心有2个分区(共32个分区):

u1 - 1562831187137
u2 - 1690008041723
u3 - 1652170780785
u4 - 3381857826333 
u5 - 3969656930184 

这组特定的实验是在16节点集群中运行的。

虽然没有分区每次大约需要10分钟,但分区需要25-60分钟!使用了完全相同的程序和参数。检查Spark UI显示数据文件对于默认分区节点而言太大,并且通常数据溢出到磁盘,这在使用32个分区时从未发生过。此外,在默认的分区运行中只能运行2个任务(显然,只有2个分区);同时,32个分区集群有16个并发运行的任务。我以为分区运行会更快,而不是更慢!

什么可能导致速度下降?可能在节点间混乱数据?另外,为什么一个运行,即u1需要25分钟而另一个运行,即u5,在32个分区集群上需要1个小时,但是当使用默认分区运行时,它们需要大约相同的时间?

  • Apache Spark文档说分区数量将等于集群中的核心数量;但是,我已经使用不同的EC2实例在每个默认为2个分区的群集大小(2到20个)之间进行了测试。

0 个答案:

没有答案