Spark SQL数据源:Hive表

news/2024/11/17 21:23:31/

文章目录

  • 一、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.ppmy.cn/news/383946.html

相关文章

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

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

显卡之黄金宝典(转东转西)

第一章 . 显卡工作原理 一 . 既然是说显卡的工作原理&#xff0c;那就先要讲讲显卡的定义 显卡&#xff08; Video card &#xff0c; Graphics card &#xff09;&#xff0c;也可以说是显示卡&#xff0c;图形适配器等等&#xff0c;是 PC 的一个重要部分&#xff0c;我的理解…

软件测试金融银行项目如何测?从业务到测试实战,超细总结整理...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 金融行业的业务特…

不能用主机名访问跨网段的网站服务.

这两天发现在公司外当我使用SSL 接入到公司内网后, 不能直接使用主机名访问在公司总部的跨网段的劳动力管理系统的测试环境了.一开始没当回事,每次修改DNS为公司内网的DNS就可以了.可是时间长了,即使我是IT人员,我也觉着不方便了,于是就想知道为什么,开始用心的分析原因了.我们…

PC使用--记录电脑硬件使用问题

两次遇到windows卡在启动界面 以前, 买了块声卡, 装电脑上后, 系统运行一段时间后&#xff0c;如果重启, 会卡在启动界面, 就是win7那四个小方块那里。 关电源后&#xff0c;拿电扇对着主机吹上5分钟, 才能正常开机。 开始我不知道是声卡问题, 一直以为是显卡导致的, 因为GT…

阿里卜居:从Caffe开始深度学习实战,徒手hack代码乐趣更多

阿里云工程师卜居接受CSDN记者专访&#xff0c;介绍了他在深度学习领域的实践经验和成长心得&#xff0c;以及完成Caffe著作背后的原因和故事。 从Geoffrey Hinton 2006年的论文算起&#xff0c;这一波深度学习&#xff08;DL&#xff09;浪潮才10年&#xff0c;而如果只算国内…

从Caffe开始深度学习实战,徒手hack代码乐趣更多

从Geoffrey Hinton 2006年的论文算起&#xff0c;这一波深度学习&#xff08;DL&#xff09;浪潮才10年&#xff0c;而如果只算国内&#xff0c;深度学习的流行也不过5年&#xff0c;尽管如此&#xff0c;深度学习现在已经扎根中国互联网&#xff0c;成为BAT、京东、360、今日头…

电脑DIY——菜鸟变大侠完美路程

硬件配置及配件行情查询 1 一定有适合你的&#xff0c;300W至400W主流电源推介&#xff01; 2 心有千千色&#xff0c;色色诱我心------精品LCD[1-2楼[12月29日]] 7 只选对的,不选贵的,热门显卡和机箱导购(2006/12/29) 8 缵机都要看的贴.配置大全061228 9 10 棒棒的2个配置…