在不使用操作的情况下对 Spark 进行基准测试

Posted

技术标签:

【中文标题】在不使用操作的情况下对 Spark 进行基准测试【英文标题】:Benchmarking Spark without using actions 【发布时间】:2021-07-26 08:17:20 【问题描述】:

我试图通过对 hive 表运行一个简单的查询来比较 Spark 的性能与 Hive 相比,例如:

spark.sql("select * from schema.table where col = 0")

问题在于,由于 Spark 的惰性求值行为,我必须添加一个动作以使其运行。 我考虑过使用.count() 来强制代码运行,但我担心它会改变应用程序的运行方式并使与 Hive 的比较错误,因为每个任务不仅会进行过滤,还会计算在内。 使用.show() 也无济于事,因为它会限制结果。 我还尝试查看应用程序的 Web UI,并尝试将过滤和计数分开,以了解它们各自花费了多少时间,但它似乎合并为一项任务。

最终,我想强制 Spark 在不使用操作的情况下运行我的代码,但据我所知,这是不可能的。 我想知道是否有办法解决这个问题,以及在这种情况下对 Spark 进行基准测试的最佳方法是什么(可以使用哪些操作对 Spark 的性能影响最小,等等)

谢谢!

【问题讨论】:

如果你想比较 hive 和 spark,为什么不使用 spark-sql。 【参考方案1】:

如何将结果数据的数量指定为相当数量,然后在 Spark 和 Hive 中进行比较。我不确定这是否能证明您的查询是合理的,但只是一个想法。

spark.sql("select * from schema.table where col = 0").show(10000)

您可以在输出中提供所需的行数,并且可以在 hive 中使用附加“limit”的相同查询来执行基准测试。

hive > select * from schema.table where col = 0 limit 10000;

【讨论】:

我最终可能会这样做。虽然我认为最准确的基准测试方法是查询整个表,因为我不知道“限制”的行为如何以及它在 Hive 和 Spark 中的工作方式是否不同,所以我担心它不会显示最准确的结果。感谢您的回答!

以上是关于在不使用操作的情况下对 Spark 进行基准测试的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 TestFlight 的情况下对 iOS 应用进行 beta 测试

如何在不使用乘法的情况下对数字进行平方?

将应用内购买添加到现有已发布的应用程序并在不发布的情况下对其进行测试

如何在不消除坐标的情况下对浮点坐标进行排序? [关闭]

如何在不改变原始数组的情况下对数组进行排序?

如何在 Spark 控制台中对性能进行基准测试?