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

文章目录

  • 上车前需知
    • Spark on hive 与 hive on spark 的区别
      • 1. Spark on hive
      • 2.hive on spark
  • 上车
    • 概述
  • 发车
    • 一、Hive开启MetaStore服务
      • <1>修改 hive/conf/hive-site.xml 新增如下配置
      • <2>后台启动 Hive MetaStore服务
    • 二、SparkSQL整合Hive MetaStore
  • 飙车
    • 使用SparkSQL操作Hive表
  • 翻车

上车前需知

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.SparkSessionobject HiveSupport {def main(args: Array[String]): Unit = {//创建sparkSessionval 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;
OK
tab_name
student
techer
techer2
Time taken: 0.738 seconds, Fetched: 3 row(s)
hive (default)>

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

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

翻车

正当博主终于长舒了一口气,准备拿出82年珍藏的雷碧小酢一杯的时候

        电脑可能是馋哭了,直接蓝屏警告

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

秋名山老司机从上车到翻车的悲痛经历,带你深刻了解什么是Spark on Hive!相关推荐

  1. 微生物组入门必读+宏基因组实操课程=新老司机赶快上车

    声明:本文转载自宏基因组公众号,原作者朱微金,己获作者授权. 写在前面 作为纯wet遗传学博士,转行微生物组领域已经有两年.目睹微生物组文章中分析所占比重之大,让我痛下决心苦学dry技能.目前感觉对宏 ...

  2. BugkuCTF: 秋名山老司机(web)

    题目描述: 亲请在2s内计算老司机的车速是多少 1565348110-1585852319+1424136689-501596850-364488737*872756914-663618483-112 ...

  3. 上车是什么意思_老司机,“上车”的意思,你真的懂吗?

    父亲节刚刚过去,不知道你是否还记得小时候父亲微笑着向你伸出双手,轻轻一托,你就到了父亲的肩头,一声"上车喽"之后,你的惊呼和父亲的欢笑一起传来,尽管每次你都恐高害怕,但却对这个游戏 ...

  4. 河马搞笑GIF动态图网站(http://gif.hemaj.com)上线,老司机快上车!

    河马gif每天推出最新鲜最吸引人的搞笑gif图片,美女福利gif.趣图gif动态图片,广大玩家的犀利吐槽.快来河马gif与笑友们一起分享你的趣事吧!  河马搞笑GIF,只为博佳人一笑.. 网址:htt ...

  5. magnetX,资源搜索神器!老司机快上车!

    magnetX 中文版是一款非常好用的资源搜索神器,界面干净简洁并且不会有弹窗.而且可以通过关键字搜索,或者网址过滤这两种方式快速找到你想要的资源,并且还能配合WebTorrent在线播放,还可以配合 ...

  6. 秋名山老司机 (Bugku) re库和request库

    尝试写的第一个python脚本--之前一直只会用工具(不,有的工具也还不会用--)可以说是很神奇了 先贴上代码: import requests import re url='http://120.2 ...

  7. jstack 脚本 自动日志_运维老司机又翻车, 居然没用过日志切割Logrotate

    运维老司机又翻车, 居然没用过日志切割Logrotate 作为一个运维老司机, 这次又翻车了.只能说明一个原因, 就是菜, 所有才要多学习. 说起日志切割, 自己可以说是溜的一批.基本的套路就是在cr ...

  8. 老司机 iOS 周报 #22 | 2018-06-04

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  9. 老司机翻车现场 续:技术之外,程序员如何自我保护

    原文链接 昨天两件事:Bing 挂了,老司机收到律师函.前面的事太大,兜不住,所以今天只讲后面这件事. mmoaay 跟我说起这事时,我第一反应是:我靠,不好,卓同学出事了. 然后一副副画面浮现在我眼 ...

  10. 【AI学院】老司机手把手带学言有三的经典书籍《深度学习之图像识别》,需要的赶紧上车吧...

    为什么以及怎么学计算机视觉? 作为一个普通的程序员,如果能转型成为一个计算机视觉算法工程师,带来的不仅是高薪,还有从劳动密集型工种转化为智力密集型工种带来的"阶级跃迁".因为相对于 ...

最新文章

  1. NOIP2018 模拟 9.11
  2. oracle 连接池sql跟踪,实现SQLServer、MySQL和oracle数据库连接池
  3. WIN32获取进程当前目录
  4. 如何将windows10的显示字体调大
  5. php worker,问题 php不支持worker工作模式的报错
  6. apache spark_Apache Spark中的自定义日志
  7. 第五章 编写主引导扇区代码
  8. C语言基础知识之基本数据类型相关的总结
  9. Java代码块、构造方法(包含继承关系)的执行顺序
  10. 百度云链接后的html,百度云链接失效,这样就能找回!
  11. 图书信息管理系统设计与实现c语言,图书信息管理系统设计(c语言)
  12. 乐优商城项目实战视频教程
  13. 5G网络能力开放的“接头人“——NEF
  14. 计算机中级《软件设计师》考试分析
  15. 微信直接下载app的解决方案
  16. linux查看程序bss段,LINUX下目标文件的BSS段、数据段、代码段
  17. excel转html乱码,EXCEL表格中数字乱码是什么原因?
  18. C语言的s8数据结构
  19. 如何在wince下添加和删除驱动(作者:wogoyixikexie@gliet)
  20. 游泳馆馆所以及会员管理系统

热门文章

  1. VUCA时代的领导力开发
  2. HTML+CSS(婚纱公司网站)静态网页设计
  3. 使用周期一致的对抗网络进行不成对的图像到图像转换
  4. centos7下显卡型号查询
  5. Android 进程和文件的UID/GID
  6. bluehost 盗版_如何免费使用bluehost设置电子邮件地址并连接到gmail或Outlook 2020
  7. 安全防护工具之:ClamAV
  8. java各位数字补位,左边补0
  9. java 微信退款接口_微信APP支付和退款(JAVA)
  10. springboot 多模块 Found multiple @SpringBootConfiguration annotated classes