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

文章目录

  • 零、本讲学习目标
  • 一、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 在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript实现打印倒金字塔的代码

以下为实现打印倒金字塔的程序代码和运行截图 目录 前言 一、实现打印倒金字塔 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题目要求实现相关使用功…

Word如何设置页码?3个简单方法快速设置!

案例&#xff1a;Word如何设置页码 【在使用word文档时&#xff0c;由于页数太多了&#xff0c;想给文档设置页码&#xff0c;但是不知道该如何设置&#xff1f;请大家帮帮我&#xff01;】 对于经常使用word进行办公的朋友来说&#xff0c;设置页码应该是个比较常见的需求了…

【服务器】无公网IP,异地远程连接威联通NAS

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 1. 威联通安装cpolar内网穿透 2. 内网穿透 2.1 创建隧道 2.2 测试公网远程访问 3. 配置固定二级子域名 3.1 保留二级子域名 3.2 配置二级子域名 4. 使用固定二级子…

目标检测,将voc格式转化为coco格式详细过程

在目标检测方法研究中&#xff0c;数据集的格式至关重要&#xff0c;为了减小模型的训练时长&#xff0c;需要现在小数据集进行模型研究&#xff0c;从而需要将VOC数据集转化为coco格式。下面一步一步来看&#xff1a; 1. 下载VOC数据集 Pascal VOC&#xff0c;即Pattern Ana…

chatgpt赋能Python-python3_8_5怎么保存

Python 3.8.5&#xff1a;什么是它&#xff0c;为什么它重要&#xff0c;以及如何安装和保存&#xff1f; Python是当今世界上最受欢迎的编程语言之一。Python 3.8.5是该语言的最新版本&#xff0c;它引入了一些重要的改进和新特性。这篇文章将介绍Python 3.8.5并向您展示如何…

基于欧式距离的聚类算法的Kmeans作业

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 基于欧式距离的聚类算法&#xff0c;其认为两个目标的距离越近&#xff0c;相似度越大。 该实验产生的点为二维空间中的点。 环境配置 java环境&#xff0c;使用原生的Java UI组件JPanel和JFrame 算法原理 基于欧式距离的聚…

macOS Monterey 12.6.6 (21G646) 正式版发布,ISO、IPSW、PKG 下载

macOS Monterey 12.6.6 (21G646) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持…

【Jmeter第二章】将Jmeter界面切换为中文显示

1、Jmeter临时切换为中文显示 注意&#xff1a;上面的配置只能保证本次运行是中文&#xff0c;如果要永久中文&#xff0c;需要修改Jmeter的配置文件 2、通过修改Jmeter配置文件设置为中文显示 1、在 Jmeter/bin目录下&#xff0c;找到&#xff1a;jmeter.properties 文件 2…

【达梦数据库】达梦数据库windows安装

目录 1.选择语言与时区 2.安装向导 3.许可证协议 4.验证 Key 文件 5.选择安装组件 6.选择安装目录 7.目录确认 8.开始安装 9.安装过程 10.安装完成 11.创建数据库实例 12.创建数据库模板 13.数据库目录 14.数据库标识 15.数据库文件 16.初始化参数 17.口令管理…

【算法学习系列】01 - 求某个数组中的任意两个位置之间的累加和

文章目录 背景解决思路代码实现 背景 已经呆在自己的舒适圈有很长一段时间了&#xff08;公司快3年了&#xff0c;业务都熟的差不多了&#xff09;&#xff0c;决定开始改变&#xff08;任何时候都不晚&#xff09;&#xff0c;尝试学习解决一些算法题&#xff0c;给自己一些适…

使用Rust构建一个kvm用户空间实例

最近在学习虚拟化相关的内容&#xff0c;想着使用Rust构建一个最小的kvm用户空间实例。也就是直接调用kvm的api&#xff0c;然后创建虚拟机。网络上关于kvm的内容大部分是使用libvirt的&#xff0c;然后kvm用户空间实例也是使用C编写的。因此想着使用Rust写一个简单的。 思路 …

Android PickerView简单应用

1. Android-PickerView Android-PickerView这是一款仿iOS的PickerView控件&#xff0c;有时间选择器和选项选择器。 添加依赖项 implementation com.contrarywind:Android-PickerView:4.1.92. 时间选择器 Android-PickerView时间选择器使用Build模式来创建 var timePicker…

鲲鹏昇腾开发者峰会开幕 星辰天合发布新一代天合翔宇一体机

近日&#xff0c;主题为“创未来 享非凡”的鲲鹏昇腾开发者峰会 2023 在东莞松山湖开幕&#xff0c;此次大会旨在帮助开发者深入了解鲲鹏、昇腾全栈技术&#xff0c;加速行业数智化的技术、产品和解决方案创新。 作为鲲鹏生态重要合作伙伴&#xff0c;XSKY星辰天合获邀参加此次…

1053 Path of Equal Weight(超级无敌详细注释+45行代码)

分数 30 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 Given a non-empty tree with root R, and with weight Wi​ assigned to each tree node Ti​. The weight of a path from R to L is defined to be the sum of the weights of all the nodes along the pa…

亲水性Sulfo-Cyanine3 NHS ester水溶性CY3标记活性脂

Sulfo-Cy3是一种荧光染料&#xff0c;可用于生物成像和细胞标记等应用。Sulfo-Cy3是一种含有硫酸基的Cy3染料&#xff0c;具有高度的水溶性和稳定性。Sulfo-Cy3可以与NHS&#xff08;N-羟基琥珀酰亚胺&#xff09;结合&#xff0c;形成Sulfo-Cy3 NHS&#xff0c;这种结合物可以…

前端开发之函数式编程实践 | 京东云技术团队

作者&#xff1a;京东科技 牛志伟 函数式编程简介 常见应用场景 1、ES6中的map、filter、reduce等函数 [1,2,3,4,5].map(x > x * 2).filter(x > x > 5).reduce((p,n) > p n);2、React类组件 -> 函数式组件hooks、Vue3中的组合式API 3、RxJS、Lodash和Ramd…

华为基于dhcp snooping表的各种攻击防御

所有的前提是必须开启了dhcp snooping功能 一、dhcp 饿死攻击&#xff1a; 接口下或vlan下开启 dhcp snooping check dhcp-chaddr enable 开启二层源mac和chaddr一致性检测 dhcp snooping max-user-number 1 接口上手动配置的绑定成员数量&#xff08;可选择项&#xff09; …

亚马逊云科技作为中国出海力量之一,为中国企业提供技术桥梁

这是一个真实的故事&#xff1a;一家出海企业的项目交付需要在非洲吉布提部署上云&#xff0c;企业负责人在地图上找了半天才找到吉布提&#xff0c;而亚马逊云科技仅用了3天的时间就为企业在当地的业务开展&#xff0c;交付了IT基础设施。对于出海企业来说&#xff0c;这种效率…

文本三剑客awk

awk 工作原理&#xff1a; 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理&#xff0c;而awk比较倾向于将一行分成多个“字段”然后再进…

如何高效搭建影视及游戏工业化管线?

影视和游戏工业化是指制作流程上呈现出标准化、自动化、平台化、数智化的特征。工业化趋势会让制作影视和游戏门槛变高&#xff0c;让其进入精品对决时代。 不进行迭代&#xff0c;就面临被淘汰的危险。 随着受众对于影视和游戏质量的要求越发“苛刻”&#xff0c;精品化是整…