开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段: SparkSQL 读写_JDBC_MySQL 环境准备】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12064
SparkSQL 读写_JDBC_MySQL 环境准备
内容介绍:
一、JDBC
二、MySQL 环境的配置
在之前的课程中,我们已经学习过许多 SparkSQL 读取的格式,包括 Parquet、分区、JSON、Hive,今天学习最后一种格式 JDBC,主要学习如何使用 SparkSQL 读写 JDBC 中的 MySQL 环境准备。
一、JDBC
JDBC 是一个通用的协议,用于让 Java 可以访问多种关系型数据库的概念,所以在 JDBC 这一环节当中,我们以 MySQL 作为基准。MySQL 是我们现阶段最常见的关系型数据库。
二、MySQL 环境的配置
我们常会面临要去创建用户,创建表,甚至创建库等操作。环境配置环节的整个步骤包括:连接 MySQL、创建库、创建表、创建用户。当然,先创建用户也可以,但是按照这样的步骤进行配置相对安全性更高。因为我们最终要为用户进行赋权,而在赋权时,要先有数据库才可以。
1、原始代码:
以下为先创建用户配置 MySQL 环境的过程,值得注意的是选择先创建用户的配置方法,GRANT ALL 赋权的指令应在创建完数据库之后执行。
(1)连接 MySQL 数据库
在 MySQL 所在的主机上执行如下命令
mysql -u root -p
(2)创建 Spark 使用的用户登进 MySQL 后,需要先创建用户
CREATE USER 'spark' @ '% ' IDENTIFIED BY 'Spark123!';
GRANT ALL ON spark_test.* TO 'spark' @ '%';
(3)创建库和表
CREATE DATABASE spark_test;
USE spark_test;
CREATE TABLE IF NOT EXISTS 'student'(
'id' INT AUTO INCREMENT.
'name' VARCHAR(100) NOT NULL,
'age' INT NOT NULL,
'gpa' FLOAT,
PRIMARY KEY ('id')
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、实操
进入代码编辑窗口,进行如下操作:
(1)连接 MySQL
只有连接到 MySQL,才能执行 sql 语句。输入如下命令:
mysql -u root -p
//指定用户和密码
回车之后输入 root 用户的密码。输入密码之后就进入了 MySQL 的窗口,在该窗口当中,下一步是建立数据库。
(2)创建库
创建 Spark 使用的用户登进 MySQL 后,需要先创建用户。
create database spark02;
//创建数据库 spark02
use spark02;
//使用数据库 spark02
(3)创建表
create table if not exists 'student'{
//在 MySQL 支持若不存在表时创建表 student
//左侧单引号往往是标注其中是一个字符串,无需进行优化和改编
//指定表的结构
-> 'id'INT AUTO_INCRIMENT
//往往会先指定 ID 列,因为 MySQL 的表与 Hive 的表是不同
的,MySQL 的表是有索引的,在一般情况下,如果使用 InnoDB
引擎,即默认为索引文件,存表的文件按照 id 来进行索引的文
件。因此,要创建 id 方可,要有主键。
//“AUTO_INCRIMENT”自增主键
-> 'name'VARCHAR(100)not null
//创建 name 列,其文件类型是 VARCHAR,这里与 Hive 有一
定区别,后者的文件类型多为 string、int 等等。
//not null 表明 name 列不为空。
->'age'INT not null,
-> 'gpa' FLOAT not null,
-> primary key ('id')
//此时,表已大致创建完成
-> >engine = InnoDB default CHARSET=utf8;
//指定一个 engine 为 InnoDB,指定默认的数据集 default
CHARSET utf8。
回车显示 Query OK,说明表创建成功。
输入 show tables,输出结果如下:
再输入 desc student,输出结果如下:
类型无误,有一个名为 auto_increment 的 primary key。
外部应使用 spark 来访问该表,则应为 spark 创建用户,而非所
有的外部访问都使用 root 用户来访问,安全性太低。
(4)创建用户
create user 'spark03' @ '% ' identified by 'Spark03!';
// @ '% '表示可以在任意位置访问(本地或外部)
//指定密码时既有大写又有小写,还有数字和符号,安全级别高
//以上完成了用户的创建,但是目前用户无法访问当前的 spark02 的数据库
grant all on spark02.* tO 'spar k03' @ '%';
//grant all 表示将某表某文件所有权限都赋予该用户。因此通过该操作可以将数据库 spark02 下的所有文件赋权给用户 spark03
//@ '%'表示在任何位置都可访问
运行代码,运行结果无误。
就此整体上准备好了 MySQL 的环境,接下来就可以使用 SparkSQL 进行相应的操作。