查看原文
其他

秋名山老司机从上车到翻车的悲痛经历,带你深刻了解什么是 Spark on Hive!| 原力计划

Alice菌 CSDN 2020-10-29

作者 | Alice菌
责编 | 夕颜
出品 | CSDN博客

本篇博客将为大家分享的内容是如何实现Spark on Hive,即让Hive只作为存储角色,Spark负责sql解析优化,执行…话不多说,直接上车!

        

上车前需知        


Spark on hive 与 hive on spark 的区别


1. Spark on hive


是spark 通过Spark-SQL使用hive 语句,操作hive ,底层运行的还是 spark rdd。


(1)就是通过sparksql,加载hive的配置文件,获取到hive的元数据信息


(2)spark sql获取到hive的元数据信息之后就可以拿到hive的所有表的数据


(3)接下来就可以通过spark sql来操作hive表中的数据


2.hive on spark


是把hive查询从mapreduce 的mr (Hadoop计算引擎)操作替换为spark rdd(spark 执行引擎) 操作. 相对于spark on hive,这个要实现起来则麻烦很多, 必须重新编译你的spark和导入jar包,不过目前大部分使用的是spark on hive。


上车


概述


最权威的解释请见Apache Spark官网,http://spark.apache.org/docs/latest/sql-data-sources-hive-tables.html


其中最关键的一句博主已经为大家提取出来了

Configuration of Hive is done by placing your hive-site.xml, core-site.xml (for security configuration), and hdfs-site.xml (for HDFS configuration) file in conf/.

到底是什么意思呢,这里先卖个关子,看到后面大伙就懂了。


  • Hive查询流程及原理

    • 执行HQL时,先到MySQL元数据库中查找描述信息,然后解析HQL并根据描述信息生成MR任务;

    • Hive将SQL转成MapReduce执行速度慢;

    • 使用SparkSQL整合Hive其实就是让SparkSQL去加载Hive 的元数据库,然后通过SparkSQL执行引擎去操作Hive表内的数据;


    首先需要开启Hive的元数据库服务,让SparkSQL能够加载元数据。


 

发车


一、Hive开启MetaStore服务


<1>修改 hive/conf/hive-site.xml 新增如下配置:


<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>false</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://node01:9083</value> </property> </configuration>

<2>后台启动 Hive MetaStore服务

nohup /export/servers/hive/bin/hive --service metastore 2>&1 >> /var/log.log &

二、SparkSQL整合Hive MetaStore


Spark 有一个内置的 MateStore,使用 Derby 嵌入式数据库保存数据,但是这种方式不适合生产环境,因为这种模式同一时间只能有一个 SparkSession 使用,所以生产环境更推荐使用 Hive 的 MetaStore。


SparkSQL 整合 Hive 的 MetaStore 主要思路就是要通过配置能够访问它, 并且能够使用 HDFS 保存 WareHouse,所以可以直接拷贝 Hadoop 和 Hive 的配置文件到 Spark 的配置目录。


        hive-site.xml 元数据仓库的位置等信息

        core-site.xml 安全相关的配置

        hdfs-site.xml HDFS 相关的配置

        

我们进入到shell窗口,执行以下命令。


将hive目录下的hive-site.xml拷贝至spark安装目录下:

cp /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml /export/servers/spark/conf

将hadoop安装目录下的core-site.xml和 hdfs-site.xml拷贝至spark安装目录下

cp /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml /export/servers/spark/conf
cp /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml /export/servers/spark/conf

提示:使用IDEA本地测试直接把以上配置文件放在resources目录即可。


飙车


先完成如下所示的代码,使用SparkSQL完成创建一个表,并将本地文件中的数据导入到表格中的操作。


使用SparkSQL操作Hive表:

import org.apache.spark.sql.SparkSession

object HiveSupport { def main(args: Array[String]): Unit = { //创建sparkSession val spark = SparkSession .builder() .appName("HiveSupport") .master("local[*]") .config("spark.sql.warehouse.dir", "hdfs://node01:8020/user/hive/warehouse") .config("hive.metastore.uris", "thrift://node01:9083") .enableHiveSupport()//开启hive语法的支持 .getOrCreate()

// 设置日志级别 spark.sparkContext.setLogLevel("WARN")

//查看有哪些表 spark.sql("show tables").show()

//创建表 spark.sql("CREATE TABLE person (id int, name string, age int) row format delimited fields terminated by ' '")

//加载数据,数据为当前SparkDemo项目目录下的person.txt(和src平级) spark.sql("LOAD DATA LOCAL INPATH 'in/person.txt' INTO TABLE person")

//查询数据 spark.sql("select * from person ").show()

spark.stop() }}

在运行程序之前,先让我们进入到hive的shell窗口,查看一下当前默认数据库default有哪些表:

hive (default)> show tables;
OKtab_namestudenttechertecher2Time taken: 0.738 seconds, Fetched: 3 row(s)hive (default)>

然后右键运行,当IDEA控制台打印以下结果,说明我们的程序运行成功了。

再次进入到hive的shell窗口,查看当前表,此时已经发现了我们刚刚用SparkSQL所创建的表:


翻车


正当博主终于长舒了一口气,准备拿出82年珍藏的雷碧小酢一杯的时候,电脑可能是馋哭了,直接蓝屏警告。


好了,不说了,说多了都是泪,本次的分享就到这里,身为蒟蒻本蒻的我去抢救电脑了,或许喂Ta喝点也不至于罢工是吧 ̄へ ̄


版权声明:本文为CSDN博主「Alice菌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。


原文链接:https://blog.csdn.net/weixin_44318830/java/article/details/105471548


【End】


CSDN 618程序员购物日:显示器、键盘、蓝牙耳机、扫地机器人、任天堂游戏机、AirPods Pro等超多IT人的心仪好物,全场超低价出售,让1亿程序员买到爽!


更多精彩推荐

☞使用虚幻引擎4年,我想再谈谈他的网络架构

☞算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》

程序员晒端午福利,网友:看了你的福利我想摔手机

如何成为一名黑客?

发送0.55 ETH花费近260万美元!这笔神秘交易引发大猜想

京东姚霆:推理能力,正是多模态技术未来亟需突破的瓶颈!

你点的每个“在看”,我都认真当成了喜欢

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存