Spark大数据处理讲课笔记4.5 Spark SQL数据源 - Hive表

news2025/1/20 16:56:57

文章目录

  • 零、本讲学习目标
  • 一、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表

零、本讲学习目标

  1. 掌握如何读取Hive表中的数据
  2. 掌握如何将数据写入到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
    在这里插入图片描述

四、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")
    在这里插入图片描述
  • 这个报错是hdfs客户端的一个bug,但并不影响作业正常运行,且在2.8版本之后已经修复

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文件/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/input/student.txt' INTO TABLE student1")
    在这里插入图片描述
  • 查看表student1的内容,执行命令:spark.table("student1").show()
    在这里插入图片描述

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

  • 查看三张表:student,student1test 在这里插入图片描述

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

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

相关文章

Spark大数据处理讲课笔记4.8 Spark SQL典型案例

文章目录 零、本讲学习目标一、使用Spark SQL实现词频统计&#xff08;一&#xff09;数据源 - words.txt&#xff08;二&#xff09;创建Maven项目&#xff08;三&#xff09;添加依赖和构建插件&#xff08;四&#xff09;修改源目录名称&#xff08;五&#xff09;创建日志属…

Linux——线程2|线程控制

什么是线程 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”。 一切进程至少都有一个执行线程 线程在进程内部运行&#xff0c;本质是在进程地址空间内运行 在Linux系统中&#xff0c;在CPU…

基于Java+SpringBoot+vue+node.js的智能农场管理系统详细设计和实现

基于JavaSpringBootvuenode.js的智能农场管理系统详细设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

报表设计器Stimulsoft 2023.2提供深色主题和 Monoline 图标包

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…

【Vue】学习笔记-消息的订阅与发布

消息的订阅与发布(基本不用) 消息订阅与发布(pubsub)消息订阅与发布是一种组件间的通信的方式&#xff0c;适用于任意组件间通信 消息订阅与发布 1.订阅消息∶消息名 2.发布消息︰消息内容 消息订阅与发布的工作流程&#xff1a; &#xff08;A是订阅者&#xff0c;B是发布…

软件安全开发意识

国务院印发的《“十四五”数字经济发展规划》中指出数字经济是继农业经济、工业经济之后的主要经济形态&#xff0c;是以数据资源为关键要素&#xff0c;以现代信息网络为主要载体&#xff0c;以信息通信技术融合应用、全要素数字化转型为重要推动力&#xff0c;促进公平与效率…

MYSQL高可用配置(MHA)

1、什么是MHA MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

fastapi高性能异步框架,极速上手

fastapi项目开发快速上手 简介 FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Python 3.6 并基于标准的 Python 类型提示。 特性: 快速&#xff1a;可与 NodeJS 和 Go 比肩的极高性能&#xff08;归功于 Starlette 和…

全流程各工程类型地下水环境影响评价【一级】方法与MODFLOW Flex建模

目录 专题一 地下水基础知识学习 专题二 地下水环境影响评价过程讲解 专题三 地下水数值软件的学习及操作 专题四 相关专业软件&#xff08;Surfer、Aquifer test&#xff09;的学习 专题五 化工类建设项目地下水环评关键技术处理及上机操作 专题六 化工类建设项目地下水…

顶象助力如祺出行打造高品质服务

近日&#xff0c;广东省自然资源厅审批通过了如祺出行提交的测绘资质申请&#xff0c;如祺出行获得地理信息系统工程和互联网地图服务两个专业的乙级测绘资质。此次获批意味着&#xff0c;如祺出行能够在许可区域内依法合规开展数据标注和场景仿真等相关业务&#xff0c;构建全…

Oracle11g全新讲解之触发器和视图索引

触发器 1.触发器的基本讲解 当特定事件出现时自动执行的存储过程 语法结构 CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS]…

探索Jetpack Compose的Material You主题

探索Jetpack Compose的Material You主题 在本文中&#xff0c;我们将了解可用于 Jetpack Compose 的新 Material You 库&#xff0c;并了解我们如何将其动态颜色应用到 Stream Chat Compose SDK&#xff0c;以获得有趣、多彩和个性化的消息传递体验。 在本文中&#xff0c;您…

Spark大数据处理讲课笔记4.7 Spark SQL内置函数

文章目录 零、本讲学习目标一、Spark SQL内置函数&#xff08;一&#xff09;内置函数概述1、10类内置函数2、两种使用方式 &#xff08;二&#xff09;内置函数演示1、通过编程方式使用内置函数upper()2、通过SQL语句的方式使用内置函数upper()3、演示其它内置函数的使用 二、…

MySQL的安装和卸载-Linux版

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以,Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 https://download.csdn.net/download/weixin_44373940/87784825 3. 创建目录,并解压到对应目录中 mkdir mysql 解压到mysql目录中 tar -xvf…

【Arduino疑难杂症】:报错:上传失败:上传错误:exit status Oxffffffff

项目场景&#xff1a; 制作arduino宠物监控系统项目的过程中&#xff0c;摄像头方面使用到了ESP32Cam&#xff0c;制作过程中遇到了如下问题。 问题描述 [ERRORJ: (annot configure port&#xff0c; something wert wrong. 0riginal message: WindowsError(31,"xclxacxb…

Spring笔记-教程-快速回忆

title: Spring笔记 date: 2023-05-12 00:12:55 categories: 后端Java tags:JavaSpring Spring官网https://spring.io 框架图&#xff1a; 为什么要使用Spring 原先代码中存在的问题如下&#xff1a; 业务层&#xff1a; public class BookServiceImpl implements BookServi…

了解Swarm 集群管理

Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API&#xff0c;所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限…

SpringCache缓存常见问题

SpringCache 解决缓存常见问题 1 缓存穿透2 缓存雪崩3 缓存击穿 1 缓存穿透 缓存穿透是指缓存和数据库中都没有数据&#xff0c;而用户不断发起请求则这些请求会穿过缓存直接访问数据库&#xff0c;如发起为id为“-1”的数据或id为特别大不存在的数据。假如有恶意攻击&#xf…

TCP 和 UDP 协议详解

文章目录 1 概述2 TCP 协议2.1 报文格式2.2 三次握手&#xff0c;建立连接2.3 四次挥手&#xff0c;断开连接2.4 窗口机制 3 UDP 协议3.1 传输头格式 4 扩展4.1 常用端口号4.2 TCP 与 UDP 区别 1 概述 #mermaid-svg-aC8G8xwQRSdze7eM {font-family:"trebuchet ms",ve…

Mysql MHA高可用集群及故障切换

文章目录 一、MHA概述1.MHA的特点2. MHA的工作原理3.故障切换时MHA会做什么 二、实验搭建MySQLMHA1.配置主从分离2.安装MHA软件 总结 一、MHA概述 MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的mysql高可用环境下故障切换和主从复制的软件。 MHA解决了mysq…