Apache spark Hive和Spark在执行上的差异

Apache spark Hive和Spark在执行上的差异,apache-spark,hadoop,hive,Apache Spark,Hadoop,Hive,所有:我正在寻找有更多知识的人来检查我对蜂巢和火花的理解 我一直在研究不同的大规模数据库解决方案,并试图了解Hive和Spark在执行方面的差异。我试图安装Hadoop、Hive和Spark,看看它们的性能如何。我能够让Hadoop和Spark工作。我无法让蜂箱工作 当查询通过优化器后在Spark中运行查询时,最大的优势似乎是在最早的开始时只从源中选择相关的表数据。因此,如果我在最终答案中只需要Table1.列(A、B、C),但告诉系统将Table1和Table2连接在一起(Table1.A=T

所有:我正在寻找有更多知识的人来检查我对蜂巢和火花的理解

我一直在研究不同的大规模数据库解决方案,并试图了解Hive和Spark在执行方面的差异。我试图安装Hadoop、Hive和Spark,看看它们的性能如何。我能够让Hadoop和Spark工作。我无法让蜂箱工作

当查询通过优化器后在Spark中运行查询时,最大的优势似乎是在最早的开始时只从源中选择相关的表数据。因此,如果我在最终答案中只需要Table1.列(A、B、C),但告诉系统将Table1和Table2连接在一起(Table1.A=Table2.B),它会立即将携带的表缩减为仅相关的项……我认为Hive不会以这种方式执行。我相信它将完成完全连接,并在以后执行缩减

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


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

我认为Hive和spark最初有不同的目标,他们的执行风格基于这些目标

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

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

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


我喜欢与传统的软件工具进行类比。一方面,您可以拥有一个关系数据库,另一方面,您可以拥有一种编程语言。它们在某些功能上都有重叠(您可以使用编程语言写入和读取磁盘,也可以使用sql引擎进行一些计算。但是,如果手头的任务需要密集而复杂的计算,您可能会使用编程语言。如果您正在寻找一种允许以结构化方式存储数据的系统,您会选择sql引擎。Tez和Spark上的Hive都使用Ram(内存)用于对数据进行操作。计算的分区数将被视为单个任务,这与Hive on Tez与Spark有很大不同。默认情况下,Hive on Tez尝试使用combiner将某些拆分合并到单个分区中。Hive one Tez似乎比Spark更好地处理集群的自动缩放,并且在大多数情况下都能工作时间。Spark不适用于自动缩放,它会有很多洗牌错误,并且在有多个阶段时会失败。但是,考虑到固定大小的群集,Spark似乎比TEZ上的Hive性能更好,这可能是由于进行了一些优化,以及洗牌、序列化等是如何实现的。

不清楚是什么原因造成的您的配置单元问题是,但是mapreduce确实很慢,您应该安装Tez执行引擎进行合理的比较…(配置单元也可以直接使用Spark执行)。这两个都不是“数据库解决方案”优化器无法删除联接,因为您没有从某些表中选择列。联接可以减少或增加行数。这是预期的行为。Spark在相同的文件系统配置单元上工作(两个项目中使用相同的hadoop文件系统API方法)是的,我同意,就像编程语言和数据库引擎使用相同的操作系统调用来写入和读取磁盘一样。然而,Spark专注于或使用数据进行复杂的计算,而hive专注于以结构化方式存储和检索数据SparkSQL也需要结构化数据,并且可以从HDF以外的地方读取数据我的评论更多的是“大数据集上的计算。存储在hdfs上”不完全正确我认为spark最初被认为是大数据的计算引擎。它甚至在名称上:大数据的统一分析引擎。它随着时间的推移而发展,正如前面提到的,有几个领域是重叠的。这包括SparkSQL。但我们可能在这里吹毛求疵。