performance - spark 检查点是否比缓存更快?

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

在我的 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/

相关文章:

c# - 通过 C# 进行 Apache spark 查询

scala - 如何访问数组列中的值?

hadoop - 无法连接到 sparkSQL

C++ stringstream输出性能

mysql - MySQL表中统计数据的快速计算

javascript - 在 Javascript 中播放声音性能很重吗?

sql - 如何使用sql在数据 block 上创建带有嵌套 map 的表

arrays - 查找小于其右侧某个元素的每个元素

python - 是否应避免使用 DataFrame 函数 groupBy?

apache-spark - 在不知道作业 ID 的情况下如何获取 Apache Spark 作业进度?