火花检查点是否比缓存更快?

时间:2017-07-07 06:16:17

标签: performance apache-spark apache-spark-sql checkpointing

在我的spark应用程序中,我正在阅读spark rdd中的几个hive表,然后在这些rdds上执行一些转换。为避免重新计算,我使用rdd.cache()rdd.persist()rdd.checkpoint()方法缓存了这些rdds。

根据spark文档和在线参考资料,我认为检查点操作比缓存更昂贵。虽然缓存保持rdd血统和检查点打破它,但检查点从HDFS写入和读取。

我在我的案例中观察到的奇怪的事情是,我看到检查点阶段比缓存/持久(仅仅内存)更快(接近2倍)。我跑了好几次,结果仍然相似。

我无法理解为什么会这样。任何帮助都会有所帮助。

1 个答案:

答案 0 :(得分:0)

我最近运行了类似的基准测试,但我遇到了相同的问题:尽管有更多的I / O,checkpoint()还是更快。我的解释是,保留整个血统是一项昂贵的操作。

我在1,10,100,1000,10000,100000,1000000,2000000,10m上运行基准测试,并且更多的记录和检查点总是更快。沿袭非常简单(先进行记录过滤,然后进行两次汇总)。存储在NVMe驱动器上是本地的(不通过网络阻止)。我想这真的取决于很多标准。