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

article/2025/9/28 4:55:32

作者 | 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.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喝点也不至于罢工是吧 ̄へ ̄

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

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

推荐阅读
  • 大数据Spark:利用电影观看记录数据,进行电影推荐| 原力计划

  • 我!程序猿!被银行套路了!

  • 数据科学产业中哪些架构最热门?本文为你盘点了 5 款!

  • 陆奇:疫情下的创业者,最不能缺这两大能力

  • 滴滴技术总监受贿 1000 万,列入招聘黑名单,互联网大厂反腐有多强?

  • 用 Python 训练自己的语音识别系统,这波操作稳了!

  • 区块链如何解决食品安全问题?

真香,朕在看了!


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

相关文章

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

尝试写的第一个python脚本……之前一直只会用工具&#xff08;不&#xff0c;有的工具也还不会用……&#xff09;可以说是很神奇了 先贴上代码&#xff1a; import requests import re urlhttp://120.24.86.145:8002/qiumingshan/ rrequests.session() requestpage r.get(u…

bagku秋名山老司机

看题目,要求两秒内计算数值,发回去,获得flag,于是写脚本实现 import requests import reurl "http://120.24.86.145:8002/qiumingshan/" s requests.Session()#必须利用会话对象 Session()&#xff0c;否则提交结果的时候&#xff0c;页面又重新生成一个新的表达式…

秋名山老司机(详解)——bugku

刚刚做了bugku的题目&#xff0c;现在整理一下 写出解题思路&#xff0c;希望能够帮助到那些需要帮助的人 所有的wp都是以一题一篇的形式写出 主要是为了能够让读者更好的阅读以及查找&#xff0c; 希望你们不要责怪&#xff01;&#xff01;共勉&#xff01;&#xff01;&…

Bugku之秋名山老司机

秋名山老司机需要在2s内计算出来并提交&#xff0c;这个通过人工是不可能的&#xff0c;所以只能通过自己写脚本来计算并立即提交。 脚本如下也带有注释&#xff1a; import re import requestss requests.Session() r s.get("http://120.24.86.145:8002/qiumingshan…

bugKuctf-秋名山老司机

http://123.206.87.240:8002/qiumingshan/ 刷新几次发现需要把值post进去。 于是编辑脚本&#xff1a; encodingutf8 import re import requests s requests.Session() url ‘http://123.206.87.240:8002/qiumingshan/’ source s.get(url)#获取页面对象 expression re…

BugkuCTF: 秋名山老司机(web)

题目描述&#xff1a; 亲请在2s内计算老司机的车速是多少 1565348110-15858523191424136689-501596850-364488737*872756914-663618483-1120007195*1119001272-1463806595*1200528853?; 在两秒内刷新页面后会出现提示让提交计算出来的值&#xff0c;且url没有变化&#xff…

Bugku-Web-秋名山老司机

考察内容&#xff1a;http协议&#xff0c;Session会话控制 解题思路&#xff1a; 进入题目发现要你在2s内计算老司机的车速是多少 &#xff0c;查看源码也没发现什么 于是多刷新几下&#xff0c;发现每次的计算的算式都不一样&#xff0c;于是又刷新了几下&#xff0c;果然出…

bugku-秋名山老司机

秋名山老司机&#xff1a; 打开链接&#xff0c;让我们在2秒之内计算出一个很复杂的式子的值传进去 刷新式子一直在变化&#xff0c;不过出来一个提示让我们以post方式传入计算的值&#xff0c;变量名字为value&#xff0c;如果你真的拿计算机去计算传值&#xff0c;嘿嘿嘿! …

秋名山老司机

题目链接&#xff1a;http://120.24.86.145:8002/qiumingshan/ 貌似是新题&#xff0c;网上没找到wp&#xff0c;自己写一份(第一次写writeup) 首先进入会显示如下页面&#xff1a; emmmm&#xff0c;再次刷新会变成这样&#xff1a; 隔一段时间再刷新会变成新的表达式。 先…

Bugku - 秋名山老司机

emm鬼算得出来。。。 import re import requestss requests.Session() r s.get("http://120.24.86.145:8002/qiumingshan/") searchObj re.search(r^<div>(.*)\?;</div>$, r.text, re.M | re.S) d {"value": eval(searchObj.group(1)) } …

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

本篇博客&#xff0c;博主为大家分享的内容是如何实现Spark on Hive,即让Hive只作为存储角色&#xff0c;Spark负责sql解析优化&#xff0c;执行…话不多说&#xff0c;直接上车&#xff01; 文章目录 上车前需知Spark on hive 与 hive on spark 的区别1. Spark on h…

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;不同人、时间…