Spark SQL数据源:Hive表

news2025/2/10 8:10:41

文章目录

  • 一、Spark SQL支持读写Hive
  • 二、Spark配置hive-site.xml
  • 三、准备工作
    • (一)启动Hive的metastore
    • (二)启动Spark Shell
  • 四、Spark读写Hive数据
    • (一)导入SparkSession
    • (二)创建SparkSession对象
    • (三)执行HiveQL语句
      • 1、创建Hive表
      • 2、导入本地数据到Hive表
      • 3、查询Hive表数据
      • 4、创建表时指定存储格式
      • 5、将数据帧数据写入Hive表
      • 6、导入HDFS数据到Hive表
    • (四)在Hive客户端查看生成的hive表


一、Spark SQL支持读写Hive

Spark SQL还支持读取和写入存储在Apache Hive中的数据。然而,由于Hive有大量依赖项,这些依赖项不包括在默认的Spark发行版中,如果在classpath上配置了这些Hive依赖项,Spark就会自动加载它们。需要注意的是,这些Hive依赖项必须出现在所有Worker节点上,因为它们需要访问Hive序列化和反序列化库(SerDes),以便访问存储在Hive中的数据。

在使用Hive时,必须实例化一个支持Hive的SparkSession对象。若系统中没有部署Hive,则仍然可以启用Hive支持(Spark SQL充当Hive查询引擎)。Spark对Hive的支持包括连接到持久化的Hive元数据库、Hive SerDe、Hive用户定义函数、HiveQL等。如果没有配置hive-site.xml文件,Spark应用程序启动时,就会自动在当前目录中创建Derby元数据库metastore_db,并创建一个由spark.sql.warehouse.dir指定的数据仓库目录(若不指定,则默认启动Spark应用程序当前目录中的spark-warehouse目录)。需要注意的是,从Spark2.0.0版本开始,hive-site.xml中的hive.metastore.warehouse.dir属性不再使用了,代替的是使用spark.sql.warehouse.dir指定默认的数据仓库目录。

二、Spark配置hive-site.xml

将Hive配置文件hive-site.xml拷贝到Spark配置目录,执行命令:cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf
在这里插入图片描述

进入Spark配置目录,编辑Hive配置文件hive-site.xml
在这里插入图片描述

在这里插入图片描述

<property>
    <name>spark.sql.warehouse.dir</name>     
    <value>/user/spark/warehouse</value>
</property>

三、准备工作

先要启动HDFS和Spark
在这里插入图片描述

(一)启动Hive的metastore

执行命令:hive --service metastore &
在这里插入图片描述
注意:博主这里执行命令时,出现了大量的警告,这里就不解决了,不影响后续操作,警告如下:
在这里插入图片描述

(二)启动Spark Shell

执行命令:spark-shell --master spark://master:7077
在这里插入图片描述
这里的警告信息表明,连接 MySQL 数据库时未做身份验证,不建议这样做。

要解决这个问题,有以下两种方法:

  1. 显式地禁用 SSL:在连接 MySQL 数据库的时候添加 useSSL=false 参数。这种方式不安全,不建议使用,但是可以在测试环境下暂时解决问题。

  2. 启用 SSL 并提供正确的信任库:在连接 MySQL 数据库的时候设置 useSSL=true,并提供正确的信任库用于服务器证书验证。这种方式更加安全。你可以参考 MySQL 官方文档来设置信任库。在默认情况下,Java 会使用位于 $JAVA_HOME/jre/lib/security 目录下的 cacerts 文件作为信任库。你可以通过使用 keytool -list 命令来查看其中的证书。

四、Spark读写Hive数据

(一)导入SparkSession

执行命令:import org.apache.spark.sql.SparkSession
在这里插入图片描述

(二)创建SparkSession对象

val spark = SparkSession.builder()
   .appName("Spark Hive Demo")
   .enableHiveSupport()   // 开启Hive支持  
   .getOrCreate()

执行上述命令
在这里插入图片描述

(三)执行HiveQL语句

调用SparkSession对象的sql()方法可以传入需要执行的HiveQL语句。

1、创建Hive表

