看完什么是hive,是数据库吗?,昨天有同事提到他可以过滤一个15B的表,在“group by”后与另一个表连接,结果是6B的记录,只用了10分钟!我想知道这在 Spark 中是否会更慢,因为现在使用 DataFrame,它们可能具有可比性,但我不确定,因此是这个问题。
Hive 比 Spark 快吗?还是这个问题没有意义?对不起,我的无知。
他使用最新的 Hive,它似乎在使用 Tez。
看完什么是hive,是数据库吗?,昨天有同事提到他可以过滤一个15B的表,在“group by”后与另一个表连接,结果是6B的记录,只用了10分钟!我想知道这在 Spark 中是否会更慢,因为现在使用 DataFrame,它们可能具有可比性,但我不确定,因此是这个问题。
Hive 比 Spark 快吗?还是这个问题没有意义?对不起,我的无知。
他使用最新的 Hive,它似乎在使用 Tez。
Hive 只是一个为 MapReduce 类型的工作负载提供 sql 功能的框架。
这些工作负载可以在 mapreduce 或 yarn 上运行。
因此,比较 tez 上的 Hive 和 spark 上的 Hive。下面的好文章讨论了何时使用 Tez 在 Hive 上使用 ETL VS 何时使用 Spark ETL?(如果不确定,请在火花上使用 Hive)。
越低越好
Spark 很方便,但在 SQL 性能方面不能很好地处理规模。
Hive对共同分区连接有惊人的支持。当您要加入的表有数亿到数十亿行时,您将非常感谢通过以下方式提供的细粒度连接支持:
distribute by
的和sort 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 系统:
因此,与基于 Hive 的系统和 Presto 相比,SparkSQL 速度非常慢,并且无法在并发环境中扩展。(请注意,实验使用在 vanilla Spark 上运行的 SparkSQL。)