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

article/2025/9/28 5:52:00

        本篇博客,博主为大家分享的内容是如何实现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喝点也不至于罢工是吧 ̄へ ̄

在这里插入图片描述


http://chatgpt.dhexx.cn/article/6b6AAGYN.shtml

相关文章

CTFWeb——Bugku秋名山老司机 详细题解

题目&#xff1a;Bugku 秋名山老司机 解答: 刷新提示让我们以post方式传入计算的值。 此题是快速反弹Post请求类题目&#xff0c;因为所给时间很短而且计算比较复杂&#xff0c;所以只能写脚本。 python中有eval函数可以快速计算,满足要求。 这道题的脚本如下&#xff1a; #…

BugkuCTF_Web——“秋名山老司机”、“速度要快”、“cookies欺骗”

文章目录 一、“秋名山老司机”二、“速度要快”三、“cookies欺骗”完 一、“秋名山老司机” 开启环境&#xff0c;提示要在两秒钟计算结果 多次刷新发现每次的值不一样&#xff0c;并且知道了答案要通过赋值给value然后post上去 想到可以通过获取网页源代码使用eval()执行算…

Java Web 后端技术

Java Web后端技术(一) 学习Java及其相关技术到现在也是第一次写博客&#xff0c;可能理解不是很深&#xff0c;但也是自己学的一个小的总结&#xff0c;也希望各位大神不吝赐教。 1.Tomcat服务器 1.1Java Web 在讨论Tomcat之前先说明一下Java Web。Java Web是用Java技术来解…

Web后端的基础知识

文章目录 JavaWeb后端计算机网络基础认识Tomcat服务器使用Maven创建Web项目Servlet创建Servlet探究Servlet的生命周期解读和使用HttpServletWebServlet注解详解使用POST请求完成登陆上传和下载文件使用XHR请求数据重定向与请求转发了解ServletContext对象初始化参数 CookieSess…

一分钟整明白web前端和Java后端的就业前景

前端&#xff1a;前端即网站前台部分&#xff0c;运行在PC端&#xff0c;移动端等浏览器上展现给用户浏览的网页。随着互联网技术的发展&#xff0c;HTML5&#xff0c;CSS3&#xff0c;前端框架的应用&#xff0c;跨平台响应式网页设计能够适应各种屏幕分辨率&#xff0c;完美的…

web网页开发-前端

web网页开发-前端 refer web开发 https://developer.mozilla.org/en-US/docs/Learn 本文是入门性质文章&#xff0c;主要通过讲解html&#xff0c;css&#xff0c;js的基础知识对前端有一个入门级别的了解。 工具准备 git&#xff0c;使用gitee或者github进行代码托管 https://…

后端都需要学习什么?

目录 理解前、后端后端要干些啥呢小结汇总一下~ 理解前、后端 在一家软件公司里面&#xff0c;我们经常把开发人员分为前端开发人员&#xff0c;后端开发人员&#xff0c;那么我们怎么界定前端开发和后端开发呢。简单地说就是用户在屏幕上看到的和触摸到的体验&#xff0c;都是…

Web后端开发入门(2)

搭建JavaWeb应用开发环境--Tomcat服务器 下载与安装 首先&#xff0c;搜索Tomcat&#xff0c;找到如图网址 点击&#xff0c;进入Tomcat官网 在最左边一栏&#xff0c;有个Download&#xff0c;找到最新版Tomcat 9 &#xff0c;点击 下拉&#xff0c;找到如上图所示位置&#…

Web后端学习

web后端 一.cs/bs架构 CS/BS模式/客户端与浏览器模式 cs 需要安装客户端&#xff0c;客户端向服务器请求&#xff0c;服务器响应数据返回。 bs 浏览器即可访问通过http协议 3.web资源 静态资源&#xff1a;人们浏览到的网页是一样的 动态资源&#xff1a;不同人、时间…

后端开发基础——Web应用基础

