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 并指定参数。

相关文章
|
1天前
|
SQL 数据库 HIVE
记录hive数据库远程访问配置问题
记录hive数据库远程访问配置问题
117 0
|
1天前
|
SQL 分布式计算 Hadoop
创建hive表并关联数据
创建hive表并关联数据
38 0
|
1天前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
119 0
|
1天前
|
SQL 存储 分布式计算
Hive详解、配置、数据结构、Hive CLI
Hive详解、配置、数据结构、Hive CLI
29 0
Hive详解、配置、数据结构、Hive CLI
|
1天前
|
SQL 数据采集 存储
Hive实战 —— 电商数据分析(全流程详解 真实数据)
关于基于小型数据的Hive数仓构建实战,目的是通过分析某零售企业的门店数据来进行业务洞察。内容涵盖了数据清洗、数据分析和Hive表的创建。项目需求包括客户画像、消费统计、资源利用率、特征人群定位和数据可视化。数据源包括Customer、Transaction、Store和Review四张表,涉及多个维度的聚合和分析,如按性别、国家统计客户、按时间段计算总收入等。项目执行需先下载数据和配置Zeppelin环境,然后通过Hive进行数据清洗、建表和分析。在建表过程中,涉及ODS、DWD、DWT、DWS和DM五层,每层都有其特定的任务和粒度。最后,通过Hive SQL进行各种业务指标的计算和分析。
37 1
Hive实战 —— 电商数据分析(全流程详解 真实数据)
|
1天前
|
SQL HIVE
Hive【基础知识 04】【Hive 属性配置的三种方式及配置的优先级说明】
【4月更文挑战第7天】Hive【基础知识 04】【Hive 属性配置的三种方式及配置的优先级说明】
13 0
|
1天前
|
SQL JSON 算法
hive学习笔记
hive学习笔记
|
1天前
|
SQL 消息中间件 Kafka
Flink部署问题之hive表没有数据如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
1天前
|
SQL 消息中间件 存储
案例:Flume消费Kafka数据保存Hive
案例:Flume消费Kafka数据保存Hive
78 0
|
1天前
|
存储 SQL 分布式计算
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
287 0

热门文章

最新文章