开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:SparkSQL 读写_Hive_创建 Hive 表】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12059
SparkSQL 读写_Hive_创建 Hive 表
内容介绍:
一、步骤
二、实操
接下来的内容主要学习如何使用 SparkSQL 访问 Hive 中的表。在该大环节中应该分为两个部分。
第一部分,如何使用 Hive 创建表,只有先创建表,才能谈论如何去访问表;第二部分,SparkSQL 如何访问表。本节课主要学习在 Hive 中创建表。
一、步骤
1、上传文件
前面的内容提过 Hive 的表其实对应了 HDFS 上的文件,则应去 Hive 上传文件。将文件上传到集群中,使用如下命令上传到 HDFS 中:
hdfs dfs -mkdir-p/dataset
hdfs dfs -put studenttabl10k/dataset/
2、使用 SQL 语句创建外部表
使用 Hive 或者 Beeline 执行如下 SQL:
CREATE DATABASE IF NOT EXISTS spark_integrition;
USE spark_integrition;
CREATE EXTERNAL TABLE student
{
name STRING
age INT,
gpa string
}
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION'/dataset/hive';
LOAD DATA INPATH '/dataset/studenttab10k'OVERWRITE INTO TABLE student;
二、实操
1、上传文件
进入到 spark 的目录下,在目录下当中有一个文件夹叫做 Files,打开它,其中有一个叫做 Datesite 的文件夹,其中有叫做 student10k 的文件,该文件大致有 1 万条数据,接下来,将文件上传到 Hive。
在上传之前,也可以先看一下文件的格式,部分如下:
中间是制表符分隔,整体是三列的数据,即今天所使用的数据。打开代码编辑窗口,进入到 root 用户的目录下。
点击右键找到 Upload to current folder(如果使用的是其他工具,只需要按照相应的工具进行操作即可)。
找到 c 盘对应的文件夹 Spark/Files/Detaset 中的 studenttab10k ,点击打开即会自动上传到文件夹下,上传成功后,将其拷贝到 export/Dateset 的目录中,覆盖原文件,进入到目录中即可(cd/export/dataset)。实际上此时任务并未完成,因为 Hive 一般情况下会把文件放在 HDFS 上,因此,要把文件给上传到 HDFS 中,即输入 hdfs dfs mkdir -p/dataset
创建对应的文件夹 dataset。
文件夹创建好之后,将 studenttab10k 文件放入 dataset 文件夹(hdfs dfs -put studenttab10k /dataset),此时即成功上传文件。使用 hdfs dfs -ls/dataset 查看 dataset,可以发现其中一文件叫做 studenttab10k。
2、使用 SQL 语句创建外部表
打开 Hive 或者 Beeline 命令行,执行一段 SQL 语句,先创建数据库,之后创建表,并加载数据到表中。
输入 hive(为了简单便捷,不演示 Beeline),等待 hive 命令行的开启。开启之后,先 create database if not exists spark01(创建的数据库的名字为 spark01)创建库。创建成功之后,输入 use spark01,然后创建表,表自动创建到库中。
create external table student
{
name STRING
age INT
gpds FLOAT
}
//对于 student 要往其中去定义一些列,参照看过文件格式,
第 一列是 String 类型的 Name 列,接下来是 int 类型的 age 列,接下来是 float 类型的分数列。整个表创建完成。
//创建好表和表里面的 schema 以后,即指定一些表的信息,如:
row format delimited fields terminated by '\t'lines terminated by '\n'stored as TEXTFILE location '/dateset/hive';
//row format 分隔符,fields 之间的分隔符'\t'制表符,也可以指定 lInes terminate,字段之间的分隔符叫制表符,行之间的分隔符是-n 换行。
//stored as 指定文件的存储格式,如果是 parqute,则指定 parqute;是 orc 便指定 orc;是 text file(文本文件)
//location '/dateset/hive'指定 location,而 location 对应在 dateset 下的 hive,即创建表时,要将内容放在 hive 目录下。“;”结束语句。
hive>show tables;
//输出结果显示表 student 已经创建完成,
hive>desc student;
//查看表是否有问题,输出结果显示表没有问题。
hive>select * from student
//使用表 student 进行查询,显示结果显示其中已有数据,这是因为之前的 hive 目录下已有数据。
hive>load data inpath '/dateset/studenttable10k'Overwrite into table student
//为了消除原始的数据,可以模拟 load 操作。在正常情况下,我们需要 load data inpath,即在 HDFS 的 dateset 目录下的 studenttable10k 文件中。
//Overwrite 是选择加载数据的模式,加载数据的模式有覆盖、追加等,此处是为了消除原始数据,则显然是应该 Overwrite(覆盖)。
//into table studenti 添加到 student 表中。
//至此数据已经成功加载
hive>select * from student limit 10;
//再次使用表 student 进行查询,使用 limit 限制显示的数量此时即会显示对应数据
以上即为创建 Hive 表的整个过程,对应的内容和语句以上讲义中已经提到,大家可以进行复制创建表即可。