【问题标题】:Benchmarking Spark without using actions在不使用操作的情况下对 Spark 进行基准测试
【发布时间】: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。

标签: apache-spark apache-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 中的工作方式是否不同,所以我担心它不会显示最准确的结果。感谢您的回答!
猜你喜欢
  • 2017-09-18
  • 2017-09-06
  • 2015-09-07
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
相关资源
最近更新 更多