Hive 和 Spark 在执行上的差异

Differences in Execution betwen Hive and Spark

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

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

当我运行通过优化器在Spark中查询时,似乎最大的优势是在最早开始时只从源中选择相关的table数据。因此,如果我在最终答案中只需要 Table1.columns(A,B,C),但告诉系统在 (Table1.A=Table2.B) 上加入 Table1 和 Table2,它会立即减少进位table 仅适用于相关项目...我认为 Hive 不会那样执行。我相信它会做完整的连接并在稍后执行缩减。

内存存储也存在差异(Hive 经常返回 HDFS,而 Spark 将内容保存在 RAM 中)。根据数据set/query.

,这既有优点也有缺点

不幸的是,因为我无法让 Hive 进入 运行,我的理论是基于阅读其他人 运行Hive 中的东西的输出。

我觉得hive和spark本来的目标是不一样的,他们的执行风格也是基于这些目标的。

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

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

Spark 将所有内容保存在 ram 上,因为它更专注于对数据集进行计算。 Hive 更专注于以结构化的方式检索数据,因此它并没有那么注重速度(也就是说,hive 已经有了改进,比如 llap 旨在提高性能)。

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

Hive on Tez 和 Spark 都使用 Ram(内存)对数据进行操作。计算的分区数将被视为单独的任务,这与 Hive on Tez vs Spark 有很大不同。默认情况下,Tez 上的 Hive 尝试使用组合器将某些拆分合并为单个分区。 Hive one Tez 似乎以比 spark 更好的方式处理集群的自动缩放,并且大多数 time.Spark 不适用于自动缩放,它会出现很多随机错误,并且在有多个阶段时会失败。但是给定一个固定大小的集群,Spark 似乎在 TEZ 上比 Hive 表现更好,这可能归因于所做的一些优化以及洗牌、序列化等的实现方式。