在不使用操作的情况下对 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 测试