apache-spark - 关于 Hive 中的引擎,Map Reduce 和 Spark 有什么区别?
问题描述
看起来有两种方法可以使用 spark 作为 Hive 的后端引擎。
第一个是直接spark
用作引擎。喜欢这个教程。
另一种方法是spark
用作MapReduce
. 喜欢这个教程。
在第一个教程中,hive.execution.engine
是spark
. 我看不到hdfs
参与。
在第二个教程中,hive.execution.engine
仍然是mr
,但是由于没有hadoop
进程,所以看起来后端mr
是 spark。
老实说,我对此有点困惑。我想第一个建议mr
已被弃用。但hdfs
涉及的对象在哪里?
解决方案
Apache Spark 构建 DAG(有向无环图),而 Mapreduce 使用原生 Map 和 Reduce。在 Spark 中执行时,逻辑依赖关系形成物理依赖关系。
现在什么是DAG?
DAG 在执行之前构建逻辑依赖关系。(将其视为可视图)当我们有多个 map 和 reduce 或一个 reduce 的输出是另一个 map 的输入时,DAG 将有助于加快作业速度。 DAG 是在 Tez 中构建的(照片右侧),但不是在 MapReduce 中(左侧)。
注意: Apache Spark 在 DAG 上工作,但有阶段代替 Map/Reduce。Tez 有 DAG 并在 Map/Reduce 上工作。为了使其更简单,我使用了 Map/Reduce 上下文,但请记住 Apache Spark 有阶段。但 DAG 的概念保持不变。
原因 2: Map 将其输出保存到磁盘。(也有缓冲区,但当 90% 被填充时,输出进入磁盘)从那里数据进入合并。但是在 Apache Spark 中,中间数据是持久化到内存中的,这使得它更快。 检查此链接以获取详细信息
推荐阅读
- azure-devops - 您可以在多阶段 devops 管道的条件语句中使用构建标签吗
- python - Altair 中的对数滑块
- r - RStudio 不会在新机器上渲染 Plotly 绘图
- python - 我如何从这个网站上抓取一个随机生成的句子
- python - Python 和 Scrapy - Scraper 不返回结果
- php - ServiceProvider 已注册但在控制器中不起作用
- c++ - 如何为基于范围的 for 重载 std::list 的取消引用运算符?
- google-cloud-platform - artman googleapis google Healthcare api 和 google 的 grpc fhir repo 无法生成客户端?
- excel - 下载带有主题的 Outlook 附件
- javascript - 填写用户名和姓氏并转到下一页