Hive 比 Spark 快吗?

Is Hive faster than Spark?

阅读 What is hive, Is it a database? 后,一位同事昨天提到他能够过滤一个 15B table,在执行 "group by" 后将其与另一个 table 合并,这只用了10分钟就得到了6B的记录!我想知道这在 Spark 中是否会更慢,因为现在使用 DataFrames,它们可能具有可比性,但我不确定,因此是个问题。

Hive 比 Spark 快吗?或者这个问题没有意义?对不起,我的无知。

他使用的是最新的 Hive,似乎在使用 Tez。

Hive 只是一个为 MapReduce 类型的工作负载提供 sql 功能的框架。

这些工作负载可以 运行 在 mapreduce 或 yarn 上。

所以比较 tez 上的 Hive 和 spark 上的 Hive。下面讨论这个的好文章 When to go with ETL on Hive using Tez VS When to go with Spark ETL?(如果不确定,Gist 在 spark 上使用 Hive)。

越低越好

Spark 方便,但在 SQL 性能方面不能很好地处理规模。

Hive 对联合分区联接具有 惊人的 支持。当您加入的表有数亿到数十亿行时,您将真正感谢通过以下方式提供的细粒度联接支持:

  • 相似distribute bysort by(或cluster by
  • bucketed joins

Hive 对 metadata-only queries 有广泛的支持:Spark 从 2.1 开始只有一线希望

当分区数可能超过 10K+ 时,Spark 很快就会失去动力。 Hive 不受此限制。

快进到 2018 年,Hive 比 SparkSQL 快得多(也更稳定),尤其是在并发环境中,根据以下文章:

https://mr3.postech.ac.kr/blog/2018/10/31/performance-evaluation-0.4/

本文使用三个集群(11 个节点、21 个节点、42 个节点)使用 TPC-DS 基准测试(1TB、3TB、10TB)比较了几个 SQL-on-Hadoop 系统:

  • HDP(Hortonworks 数据平台)2.6.4 中包含的 Hive-LLAP
  • Hive-LLAP 包含在 HDP 3.0.1 中
  • Presto 0.203e(启用基于成本的优化)
  • Presto 0.208e(启用了基于成本的优化)
  • SparkSQL 2.2.0 包含在 HDP 2.6.4
  • SparkSQL 2.3.1 包含在 HDP 3.0.1
  • Tez 之上的 Hive 3.1.0 运行
  • Hive on Tez 包含在 HDP 3.0.1 中
  • Hive 3.1.0 运行 在 MR3 0.4
  • 之上
  • Hive 2.3.3 运行 在 MR3 0.4
  • 之上

因此,与基于 Hive 的系统和 Presto 相比,SparkSQL 非常慢并且无法在并发环境中扩展。 (请注意,该实验在 vanilla Spark 上使用 SparkSQL 运行。)