SparkSQL 读写_Hive_整合 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习 SparkSQL 读写_Hive_整合

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

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


SparkSQL 读写_Hive_整合

 

内容介绍:

一、思路梳理

二、整合步骤

三、课堂总结

 

本节课主要学习如何使用 SparkSQL 访问 Hive。Hive 与前面所讲过的 JSON、Parquet 等一些文件格式有区别的,Hive 可以被称之为系统,因此使用 SparkSQL 访问 Hive 其实是通过一个系统访问另外一个系统。在该场景下,应该先进行整合。

本节课主要学习如何使用 SparkSQL 访问 Hive,从而为以后的学习打下基础。

 

一、思路梳理

应该怎样进行整合呢?

首先,如果要整合两个(或多个)部分的内容,应先了解一下两者可以在哪些方面进行整合,俗称“整合啥”;接下来要看 Hive 部分应如何做,最后看 Spark 部分该如何做。这就是关于整合的三个步骤。

 

二、整合步骤

1、“整合啥”

(1)SparkSQL 的内容

SparkSQL 中的内容我们上节课已经做过相关的了解,如 Dateset、DateFrame 等。

(2)Hive 的内容

Hive 由两大部分组成,Hive 本质上是通过一个表的概念映射了一个或多个 HDFS 上的文件,而在创建表的时候,源信息会放在 MetaStore 元数据存储当中,在通过表操作文件时,SQL 语句的内容会被翻译为 MR 程序,最终运行在 Yarn 当中。

(3)整合内容

可能有两部分要整合:第一部分,原数据存储,要使用 SparkSQL 访问 Hive 的表,就要先让 SparkSQL 能够获取表的源信息,如表的名称、在哪部分存储信息、存储的信息、schema 如何等信息,即 MetaStore 要进行整合;

第二部分,HiveSQL 语句与普通的 SQL 语句有一定区别,因此查询引擎也应进行整合。也就是说要让 SparkSQL 能够使用 HiveSQL 进行访问,因此,查询引擎 SparkSQL 已经内置了 HiveSQL 的支持,即不需要再进行整合。

因此,若要对 SparkSQL 和 Hive 进行整合的话,整合的应是 MetaStore 的元数据存储。如果想使用 SparkSQL 访问 Hive 的原数据存储,应先把 Hive 的 MetaStore 程序独立出来,将其变成独立的进程,所有人都能对 MetaStore 进行访问。

2、Hive 部分

(1)Hive 的运算情况

Hive 运算的大致的情况如下:

image.png

Hive 的服务器,叫做 HiveServer2,外部的访问者就可以连接该服务器进行 SQL 语句的查询,HiveServer 会把消息把请求转给 HiveDriver,HiveDriver 访问 MetaStore,查询表的位置、对应的文件、schema 如何、如何进行优化等,接下来 Driver 就会生成对应的物理执行计划,即 MR 程序运行在 Yarn 中。且 MetaStore 的元数据信息存储在 MySQL 中。

(2)独立 MetaStore

如何能让外部(SparkSQL)能够访问 MetaStore?默认情况下 MetaStore 隐藏在整个 Hive 进程里,因此要将其独立出来。

Hive 的 MetaStore 有三种运行模式,第一种,内嵌模式,即其在在进程当中会默认使用本地的数据库 Derby,而该本地数据库性能堪忧,并非特别优化的数据库,将数据库文件直接放在文件系统中,且其为单连接模式,不支持并发,因此该种模式在生产环境下使用非常少;

第二种,Local 模式,Local 和 Remote 都访问 MySQL 数据库,但是 MetaStore 没有独立进程,外部不容易访问,而要依附于 HiveServer2 的进程进行存活;

第三种,Remote 模式,MetaStore 访问 MySQL 数据库,且 MetaStore 是独立的进程,有自己独立的端口,外部可以直接通过独立的端口来进行访问较为方便。

因此,我们应选用 Remote 模式,即独立进程使用 MySQL 的模式。

(3)Hive 开启 MetaStore

配置 Hive 以开启 MetaStore。

①修改一下 hive-site.xml 配置文件

首先找到 Hive 的目录,即 cd/export/servers/hive 进入第一层级,再进入 cd conf,继而进入 vi hive.site.xml。

A.修改该配置文件中的一些内容。首先修改 warehouse.dir 本身的数据仓库存放的路径,即表对应的文件存放的路径。

输入/warehouse.dir 进行查找,

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/user/hive/warehouse</value>

</property>

可以发现最终文件存在/user/hive/warehouse 目录中,且该目录 HDFS 的目录,即在默认情况下,当创建了内部管理表,文件就会存在该位置。

B.修改一下连接的 URL

连接的 URL 叫做 ConnectionURL,其指的是 MySQL 的 URL,按 N 键进行查找.

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://node01:3306/hive?createDatabaseIfNotExist=true</value>

</property>

如何连接 MySQL 的 URL 是必须进行配置的,该 URL 指定自己 MySQL 的服务器的地址以及端口即可,此外还要指定对应的库。

C.修改一下 Drivername,

配置了要连接的 MySQL 之后,jdbc 在连接 MySQL 时应配置 MySQL 的 Driver,该驱动在 ConnectionDriverName 字段中进行配置

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.idbc.Driver</value>

</property>

该处应写 com.mysql.idbc.Driver,并且要把 MySQL 的 Jar 包拷贝到 Hive 的 lib 目录下。

