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

start-yarn.sh

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

img

service mysqld start

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

img

hive

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

img

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

 create database stu;

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

img

 use stu;

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

img

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

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

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

img

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

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

img

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

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

img

 set hive.exec.dynamic.partition=true;

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

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

img

 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

7.

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

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

img

img

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

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

img

img

select name,score from students;

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

img

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

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

img

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

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

img

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

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

img

img

select count

(distinct course_id) from students;

img

img

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

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

img

 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

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