火花检查点比缓存更快吗?

Posted

技术标签:

【中文标题】火花检查点比缓存更快吗?【英文标题】:Is spark checkpointing faster than caching? 【发布时间】:2017-07-07 06:16:17 【问题描述】:

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

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

我观察到的奇怪的事情是,我发现检查点阶段比缓存/持久化(仅内存)更快(近 2 倍)。我跑了多次,结果仍然相似。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于火花检查点比缓存更快吗?的主要内容,如果未能解决你的问题,请参考以下文章

二分查找会更快吗?Python中的二分查找与线性查找性能测试

缓存型 C++ 编译器 Zapcc 开源,号称比 Clang 更快

火花流的 S3 检查点导致错误

如何直接在 Azure Blob 存储上存储火花作业(结构化流)的检查点?

如何检查火花数据框是不是为空?

如何检查火花数据框是不是为空?