零基础入门 Spark
吴磊
前 FreeWheel 机器学习研发经理
19171 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
零基础入门 Spark
15
15
1.0x
00:00/00:00
登录|注册

20 | Hive + Spark强强联合:分布式数仓的不二之选

你好,我是吴磊。
在数据源与数据格式,以及数据转换那两讲(第 15、16 讲),我们介绍了在 Spark SQL 之上做数据分析应用开发的一般步骤。
这里我们简单回顾一下:首先,我们通过 SparkSession read API 从分布式文件系统创建 DataFrame。然后,通过创建临时表并使用 SQL 语句,或是直接使用 DataFrame API,来进行各式各样的数据转换、过滤、聚合等操作。最后,我们再用 SparkSession 的 write API 把计算结果写回分布式文件系统。
实际上,直接与文件系统交互,仅仅是 Spark SQL 数据应用的常见场景之一。Spark SQL 另一类非常典型的场景是与 Hive 做集成、构建分布式数据仓库。我们知道,数据仓库指的是一类带有主题、聚合层次较高的数据集合,它的承载形式,往往是一系列 Schema 经过精心设计的数据表。在数据分析这类场景中,数据仓库的应用非常普遍。
在 Hive 与 Spark 这对“万金油”组合中,Hive 擅长元数据管理,而 Spark 的专长是高效的分布式计算,二者的结合可谓是“强强联合”。今天这一讲,我们就来聊一聊 Spark 与 Hive 集成的两类方式,一类是从 Spark 的视角出发,我们称之为 Spark with Hive;而另一类,则是从 Hive 的视角出发,业界的通俗说法是:Hive on Spark。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Hive与Spark的强强联合在分布式数据仓库中展现出无可替代的优势。文章详细介绍了Hive的架构和工作原理,强调了Hive Metastore的重要性,作为存储数据表元信息的“户口簿”。同时,文章深入讲解了Spark与Hive的两种集成方式:Spark with Hive和Hive on Spark。 在Spark with Hive集成方式中,Spark通过访问Hive Metastore来扩充数据访问来源,实现了对Hive表的访问。另一种集成方式是使用Beeline客户端连接Spark Thrift Server,从而完成Hive表的访问与处理。另一方面,Hive on Spark则是指Hive采用Spark作为其后端的分布式执行引擎。 通过详细的讲解和示例,读者能更好地理解了Hive与Spark的集成方式,为读者提供了宝贵的技术指导和实践经验。文章内容涵盖了Hive与Spark的多种集成方式,展现了它们在分布式数据仓库中的无可替代的优势,为读者提供了全面的技术视角。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《零基础入门 Spark》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • A
    不过,相比前者,spark-sql CLI 的集成方式多了一层限制,那就是在部署上,spark-sql CLI 与 Hive Metastore 必须安装在同一个计算节点。换句话说,spark-sql CLI 只能在本地访问 Hive Metastore,而没有办法通过远程的方式来做到这一点。 ---------我试了试是可以的老师,是我对这句话理解有误嘛?三台机器 01、02、03;01、02启动hive metastore,然后在03上启动spark-sql spark://bdp-dc-003:7077 同样是可以使用hive的metastore

    作者回复: 理解的没有问题~ 这块限制,随着Spark社区和Hive社区的发展,确实已经消除了,我后面会抽时间,改一下这里的原文描述,给兄弟们带来的困惑,表示抱歉哈~

    2021-11-09
    2
    7
  • Unknown element
    老师问下 Beeline + Spark Thrift Server 这种部署方式应该怎么配置spark参数呢?我看我们公司的文件是在hivesql里带上类似 set hive.exec.parallel=true; 这种参数,这和用dataframe api设置参数不太一样啊。。如果在 hive sql里配置的话它的参数和spark的参数的对应关系是怎样的呢?谢谢老师~

    作者回复: Beeline + Spark Thrift Server 这种方式,走的是Spark的计算引擎,所以set hive.exec.parallel=true这类Hive specific的参数,在这里其实是不起作用的。 不过在Hive on Spark的模式下,Hive相关的设置项都会起作用。其实本质上,还是要区分优化引擎和计算引擎。在Hive on Spark里面,Hive和Spark配置项都会起作用,Hive负责优化,Spark负责执行。而在Spark with Hive Metastore的集成模式下,Spark做优化,Spark做执行,这个时候,Hive的配置项就没什么用了哈~

    2021-12-20
    1
  • Unknown element
    问题一的执行路径是不是还是先建立dataframe,然后根据sql逻辑完成计算,最后存到hive?虽然是hive on spark但是我理解这种情况下应该没有用到hive的优化引擎吧

    作者回复: 是的,用户代码走的还是Spark with Hive metastore的路径,也就是仅仅把Hive当做元数据管理器,从Hive扩充数据源,或是把数据写到Hive中去~ 对于Hive on Spark来说,Spark只是后端的计算引擎,提交给Hive的SQL,会通过Hive本身的解析、优化,再交给Spark去执行而已

    2021-11-25
  • HHB
    老师请问,Hive with Spark的方式比直接使用spark sql的性能高吗?

    作者回复: 你说的是Hive on Spark吗?一般来说,Hive on Spark的性能,比Spark with Hive metastore或是Spark SQL本身,性能都要差一些,原因的话,老弟可以根据架构图来琢磨琢磨哈~

    2021-11-19
  • Geek_995b78
    老师,我把hive引擎换成spark后,一直出现这个错误,我看了 资源充足呀,您看一下,是什么原因呢 hive (test)> select count(*) from spark_hive group by id; Query ID = root_20211031144450_fc398bef-8f94-4a07-a678-cdeef464b128 Total jobs = 1 Launching Job 1 out of 1 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer=<number> In order to limit the maximum number of reducers: set hive.exec.reducers.max=<number> In order to set a constant number of reducers: set mapreduce.job.reduces=<number> Starting Spark Job = 75d07aa7-a98f-43b5-8fe5-de4158f454a7 Job hasn't been submitted after 61s. Aborting it. Possible reasons include network issues, errors in remote driver or the cluster has no available resources, etc. Please check YARN or Spark driver's logs for further information. Status: SENT Failed to execute spark task, with exception 'java.lang.IllegalStateException(RPC channel is closed.)' FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. RPC channel is closed.

    作者回复: Hive on Spark对于版本一致性要求比较高,这个是比较麻烦和比较坑的一点。上面的报错,是因为Hive和Spark版本不一致导致的,老弟可以参考这里,去根据两个组件版本的要求来配置Hive on Spark: https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started

    2021-10-31
    3
  • qinsi
    理论上应该可以把HQL转换成Spark SQL吧,那样Hive on Spark是不是性能就会提升了?

    作者回复: 对,理论上是这样的。不过,Hive社区不会这么做,为啥呢?因为Hive社区是从自身的设计出发,它还要顾及MapReduce和Tez,所以不会轻易动自身的优化引擎。不过讲道理,如果Hive实现了一套与Spark SQL一样的优化机制,那么Hive on Spark性能,就会像你说的,有所提升~

    2021-10-26
    2
  • gouge
    老师,请问为什么会有这个限制?“spark-sql CLI 的集成方式多了一层限制,那就是在部署上,spark-sql CLI 与 Hive Metastore 必须安装在同一个计算节点”。 我实验好像没有发现存在这个“限制”。如下: 我在本地配置 %SPARK_HOME%/conf/hive-site.xml,内容如下: <configuration> <property> <name>hive.metastore.uris</name> <value>thrift://xxx:9083</value> </property> </configuration> 其中xxx:9083为远程服务器上部署的hive metastore。通过这样的配置,再执行%SPARK_HOME%/bin/spark-sql,是可以查询到hive的元数据信息的。 谢谢!

    作者回复: 好问题~ 是这样的,spark-sql会在进程内启动自己的Metastore service,然后尝试去连接MySQL database(Metastore database),我可能原文没有交代清楚。老弟帮忙看下,看看hive-site.xml中,是否有Metastore database相关的配置项,推测是spark-sql自己的Metastore service通过hive-site.xml里面的database信息,直连的MySQL database。 老弟帮忙确认下哈~

    2021-10-26
    4
  • Geek_e2be2a
    官方的Spark Thriftserver功能比较弱,可以试一下Apache Kyuubi
    2022-07-17
    5
  • 王云峰
    HBase是按照列族聚集的还是按照列聚集的?就是磁盘上顺序扫是只扫某一列还是会列族所有列一起扫?
    2023-11-19归属地:浙江
  • 钱鹏 Allen
    Spark是计算引擎,而Hive是开发侧实现业务逻辑的入口 Hive的设计优势在于兼容,不同于以往的pig,他只需要写sql 同时也能优化计算逻辑,最终将计算过程放在map—reduce上
    2022-11-10归属地:广东
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部