Amazon s3 GC将spark作业减慢到停止状态

Amazon s3 GC将spark作业减慢到停止状态,amazon-s3,apache-spark,garbage-collection,Amazon S3,Apache Spark,Garbage Collection,我正在运行一个非常简单的spark作业,它逐个读取许多s3文件,并在RDD上调用map/filter作业,然后将结果写入另一个s3。换句话说,首先有一个for循环,在每个循环中,有一个sc调用来读取、处理、然后写入步骤 速度异常缓慢,即使每个文件的大小与节点大小和数量相比都很小(在8个节点内运行500 MB,每个节点有10 GB的执行器内存) 在worker节点标准日志中,我看到了如下连续行 [GC2015-10-16T22:31:39.567+0000:[ParNew:272655K->19K

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

速度异常缓慢,即使每个文件的大小与节点大小和数量相比都很小(在8个节点内运行500 MB,每个节点有10 GB的执行器内存)

在worker节点标准日志中,我看到了如下连续行 [GC2015-10-16T22:31:39.567+0000:[ParNew:272655K->19K(306688K),0.0292600秒]467995K->195361K(10451712K),0.0293570秒][次:用户=0.11系统=0.00,实际=0.03秒]


看来工人们都快被杀了。为什么会发生这种情况?

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


在这种情况下,将为每个文件生成一个新的RDD,这将触发上一个RDD的集合。我重写了代码,使RDD成为一个var,并为循环的每个周期重用相同的变量。现在,我仍然可以看到GC线路,但吞吐量很容易提高10倍。

比如说,每隔10秒,有多少条GC线路?在大约1/10秒时,这大约是正确的(占总cpu的1%)。