在我的 spark 应用程序中,我正在 spark rdd 中读取几个 hive 表,然后稍后对这些 rdd 执行一些转换。为了避免重新计算,我使用 rdd.cache()
缓存了这些 rdds或 rdd.persist()
和 rdd.checkpoint()
方法。
根据 spark 文档和在线引用资料,我认为检查点操作比缓存更昂贵。虽然缓存保持 rdd 沿袭和检查点打破它,但检查点从 HDFS 写入和读取。
我在我的案例中观察到的奇怪的事情是,我看到检查点阶段比缓存/持久化(仅内存)更快(近 2 倍)。我跑了多次,结果仍然相似。
我无法理解为什么会发生这种情况。任何帮助都会有所帮助。
最佳答案
我最近运行了类似的基准测试,我遇到了同样的问题:checkpoint()
尽管有更多 I/O,但速度更快。我的解释是,保留整个血统是一项代价高昂的操作。
我在 1, 10, 100, 1000, 10000, 100000, 1000000, 2000000, 10m 和更多记录上运行基准测试,检查点总是更快。沿袭非常简单(记录过滤,然后是几个聚合)。存储在 NVMe 驱动器上(不是通过网络阻止)。我想这真的取决于很多标准。
关于performance - spark 检查点是否比缓存更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44963752/