关于Hive中的引擎,Map Reduce和Spark之间有什么区别?

时间:2019-07-03 03:37:50

标签: apache-spark hadoop hive

似乎有两种方法可以将spark用作Hive的后端引擎。

第一个是直接使用spark作为引擎。像这样tutorial

另一种方法是将spark用作MapReduce的后端引擎。像这样tutorial

在第一个教程中,hive.execution.enginespark。而且我看不到hdfs参与其中。

在第二个教程中,hive.execution.engine仍然是mr,但是由于没有hadoop进程,因此看来mr的后端是火花。

老实说,我对此有些困惑。我猜推荐使用第一个,因为mr已过时。但是hdfs涉及什么地方?

2 个答案:

答案 0 :(得分:1)

我的理解不同。

通常,Hive使用MR作为执行引擎,除非您使用IMPALA,但并非所有发行版都具有此功能。

但是一段时间以来,Spark可以用作Spark的执行引擎。

https://blog.cloudera.com/blog/2014/07/apache-hive-on-apache-spark-motivations-and-design-principles/对此进行了详细讨论。

答案 1 :(得分:1)

Apache Spark构建DAG(有向无环图),而Mapreduce与本机Map和Reduce一起使用。在Spark中执行时,逻辑依赖性形成物理依赖性。

现在什么是 DAG

DAG正在执行之前建立逻辑依赖关系(将其视为可视图形) 当我们有多个贴图并且reduce或一个reduce的输出是另一张贴图的输入时,DAG将帮助加速工作。 enter image description here DAG是在Tez(照片的右侧)中构建的,而不是在MapReduce(左侧)中构建的。

注意: Apache Spark可在DAG上运行,但具有代替Map / Reduce的阶段。 Tez有DAG,可以在Map / Reduce上工作。为了简化起见,我使用了Map / Reduce上下文,但请记住Apache Spark有阶段。但是DAG的概念保持不变。

原因2: Map会将其输出持久保存到磁盘。(也有缓冲区,但是当90%的缓冲区被填充时,输出将进入磁盘)从那里合并数据。 但是在Apache Spark中,中间数据会保留在内存中,从而使其速度更快。 Check this link for details