GC减慢火花工作的速度

时间:2015-10-16 22:54:50

标签: amazon-s3 apache-spark garbage-collection

我正在运行一个非常简单的spark作业,它逐个读取许多s3文件并在RDD上调用map / filter作业并将结果写入另一个s3。换句话说,首先是一个for循环,在每个循环内部,有一个sc调用来读取,处理,然后写入步骤。

步调异常缓慢,即使每个文件大小与节点大小和数量相比较小(500 MB在8个节点内运行,每个10 GB的执行程序内存)。

在worker node stdout log中,我看到像这样的连续行 [GC2015-10-16T22:31:39.567 + 0000:[ParNew:272655K-> 19K(306688K),0.0292600秒] 467995K-> 195361K(10451712K),0.0293570秒] [时间:用户= 0.11 sys = 0.00,真实= 0.03秒]

似乎工人们正在崛起成为致死的人。为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

不确定每秒多少,但我找到了一个合理的解决方案。

在这种情况下,每个文件生成一个新的RDD,触发prev RDD的收集。我重写了代码,以便RDD是一个var,并为循环的每个循环重用相同的变量。现在,我仍然看到GC线,但吞吐量很快就快了10倍。