Hive on Spark、Spark on Hive的异同

金歌  金牌会员 | 2024-6-10 19:43:50 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 582|帖子 582|积分 1746

本篇对 Hive on Spark、Spark on Hive 两个概念做个澄清。
1.1 什么是 Hive on Spark?



  • 界说:Hive-on-Spark 是在 Hive 上新增一种盘算引擎:Spark
  • 目的:借助 Spark 内存盘算引擎的优势,提拔 Hive 查询性能(相较于默认实行引擎 MR)
  • 地位:Spark 和 Hive 原有的实行引擎 MR,Tez 平级,可互相替换
  • 益处:给已经部署了 Hive 大概 Spark 的用户提供了更加机动的选择,从而进一步提高 Hive 和 Spark 的遍及率
1.2 什么是 Spark on Hive?



  • 界说:没有官方的 Spark on Hive 说法,属于各人习惯性称呼。结合网上资料,将其对应为 SparkSQL 读写 Hive 表特定场景
  • 目的:使 SparkSQL 能够访问 Hive 表
  • 地位:SparkSQL 对 Hive 为非必须依靠,SparkSQL 可以创建自己的metastore_db,但两者结合使用为现在常态
  • 益处:可以使新版 SparkSQL 访问旧的数仓表,便于 SparkSQL 推广和应用
2.1 Hive on Spark 历史



  • Hive 是基于 Hadoop 平台的数据堆栈,最初由 Facebook 开发
  • 在经过多年发展之后,已经成为 Hadoop 事实上的SQL引擎尺度
  • Hive 最初的盘算引擎为 MapReduce
  • 受限于其自身的 Map + Reduce 盘算模式,以及不够充分的内存使用,MapReduce 的性能难以得到提拔
  • Hortonworks 于 2013 年提出将 Tez 作为另一个盘算引擎以提高 Hive 的性能
  • Hortonworks 有一个死对头 Cloudera
  • 2014 年,Cloudera 主导启动了 Hive on Spark。这个项目得到了 IBM,Intel 和 MapR 的支持(注意:没有 Databricks,但 Databricks 在开发过程中积极共同)
  • 2015 年 1 月初,Hive-on-Spark 合并回 trunk, 并在 Hive 后续版本中发布
2.2 SparkSQL 历史



  • 定位: Spark 官方 Databricks 的项目,Spark 项目本身主推的 SQL 实现
  • Spark 很早就已开始对接 Hive, 2013年,发布了 Shark 项目,用以提拔 Hive 查询性能
  • shark 底层使用 spark 的基于内存的盘算模型,从而让性能比 Hive 提拔了数倍到上百倍
  • 底层很多东西还是依靠于 Hive,修改了内存管理、物理计划、实行三个模块
  • Shark 对于 Hive 的修改/侵入性过于巨大,导致 Hive 社区都无法担当,无法合并回社区
  • 2014 年 6 月 1 日的时候,Spark 宣布不再开发 Shark,全面转向 Spark SQL 的开发
3. Hive on Spark / Spark on Hive 异同



  • 相同点:

    • SQL 实行层都是 Spark 引擎

  • 不同点:

    • SQL 剖析层不同, Hive on Spark (hive compiler), Spark on Hive (SparkSQL compiler)

  • 各自的恒久规划不同:

    • 其中 SparkSQL 作为 Spark 生态的一员继续发展,而不再受限于 Hive,只是兼容 Hive;而 Hive on Spark 是一个 Hive 的发展计划,该计划将 Spark 作为 Hive 的底层引擎之一,也就是说,Hive 将不再受限于一个引擎,可以采用 Map-Reduce、Tez、Spark 等引擎。

4. Hive on Spark 技术实现原理




  • Hive on Spark 总体的设计思路是,尽可能重用 Hive 逻辑层面的功能;从生成物理计划开始,提供一整套针对 Spark 的实现
  • 尽可能淘汰对 Hive 原有代码的修改
  • 对于选择 Spark 的用户,应使其能够自动的获取 Hive 现有的和未来新增的功能
  • 尽可能低落维护资本,保持对 Spark 依靠的松耦合
  • 引入 SparkCompiler,与 MapReduceCompiler 和 TezCompiler 平行,将 Operator Tree 转换为 Task Tree
  • SparkWork 对应 DAG 实行计划,SparkTask 对应 Job 任务
  • 最后通过 foreachAsync 将 SparkTask 提交实行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表