4

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

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

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

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

4

1 回答 1

1

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

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

于 2019-07-01T12:29:06.887 回答