Hive实验

介绍

该文为Hadoop基础实验中的hive实验

实验目的:

掌握hive的编程技术

实验步骤:

1、创建数据库stu。

2、创建students表,表结构如下:

id int,

name string,

gender string,

age int,

course_id int,

score double,

classes string

3、导入数据students_data.txt到students表。

4、创建course表,表结构如下:

course_id int,

course_name string

5、导入数据course.txt到course表。

6、创建动态分区表students_dynamic,以classes为分区字段。

7、从students表导入数据到students_dynamic。

8、查询每个班的平均分数。

9、查询students表中所有学生的姓名、分数。

10、查询students表中成绩在80至90之间的记录的所有信息。

11、查询students表中成绩在60以下的记录的姓名、课程编号(course_id)和分数。

12、将students表中的所有记录先按分数降序,当分数一样时,再按姓名升序排列。

13、统计students表中有多少门不同的课程。

14、查询Mary所选修课程的课程编号和分数。

15、找出所有学生中,course_id为30的课程,分数最高的同学。输出该同学姓名、分数、课程名称、所在班级到屏幕。

实验方案

打开hive( 在hadoop根目录执行)

start-dfs.sh

该语句为打开hdfs分布式文件系统,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAwMi5qcGc?x-oss-process=image/format ,png)

start-yarn.sh

该语句为打开资源调度框架yarn,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAwNC5wbmc?x-oss-process=image/format ,png)

service mysqld start

该语句为打开mysql数据库,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAwNi5qcGc?x-oss-process=image/format ,png)

hive

该语句为打开hive,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAwOC5qcGc?x-oss-process=image/format ,png)

由于hive是部署在hdfs上的组件,故打开hive之前要打开hdfs和yarn框架来调度资源,而hive产生的元数据存储在mysql中,故打开hdfs和yarn之后,且在打开hive之前要打开mysql。

 create database stu;

该语句为创建名为stu的数据库,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAxMC5qcGc?x-oss-process=image/format ,png)

 use stu;

该语句为使用数据库stu,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAxMi5qcGc?x-oss-process=image/format ,png)

create table students(id int,name string,gender string,age int,course_id int,score double,classes string) row format delimited fields terminated by ',';

创建名为students的表格,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAxNC5wbmc?x-oss-process=image/format ,png)

 load data local inpath '/simple/data/students_data.txt' overwrite into table students;

从本地加载数据到表students中,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAxNi5qcGc?x-oss-process=image/format ,png)

hive> create table course(course_id int,course_name string) row format delimited fields terminated by ',';

创建名为course的表,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAxOC5qcGc?x-oss-process=image/format ,png)

load data local inpath '/simple/data/course.txt' overwrite into table course;

从本地加载数据到表course中,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAyMC5qcGc?x-oss-process=image/format ,png)

 set hive.exec.dynamic.partition=true;

 set hive.exec.dynamic.partition.mode=nostrict;

创建动态分区表之前要先开启分区,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAyMi5qcGc?x-oss-process=image/format ,png)

 create table students_dynamic(id int,name string,gender string,age int,course_id int,score double,classes string) partitioned by(class string) row format delimited fields terminated by ',';

创建动态分区表,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAyNC5qcGc?x-oss-process=image/format ,png)

7.

 insert overwrite table students_dynamic partition(class='classA')select * from students;

在数据库stu中动态分区表students_dynamic中插入表students的数据,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAyNi5qcGc?x-oss-process=image/format ,png)

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAyOC5qcGc?x-oss-process=image/format ,png)

 select classes,avg(score) from students group by classes;

查询每个班的平均分数,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAzMC5qcGc?x-oss-process=image/format ,png)

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAzMi5qcGc?x-oss-process=image/format ,png)

select name,score from students;

查询students表中所有学生的姓名、分数,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAzNC5qcGc?x-oss-process=image/format ,png)

 select * from students where score>=80 and score<=90;

查询students表中成绩在80至90之间的记录的所有信息,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAzNi5qcGc?x-oss-process=image/format ,png)

 select name,course_id,score from students where score<60;

查询students表中成绩在60以下的记录的姓名、课程编号(course_id)和分数,查询结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTAzOC5qcGc?x-oss-process=image/format ,png)

 select * from students order by score desc,name asc;

将students表中的所有记录先按分数降序,当分数一样时,再按姓名升序排列,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTA0MC5qcGc?x-oss-process=image/format ,png)

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTA0Mi5qcGc?x-oss-process=image/format ,png)

select count

(distinct course_id) from students;

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTA0NC5qcGc?x-oss-process=image/format ,png)

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTA0Ni5qcGc?x-oss-process=image/format ,png)

 select course_id,score from students where name=='Mary';

查询Mary所选修课程的课程编号和分数,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTA0OC5qcGc?x-oss-process=image/format ,png)

 select name,score,course_id,classes from students a,(select max(score) max_score from students where course_id=30) b where a.score=b.max_score and course_id=30;

找出所有学生中,course_id为30的课程,分数最高的同学。输出该同学姓名、分数、 课程名称、所在班级到屏幕,运行结果如下:

![img]( https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdXRvMmRldi5jb2RpbmcubmV0L3AvSW1hZ2VIb3N0aW5nU2VydmljZS9kL0ltYWdlSG9zdGluZ1NlcnZpY2UvZ2l0L3Jhdy9tYXN0ZXIvbWQvY2xpcF9pbWFnZTA1MC5qcGc?x-oss-process=image/format ,png)

posted @ 2020-07-14 20:52  赤沙咀-菜虚坤  阅读(184)  评论(0)    收藏  举报