20 | Hive + Spark强强联合:分布式数仓的不二之选
- 深入了解
- 翻译
- 解释
- 总结
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-0927 - 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-201 - 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-313 - qinsi理论上应该可以把HQL转换成Spark SQL吧,那样Hive on Spark是不是性能就会提升了?
作者回复: 对,理论上是这样的。不过,Hive社区不会这么做,为啥呢?因为Hive社区是从自身的设计出发,它还要顾及MapReduce和Tez,所以不会轻易动自身的优化引擎。不过讲道理,如果Hive实现了一套与Spark SQL一样的优化机制,那么Hive on Spark性能,就会像你说的,有所提升~
2021-10-262 - 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-264 - Geek_e2be2a官方的Spark Thriftserver功能比较弱,可以试一下Apache Kyuubi2022-07-175
- 王云峰HBase是按照列族聚集的还是按照列聚集的?就是磁盘上顺序扫是只扫某一列还是会列族所有列一起扫?2023-11-19归属地:浙江
- 钱鹏 AllenSpark是计算引擎,而Hive是开发侧实现业务逻辑的入口 Hive的设计优势在于兼容,不同于以往的pig,他只需要写sql 同时也能优化计算逻辑,最终将计算过程放在map—reduce上2022-11-10归属地:广东