作者|爱丽丝菌
编辑|晚美
出品|CSDN博客
本博客将为大家分享的是如何实现SparkonHive,即让Hive只扮演存储的角色,Spark负责sql解析和优化,执行……不多说直接上车!
上车前你需要了解Sparkonhive与hiveonspark的区别
1.火花生活
Spark使用hive语句,通过Spark-SQL操作hive,sparkrdd运行在底层。
(1)通过sparksql加载hive的配置文件,获取hive的元数据信息。
(2)sparksql在获取hive的元数据信息后,可以获取hive的所有表的数据。
(3)然后可以通过sparksql操作hive表中的数据。
2 .海文公园
就是用sparkrdd(spark执行引擎)操作代替mapreduce的mr(Hadoop计算引擎)操作中的hive query。和spark Hive相比,实现起来要麻烦很多,必须重新编译你的spark,导入jar包,但是目前大部分都是用Spark Hive。
上车
概述
最权威的解释见ApacheSpark官网,http://spark . Apache . org/docs/latest/SQL-data-sources-hive-tables . html。
其中最关键的一句话,博主,已经摘抄给大家了。
configurationhfivesdonebyplacingyourhhive-site . XML、core-site.xml(用于安全配置)和dfs-site.xml(用于hdfs配置)文件。
这是什么意思?先卖到这里吧,看到后面的人你就明白了。
Hive查询过程和原理
执行HQL时,先在MySQL元数据库中查找描述信息,然后解析HQL,根据描述信息生成MR任务;
Hive将SQL转换成MapReduce,执行速度慢;
将Hive与SparkSQL集成,实际上就是让SparkSQL加载Hive的元数据库,然后通过SparkSQL执行引擎对Hive表中的数据进行操作。
首先,你需要启动Hive的metabase服务,这样SparkSQL才能加载元数据。
发车
一、Hive开启MetaStore服务
1修改hive/conf/hive-site.xml并添加以下配置:
?xmlversion='1.0 'XML-style sheet type=' text/xsl ' href=' configuration . xsl 'configuration propertynamehive . metastore . warehouse . dir/name Value/user/hive/warehouse/Value/propertynamehive . metastore . local/name Value false/Value/propertynamelive。metastore . uri/namevaluethrift ://node 01:9083/value/property/configuration 2在后台启动HiveMetaStore服务。
nohup/export/servers/hive/bin/hive-servicemetastore 21/var/log . log二、SparkSQL整合HiveMetaStore
Spark有一个内置的MateStore,它使用Derby嵌入式数据。
库保存数据,但是这种方式不适合生产环境,因为这种模式同一时间只能有一个SparkSession使用,所以生产环境更推荐使用Hive的MetaStore。SparkSQL整合Hive的MetaStore主要思路就是要通过配置能够访问它,并且能够使用HDFS保存WareHouse,所以可以直接拷贝Hadoop和Hive的配置文件到Spark的配置目录。
hive-site.xml元数据仓库的位置等信息
core-site.xml安全相关的配置
hdfs-site.xmlHDFS相关的配置
我们进入到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/confcp/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml/export/servers/spark/conf提示:使用IDEA本地测试直接把以上配置文件放在resources目录即可。
飙车
先完成如下所示的代码,使用SparkSQL完成创建一个表,并将本地文件中的数据导入到表格中的操作。
使用SparkSQL操作Hive表:
importorg.apache.spark.sql.SparkSessionobjectHiveSupport{defmain(args:Array[String]):Unit={//创建sparkSessionvalspark=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("showtables").show//创建表spark.sql("CREATETABLEperson(idint,namestring,ageint)rowformatdelimitedfieldsterminatedby''")//加载数据,数据为当前SparkDemo项目目录下的person.txt(和src平级)spark.sql("LOADDATALOCALINPATH'in/person.txt'INTOTABLEperson")//查询数据spark.sql("select*fromperson").showspark.stop}}
在运行程序之前,先让我们进入到hive的shell窗口,查看一下当前默认数据库default有哪些表:
hive(default)>showtables;OKtab_namestudenttechertecher2Timetaken:0.738seconds,Fetched:3row(s)hive(default)>
然后右键运行,当IDEA控制台打印以下结果,说明我们的程序运行成功了。
再次进入到hive的shell窗口,查看当前表,此时已经发现了我们刚刚用SparkSQL所创建的表:
翻车
正当博主终于长舒了一口气,准备拿出82年珍藏的雷碧小酢一杯的时候,电脑可能是馋哭了,直接蓝屏警告。
好了,不说了,说多了都是泪,本次的分享就到这里,身为蒟蒻本蒻的我去抢救电脑了,或许喂Ta喝点也不至于罢工是吧 ̄へ ̄
版权声明:本文为CSDN博主「Alice菌」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44318830/java/article/details/105471548