目录 一. 动态网站开发基础 1.1.C/S 与 B/S 1.2.Web开发的请求响应模式 1.3.HTTP协议 1.4.URL简介 1.5.Web服务器简介 二. javaEE简介 2.1.Tomcat服务器 2.1.1.安装Tomcat服务器 2.1.2.Tomcat目录结构 2.1.3.Tomcat配置 2.3.javaEE标准目录结构 2.4.Hello World程…

Web后端开发入门(1)

Web概述&#xff1a; 在英语中web表示网页的意思&#xff0c;它用于表示Internet主机上供外界访问的资源。 Internet上供外界访问的Web资源分为&#xff1a; 1.静态Web资源&#xff08;如html页面&#xff09;&#xff1a;指web页面中始终不变的数据。 2.动态Web资源&#xff…

Javaweb后端开发必学(HTML、CSS、JS、Vue)

Javaweb HTML、CSSCSS引入方式< span >标签CSS选择器&#xff1a; 页面布局表格表单标签表单项 JavaScriptJavaScript引入方式JS语法变量数据类型运算符函数(Java中方法) JS对象ArrayStringJSON(对象标记法)BOMWindow 浏览窗口对象Location&#xff1a; 地址栏对象 DOM J…

0.Web 后端 开发

后端开发主要做什么: 后端程序主要工作就是 数据管理。 通常 包括数据的 存储 &#xff08;包括 增加、删除、修改&#xff09;和 查询 。 这听起来似乎很简单&#xff0c;其实有的业务流程非常复杂 &#xff08;想想淘宝购物&#xff09;&#xff0c;有时一个购买操作&#…

java课程设计 学生管理系统

java课程设计 学生管理系统 学生成绩管理系统 可实现功能 学生管理系统 查询学生信息&#xff1a;姓名、学号、性别、出生年月日。&#xff08;学号自动生成且唯一&#xff09;查询学生成绩&#xff1a;每个人都有数学、Java与体育与选修课查询学生课程进行公选课选课 教师管理…

java实现简易学生管理系统

最近在学java&#xff0c;看的黑马程序员的视频&#xff0c; 刚学到一个项目&#xff0c;学生管理系统&#xff0c;自己跟着用代码实现了一下。下面是我的代码。 javabean类 Student.java public class Student {private String id;private String name;private int age;priv…

java学生管理系统界面设计

关于学生管理系统的界面设计:代码如下: 数据库设计 DROP TABLE IF EXISTS stu; CREATE TABLE stu (stuId int(11) NOT NULL AUTO_INCREMENT,stuName varchar(30) DEFAULT NULL,stuSex varchar(30) DEFAULT NULL,stuAge int(11) DEFAULT NULL,stuJg varchar(30) DEFAULT NULL,s…

【Java】升级版学生管理系统项目

目录 一、前言 二、学生管理系统主要功能 在学生类下 在学生总部类下&#xff1a; main方法&#xff1a; 登录密码验证&#xff1a; 打印菜单&#xff1a; 增加学生信息&#xff1a; 查看学生信息&#xff1a; 删除学生信息&#xff1a; 修改学生信息&#xff1a; 查…

Java实现 “学生管理系统“

文章目录 一、项目简介二、系统展示三、程序设计 一、项目简介 本项目为基于java下实现模拟学生管理系统&#xff0c;具以下6个功能&#xff1a; 添加学生删除学生修改学生信息查询学生信息输出学生信息退出系统 二、系统展示 1. 菜单 2. 添加学生 3. 修改学生信息 4. 查询…

java学生成绩管理系统

学生成绩管理系统 使用java swing 和 jdbc 技术 管理学生信息 文章目录 学生成绩管理系统一&#xff0c;总体架构二、controller层的编写三、pojo层的编写四&#xff0c;view层的编写五&#xff0c;数据库的连接六&#xff0c;启动程序 一&#xff0c;总体架构 一共五个包 二…

Java——学生管理系统

学生管理系统实现步骤&#xff1a; 定义学生类学生管理系统的主界面的代码编写学生管理系统的查看所有学生的代码编写学生管理系统的添加学生代码的编写学生管理系统的删除学生的代码编写学生管理系统的修改学生的代码编写 学生系统主界面&#xff1a; public class Student…