Hive 和 Spark 之间的执行差异

时间:2021-04-09 04:44:50

标签: apache-spark hadoop hive

全部:我正在寻找知识渊博的人来检查我对 Hive 和 Spark 的理解

我一直在研究不同的大型数据库解决方案,我正在尝试了解 Hive 和 Spark 在执行方面的差异。我尝试安装 Hadoop、Hive 和 Spark 以查看它们的性能。我能够让 Hadoop 和 Spark 工作。我无法让 Hive 工作。

当我在通过优化器后在 Spark 中运行查询时,似乎最大的优点是在最早的时候只从源中选择相关的表数据。因此,如果我在最终答案中只需要 Table1.columns(A,B,C),但告诉系统在 (Table1.A=Table2.B) 上 JOIN Table1 & Table2 它会立即将携带的表格减少到仅相关项目...我不认为 Hive 会那样做。我相信它会做全连接,稍后再执行缩减。

内存存储也存在差异(Hive 经常返回 HDFS,而 Spark 将内容保存在 RAM 中)。根据数据集/查询的不同,这既有优点也有缺点。

不幸的是,因为我无法让 Hive 运行,我的理论基于读取其他人在 Hive 中运行的输出。

2 个答案:

答案 0 :(得分:1)

Hive on Tez 和 Spark 都使用 Ram(memory) 来操作数据。计算出的将被视为单个任务的分区数量与 Tez vs Spark 上的 Hive 有很大不同。 Hive on Tez 默认尝试使用组合器将某些拆分合并为单个分区。 Hive one Tez 似乎以比 spark 更好的方式处理集群的自动缩放,并且在大多数情况下都可以工作。Spark 不适用于自动缩放,它会出现很多 shuffle 错误,并且在有多个阶段时会失败。但鉴于集群的固定大小,Spark 在 TEZ 上的性能似乎优于 Hive,这可能归因于已完成的一些优化以及混洗、序列化等的实现方式。

答案 1 :(得分:0)

我认为 hive 和 spark 原本有不同的目标,它们的执行风格都是基于这些目标。

Apache spark 是一个允许您对大型数据集进行计算的框架。存储在 hdfs 上

Hive 是一个 SQL 接口,用于以结构化的方式检索存储在 hdfs 和其他集群化和对象存储文件系统(S3 是一个示例)中的数据。

Spark 将事情保存在 ram 上,因为它更专注于使用数据集进行计算。 Hive 更侧重于以结构化的方式检索数据,因此它不太注重速度(也就是说,hive 已经有了改进,例如 llap 旨在提高性能)。

我喜欢用传统软件工具做类比。一方面,您可以拥有一个关系数据库,另一方面,您可以拥有一种编程语言。它们都在某些功能上重叠(您可以使用编程语言写入和读取磁盘,并且您可以使用 sql 引擎进行一些计算。但是,如果手头的任务需要密集和复杂的计算,您可能会使用编程语言。如果您正在寻找一种允许您以结构化方式存储数据的系统,您会选择 sql 引擎。

相关问题