创建一张Hive表student,并指定字段分隔符为半角逗号“,”,执行命令:spark.sql(“CREATE TABLE IF NOT EXISTS student(id INT, name STRING, gender STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’”)
在这里插入图片描述

2、导入本地数据到Hive表

查看本地文件/home/student.txt的内容
在这里插入图片描述
将该文件数据导入表student中,执行命令:spark.sql("LOAD DATA LOCAL INPATH '/home/student.txt' INTO TABLE student")
在这里插入图片描述

3、查询Hive表数据

查询表student的数据并显示到控制台,执行命令:spark.sql(“SELECT * FROM student”).show()
在这里插入图片描述
按性别分组统计平均年龄,执行命令:spark.sql(“SELECT gender, AVG(age) FROM student GROUP BY gender”).show()
在这里插入图片描述

4、创建表时指定存储格式

创建一个Hive表test,数据存储格式为Parquet(默认为普通文本格式),执行命令:spark.sql(“CREATE TABLE test (name STRING, age INT) STORED AS PARQUET”)
在这里插入图片描述

5、将数据帧数据写入Hive表

使用saveAsTable()方法可以将数据帧数据写入指定的Hive表中。

加载student表数据得到数据帧
在这里插入图片描述导入SaveMode类,执行命令:import org.apache.spark.sql.SaveMode
在这里插入图片描述
将数据帧数据写入hive表,执行命令:studentDf.select(“name”, “age”).write.mode(SaveMode.Overwrite).saveAsTable(“test”)
在这里插入图片描述
查询test表数据,执行命令:spark.sql(“select * from test”).show()
在这里插入图片描述

6、导入HDFS数据到Hive表

查看HDFS文件/student/input/student.txt的内容
在这里插入图片描述
创建Hive表student1,执行命令:spark.sql(“CREATE TABLE IF NOT EXISTS student1 (id INT, name STRING, gender STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’”)
在这里插入图片描述
将该文件数据导入表student1中,执行命令:spark.sql(“LOAD DATA INPATH ‘hdfs://master:9000/student/input/student.txt’ INTO TABLE student1”)
在这里插入图片描述
查看表student1的内容,执行命令:spark.table(“student1”).show()
在这里插入图片描述

(四)在Hive客户端查看生成的hive表

查看三张表:student,student1和test

输入hive进入hive命令行
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里技术官肝了 3 个月才完成的 20 万字 Java 面试手册

金三银四已经过去&#xff0c;不知道你是已经上岸&#xff0c;还是在等秋招。为了让大家能在面试中如鱼得水&#xff0c;offe 能够手到擒来。小编在此分享一份阿里技术官肝了 3 个月才完成的 20 万字 Java 面试手册。 这份面试手册涉及的技术栈非常全面而且足够细致&#xff0…

在字节跳动和阿里划水4年,过于真实了...

先简单交代一下吧&#xff0c;涛哥是某不知名211的本硕&#xff0c;18年毕业加入阿里&#xff0c;之后跳槽到了头条&#xff0c;一直从事测试开发相关的工作。之前没有实习经历&#xff0c;算是四年半的工作经验吧。 这四年半之间他完成了一次晋升&#xff0c;换了一家公司&am…

MySQL数据库用户管理

MySQL数据库用户管理 一、MySQL常用的6大约束二、数据表的高级操作1.克隆表2.清空表&#xff0c;删除表内的所有数据3&#xff0e;创建临时表4&#xff0e;创建外键约束&#xff0c;保证数据的完整性和一致性 三、数据用户管理1.新建用户2&#xff0e;查看用户信息3&#xff0e…

MongoDB 索引操作引起的 Crash

摘要&#xff1a;本文详细阐述了根据引起 Crash 操作进行从配置到源码的分析过程&#xff0c;层层递进&#xff0c;定位复现并给出解决故障方案。 作者&#xff1a;徐耀荣 爱可生南区交付服务部 DBA 团队成员&#xff0c;主要负责 MySQL 故障处理以及相关技术支持。爱好电影&am…

c++学习之多态

目录 1&#xff0c;什么是多态&#xff1f; 2&#xff0c;什么是虚函数&#xff1f; 1.如何实现父类对各个派生子类的操作&#xff1f; 2&#xff0c;父类指针保存子类空间产生的问题。 3&#xff0c;虚函数的定义 4&#xff0c;虚函数的动态绑定机制 5&#xff0c;重载&…

创新方案|时尚品牌企业应用生成式AI的6大机会领域

探讨生成式人工智能&#xff08;Generative AI&#xff09;在时尚产业中的应用&#xff0c;以及它对设计、生产和销售过程的影响。通过使用生成式AI技术&#xff0c;时尚品牌可以更快地设计和生产出更加个性化和符合潮流趋势的产品&#xff0c;同时减少浪费和成本。文章还介绍了…

掌握Python文件操作:从基础到高阶的全方位探索

在本篇博客中&#xff0c;我们将全面、深入地探讨Python中的文件操作。文件操作在Python编程中是不可或缺的一部分&#xff0c;它包含了打开、读取、写入和关闭文件等各种操作。我们将从基础的文件操作讲解到高级的文件处理技巧&#xff0c;以及如何优雅地使用Python进行文件操…

前端vue入门(纯代码)07

【07.TodoList案例】 1 拆分组件 一共拆分为4个组件&#xff1a;【因为header和HTML内置的标签<header>重名&#xff0c;故在之前都加了Todo】 TodoHeaderTodoItem【item是list的子组件】TodoListTodoFooter 2 组件化编码流程 实现静态组件&#xff1a;抽取组件&…

金融行业项目信息化建设方案:人效提升300%

一、行业背景 在大数据、云计算、人工智能等技术的推动下数字化转型正快速改变着金融行业&#xff0c;特别在当下金融与科技深度交互融合的新阶段&#xff0c;“金融科技”正成为金融市场新的趋势。但是在众多传统的金融业务领域&#xff0c;特别是在“投融贷”相关的业务中&a…

深度学习5 -- 循环神经网络(代码实现篇+付详细流程文件)

引言 本文是使用pytorch对循环神经网络RNN(Recurrent Neural Network)的代码实现&#xff0c;作为之前介绍RNN原理的一个代码补充。 RNN原理介绍 本文代码相关介绍相对较为详细&#xff0c;也为自己的一个学习过程&#xff0c;对RNN的理解还是比较浅显&#xff0c;有错误的地…

迪赛智慧数——饼图(环形饼图):哪个年龄段的人最爱存钱?

效果图 50岁到60岁是存钱黄金10年,你存下钱了吗? 据央行发布的2022年金融统计数据报告显示&#xff0c;全年人民币存款额增加26.26万亿元&#xff0c;其中住户存款增加17.84万亿&#xff0c;刷新历史记录。 2022年在全国2200名40岁以下的人中&#xff0c;90后这一职场主力军…

电压放大器在无损检测中的作用和应用有哪些

电压放大器在无损检测中扮演着重要的角色&#xff0c;可以帮助实现信号的放大和增强&#xff0c;从而提高检测的灵敏度和准确性。下面&#xff0c;我们将详细探讨电压放大器在无损检测中的作用和应用。 图&#xff1a;ATA-2000系列高压放大器 电压放大器是一种用于放大电压信号…

Flink SQL之Interval Joins

1.Interval Joins&#xff08;区间Join&#xff09; 区间是双流join的优化&#xff0c;基于处理时间或事件时间&#xff0c;在一定时间区间内数据&#xff0c;相同的key进行join&#xff08;支持 Batch\Streaming&#xff09;。Interval Join 可以让一条流去 Join 另一条流中前…

BFT 最前线|北京智源发布悟道3.0大模型;马克龙会见Meta谷歌人工智能专家;马斯克:特斯拉市值未来将超过苹果与沙特阿美总和

文 | BFT机器人 AI视界 TECHNOLOGY NEWS 01 天垓100完成百亿级参数大模型训练 在第五届智源大会AI系统分论坛上&#xff0c;上海天数智芯半导体有限公司对外宣布&#xff0c;在天垓100加速卡的算力集群&#xff0c;基于北京智源人工智能研究院70亿参数的Aquila语言基础模型&am…

flink + Atlas 任务数据血缘调通

据此修改 Flink 源码 版本Flink1.13.5Atlas1.2.0 将 atlas 配置文件打进 flink-bridge&#xff1b;atlas 相关的 jar 放进 flink/lib jar uf flink-bridge-1.2.0.jar atlas-application.properties flink-conf.yaml 注册监听 org.apache.flink.configuration.ExecutionOpti…

6月第2周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2023年6月5日-6月11日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站…

51、C++ 学习笔记

1、引用类型 引用类型是C引入的新类型&#xff0c;根据汇编的知识进行理解&#xff0c;程序在汇编后&#xff0c;变量名将失去意义&#xff0c;因为汇编码将替换成用内存的(链接地址or运行地址)访问变量。在C/C语言中&#xff0c;用变量名表示变量所占的那块内存&#xff0c;为…

仓储管理小程序开发 实现不同行业不同规模的仓管需求

在电子商务快速发展的时代&#xff0c;仓库管理对于一个企业的经营发展来说至关重要。如今互联网技术深入发展&#xff0c;很多企业都开发了信息化管理系统&#xff0c;仓库管理APP小程序就是企业结合自身的运算法则开发的一款线上应用软件&#xff0c;通过智能智慧仓库内人、物…

网络安全是一个好的专业吗?高考之后怎么选择?

目录 一.始于大学 二.一路成长 三. 如何学习网络安全 学前感言 零基础入门 尾言 本人信息安全专业毕业&#xff0c;在甲方互联网大厂安全部与安全乙方大厂都工作过&#xff0c;有一些经验可以供对安全行业感兴趣的人参考。 或许是因为韩商言让更多人知道了CTF&#xff0…

linuxOPS基础_LAMP开源项目实战

LAMP概述 LAMP&#xff1a;Linux Apache MySQL PHP LAMP 架构&#xff08;组合&#xff09; LNMP&#xff1a;Linux Nginx MySQL php-fpm LNMP 架构&#xff08;组合&#xff09; LNMPA&#xff1a;Linux Nginx(80) MySQL PHP Apache Nginx 代理方式 Apache&#…