D.配置 UserName

即配置访问 MySQL 数据库的名字

输入/ConnectionUserName,搜索结果是对应 Hive 的用户名。

<property>

<name>javax.jdo.optionConnectionUserName</name>

<value>username</value></property>

<property>

E.配置 ConnectionPassword

即配置访问 MySQL 的用户名的密码

<name>javax.jgo.option.ConnectionPassword</name><value>password</value>

F.配置 metastore.local

<property>

<name>hive.metastore.local</name>

<value>false</value>

</property>

这一项开始可能是没有配置的,如果要运行在一个服务中,最好对其进行配置。local 要指为 false,说明 metastore 并不是本地运行的,一般情况下该属性给客户端使用,当然不配置也可以。

G.配置 metastore.urls

即配置的是 metastore 占用哪个 ip 地址

<property>

<name>hive.metastore.urls</name>

<value>thrift://node81:9083</value>

</property>

可以发现占用的端口是 9083。

将以上配置配置完成后,保存并退出即可。以上即为配置的内容,但并不是直接把些内容拷贝到 hive-site.xml 中,而是要进行修改。

②启动 Hive

输入 cd 查询,然后先 jps,显示已有 RunJar,则输入 kill -9

20670 注释 RunJar,RunJar 即 Hive 的 MetaStore。

要开启 MetaStore,默认情况下 Hive 会直接在前台运行,但实际上应在后台运行,因此使用 nohup 命令,

即 nohup/export/servers/hive/bin/hive --servers metastore 2 >&1 >> /var/log &(直接指定 service metastore),“2 >&1 >> /var/log &”是指内容输出到 log 文件。这是 nohup 命令的格式,nohup 以及后面的内容可以直接拷贝,中间的内容才是真正启动 metastored 的命令。

运行命令。运行结束后 jps 查看,结果显示 RunJar 已经在运行 Hive 配置完成。

3、Spark 部

配置 SparkSQL。首先,Hive 当中有一个叫做 conf 的目录,输入 cd/conf 进入该目录查看,其中有一个 hive-site.xml 的文件。

如果想使用 SparkSQL 整合 Hive,而 Hive 已经配置完成,接下来要进行 SparkSQL 的配置。由于 SparkSQLspircical 可以直接读 Hive 的配置文件,则只需要把 Hive 的 hive-site.xml 复制到 SparkSQL 的 conf 录即可。

复制方式:

输入 cp hive-site.xml/export/servers/spark/conf,拷贝即可。

拷贝成功并不意味着整合完成,而是还要再去拷贝 HDFS 的配置文件到 spark 的目录下,因为 Hive 经常会把文件存在 HDFS 上,spark 要想访问 Hive 的表,就要有 HDFS 的配置。

输入 cd/export/servers/hadoop 进入该目录,继续输入 cd/etc,cd hadoop。

也就是说应拷贝两个配置文件,即拷贝 hdfs-site.xml 和 core-site.xml 到 spark 的目录。拷贝方式:输入 cp core-site.xml hdfs-site.xml/export/servers/spark/conf,spark 配置完成。

 

三、课堂总结

1、Hive 为什么要先去把 MetaStore 开启

因为 Hive 和 SparkSQL 整合其实本质上整合的是 MetaStore,Spark 无需使用 SQL 解析器,自身就可以解析,因此只要整合 MetaStore 即可。因此,Hive 要尽量的要把 MetaStore 独立运行起来。

2、修改一下 Hive 的配置文件

image.png

大概一共有 7 个参数需要配置,尤其是 MetaStoreURL 是必须配置的,应为其指定一个端口。

3、启动 Hive MetaStore

启动完毕后,进入到 SparkSQL,整合 Hive 的 MetaStore 环节了。以上是 Hive 方面的配置。

4、SparkSQL 方面的配置

image.png

即拷贝三个配置文件,hive-side.xml、core-side.xml 和 hdfs-site.xml。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
119 0
|
1天前
|
SQL JSON 算法
hive学习笔记
hive学习笔记
|
1天前
|
存储 SQL 分布式计算
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
288 0
|
1天前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.15 安装HIVE
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
114 1
Hadoop学习笔记(HDP)-Part.15 安装HIVE
|
7月前
|
SQL 存储 关系型数据库
为什么不能使用 datax 直接读写 hive acid 事务表?
为什么不能使用 datax 直接读写 hive acid 事务表?
|
SQL 存储 边缘计算
HBase&Hive 2(三)|学习笔记
快速学习 HBase&Hive 2(三)
108 0
HBase&Hive 2(三)|学习笔记
|
SQL 存储 分布式计算
HBase&Hive 2(二)|学习笔记
快速学习 HBase&Hive 2(二)
79 0
HBase&Hive 2(二)|学习笔记
|
SQL JSON 数据库
Json 内容转换为 Hive 所支持的文本格式1 | 学习笔记
快速学习 Json 内容转换为 Hive 所支持的文本格式1
167 0
Json 内容转换为 Hive 所支持的文本格式1  |  学习笔记
|
SQL 缓存 NoSQL
实时同步 Mysql 到 Hive-1 | 学习笔记
快速学习实时同步 Mysql 到 Hive-1
455 0
|
SQL 分布式计算 Java
SparkSQL 读写_Hive_写入数据_配置 | 学习笔记
快速学习 SparkSQL 读写_Hive_写入数据_配置
194 0

热门文章

最新文章