SparkSQL 读写_Hive_写入数据_配置 | 学习笔记

简介: 快速学习 SparkSQL 读写_Hive_写入数据_配置

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段SparkSQL 读写_Hive_写入数据_配置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12062


SparkSQL 读写_Hive_写入数据_配置

 

内容介绍:

一、步骤

二、实操

 

前面的课程中已经了解了如何使用 SparkSQL 访问已经存在的 Hive 表对以及如何创建 Hive 表,接下来将会学习如何通过 SparkSQL 将一些数据插入到创建好的 Hive 表中,该过程分为整合和编写代码并提交程序两部分进行学习,本节课主要学习整合的过程。

 

一、步骤

这里的整合与之前学习的整合不太一样,这里的整合是让 SparkSQL 可以访问 Hive。

1、导入 Maven 依赖

上节课使用 SparkSQL 创建 Hive 表时写的相关程序是在 SparkShell 中运行的,而这种运行是建立在 spark 已经和 Hive 进行了整合,且已经把 Hive 的配置文件拷贝到 spark 当中,在集群中运行的基础上的,反之则不能执行。但是否采取这样的运行方式就无法以编写 spark 的独立程序的方式来提交任务呢?答案是否,我们也可以使用 SparkSubmit 的方式把已经打包好的程序放在集群当中执行。若如此,我们就需要在 IDEA 当中去编写程序并打包了。而若要编写程序,spark-hive 依赖必须要导入。

原始代码如下:

<dependency>

<groupId>org.apache.spark</groupId>

<artifactId>spark-hive 2.11</artifactId>

<version>${sparkversion}</version>

</dependency>

2、配置 SparkSession

如果在 SparkShell 当中编辑代码并执行,其实是 SparkShell 自动创建出了 SparkContext,是实际上,若要编写独立程序,SparkSession 是要自行创建的。因此,在创建 SparkSession 时,还有一小部分整合工作要做。

 

二、实操

1、将 Maven 依赖导入工程,并整理环境

(1)导入 Maven 依赖

进入 IDEA,打开 pom.xml,选取在文件的任一位置,其实导入大部分 spark 的包都可以样做。比如此时要导入 Hive 的整合包,因为有一部分 Hive 的内容,并没有包含在 sparksql 和 sparkcore 包下,因此先复制 core 依赖的声明,然后将其中的“core”改为“hive”即可。此时 Maven 依赖就已经成功导入。

2、配置 SparkSession

(1)创建文件

创建一个新的 Scala Class,其类型为 object,因此无法用 Line 编写了,因为我们最终要将其打包放在集群中,让集群去执行某个类,故而应写 main 方法。

package cn.itcast.spark.sql

Object HiveAccess{

//创建类并将其命名为 Hive.Access

 def main(args:Array[string]):unit = {

//创建 main 方法

以上即完成了整合的第一步导入 Maven 依赖并整理环境。

(2)开启 HiveContext 支持

在 SparkSession 创建的时候还应开启几个内容。在最古老 Spark1.x 时,分为了几个 SparkContext,比如说,SparkContext 是用于去执行 RDD 程序的,但要想 Sql 语句,就要编写 SqlContext。而最初的支持是通过 Spark 自己的 SQL 解析器来支持的,但该 SQL 解析器是直接使用了 scala 的 passer,比较简陋,有许多问题。接下来,又创建了新的 Context 用于支持 Hive 的 SQL,也就是存在两个 Context。

当下的 Spark2.0 中这三者已经整合到 SparkSession 中了,在默认创建 SparkSession 时开启的是 SqlContext,而现在要写 Hive 代码,则要开启 HiveContext。

(3)设置 WareHouse 的位置

(4)设置 MetaStore 的位置

(2)(3)(4)具体操作如下:

val spark=SparkSession

//创建 SparkSession

.builder()

.appName("hive example")

.config("spark.sql.warehouse.dir" "hdfs://node01:8020/

dataset/hive")

config("hive.metastore.uris" "thrift://node01:9083") 

//导入两个参数分别配置一下 warehouse.dir 和 metastore.urls,而这两个参数在 Hiveset.xml 中都有配置,但是此处还要单独配置(第二个参数 hive metastore.urls 可以不进行配置,因为已经进行过 SparkSQL 和 Hive 的整合,直接去配置文件即可读取到参数,但第一个参数必须要配置),因为该参数的开头的 spark,已经不再读取 Hiveset.xml 中的 warehouse.dir 了,因此,在指定数据仓库位置时,就需要在 SparkSession 中进行手动配置了。

.enableHiveSupport()

.getOrCreate()

接下来回到 Object HiveAccess 进行配置 SparkSession:

package cn.itcast.spark.sql

Object HiveAccess{

//创建类并将其命名为 Hive.Access

def main(args:Array[string]):unit = {

//创建 main 方法

//创建 SparkSession

//开启 Hive 支持

//指定 MetaStore 的位置

//指定 WareHouse 的位置

val spark=SparkSession.builder()

//导入 SparkSession.builder 的包,通过这个包进行构建

.appName("hiveaccess1")

//不需要指定 master,因为该程序最终要提交到集群当中使用 SparkSubmit 来运行的,而其 master 地址是确定已知的,不能单独指定,否则就会报错。

.enableHiveSupport()

//开启 Hive 支持

.config("hive.metastore.uris" ,"thrift://node01:9083")

//指定 MetaStore 的位置,路径为 node01:9083 端口,其使用的协议是 thrift,与其他的不太相同,它是一个 Rpc 框架

.config("spark.sql.warehouse.dir", "/dataset/hive")

//指定 WareHouse 的位置,指定为上一个文件的位置,该文件要确保在 hdfs 目录下,稍后会进行上传,这里指定为/dataset/hive 文件夹作为 WareHouse 的地址

.getOrCreate()

//进行相应的获取

}

}

总之整合应分为两大步骤,即导入 Maven Jar 包和创建 SparkSession 并指定参数。

相关文章
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
97 3
|
2月前
|
SQL 存储 分布式计算
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
59 3
|
2月前
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
66 2
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
67 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
110 0
|
4月前
|
SQL 关系型数据库 HIVE
实时计算 Flink版产品使用问题之如何将PostgreSQL数据实时入库Hive并实现断点续传
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL 分布式计算 数据处理
实时计算 Flink版产品使用问题之怎么将数据从Hive表中读取并写入到另一个Hive表中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。