一、实战概述
在这个实战中,我们运用了Hive框架来处理学生的月考成绩数据。具体步骤如下:
-
准备数据: 我们准备了三个文本文件,分别包含了语文、数学和英语的月考成绩数据,并将这些数据上传到HDFS的指定目录。
-
启动Hive Metastore服务并连接Hive客户端: 我们启动了Hive Metastore服务,并通过Hive客户端连接到Hive,为后续操作做好准备。
-
创建分区表: 在Hive中,我们创建了一个名为
student_score
的分区表,用于存储学生的成绩数据,其中分区字段为科目(subject
)。这样的分区设计使得后续查询和分析更加方便。 -
加载数据到分区表: 按照科目将数据加载到分区表中,分别加载了语文、数学和英语的成绩数据。这样的数据组织方式有助于提高查询效率。
-
使用Hive SQL进行统计: 利用Hive的SQL语句,我们进行了统计操作,计算每个学生在三个科目上的月考平均分。通过使用
AVG
函数和ROUND
函数,我们得到了每个学生在语文、数学和英语三个科目上的月考平均分,并保留了一位小数。
整个实战过程涉及了Hive表的创建、分区管理、数据加载以及SQL查询等多个环节,充分展示了Hive在大数据处理中的灵活性和便捷性。通过这次实践,我们更深入地理解和掌握了Hive框架在数据分析和查询中的应用。
二、提出任务
统计每个同学各科月考平均分
- 语文月考成绩 -
chinese.txt
1 张晓云 89
2 张晓云 73
3 张晓云 67
4 张晓云 70
5 张晓云 79
6 张晓云 87
7 张晓云 99
8 张晓云 83
9 张晓云 97
10 张晓云 92
11 张晓云 67
12 张晓云 86
1 王东林 49
2 王东林 83
3 王东林 67
4 王东林 49
5 王东林 93
6 王东林 87
7 王东林 65
8 王东林 92
9 王东林 60
10 王东林 94
11 王东林 81
12 王东林 90
1 李宏宇 77
2 李宏宇 66
3 李宏宇 89
4 李宏宇 87
5 李宏宇 96
6 李宏宇 79
7 李宏宇 87
8 李宏宇 96
9 李宏宇 69
10 李宏宇 87
11 李宏宇 96
12 李宏宇 79
- 数学月考成绩 -
math.txt
1 张晓云 79
2 张晓云 83
3 张晓云 77
4 张晓云 90
5 张晓云 89
6 张晓云 67
7 张晓云 89
8 张晓云 93
9 张晓云 90
10 张晓云 82
11 张晓云 77
12 张晓云 96
1 王东林 78
2 王东林 94
3 王东林 76
4 王东林 70
5 王东林 90
6 王东林 83
7 王东林 85
8 王东林 82
9 王东林 84
10 王东林 78
11 王东林 99
12 王东林 93
1 李宏宇 86
2 李宏宇 81
3 李宏宇 76
4 李宏宇 93
5 李宏宇 88
6 李宏宇 82
7 李宏宇 81
8 李宏宇 93
9 李宏宇 86
10 李宏宇 90
11 李宏宇 67
12 李宏宇 88
- 英语月考成绩 -
english.txt
1 张晓云 78
2 张晓云 83
3 张晓云 92
4 张晓云 66
5 张晓云 82
6 张晓云 89
7 张晓云 79
8 张晓云 68
9 张晓云 96
10 张晓云 91
11 张晓云 87
12 张晓云 82
1 王东林 69
2 王东林 86
3 王东林 73
4 王东林 99
5 王东林 67
6 王东林 95
7 王东林 74
8 王东林 92
9 王东林 76
10 王东林 88
11 王东林 92
12 王东林 56
1 李宏宇 88
2 李宏宇 78
3 李宏宇 92
4 李宏宇 78
5 李宏宇 89
6 李宏宇 76
7 李宏宇 92
8 李宏宇 75
9 李宏宇 88
10 李宏宇 92
11 李宏宇 97
12 李宏宇 85
三、完成任务
(一)准备数据
- 启动hadoop服务
1、在虚拟机上创建文本文件
-
创建
subjectavg
目录,在里面创建chinese.txt
文件
-
创建
math.txt
-
创建
english.txt
2、上传文件到HDFS指定目录
-
创建
/subjectavg/input
目录,执行命令:hdfs dfs -mkdir -p /subjectavg/input
-
将文本文件
chinese.txt
、math.txt
与english.txt
,上传到【HDFS】的/subjectavg/input
目录
(二)实现步骤
1、启动Hive Metastore服务
- 执行命令:
hive --service metastore &
,在后台启动metastore
服务
2、启动Hive客户端
- 执行命令:
hive
,看到命令提示符hive>
3、创建分区的学生成绩表
- 执行语句:
hive> CREATE TABLE student_score ( id INT, name STRING, score INT ) PARTITIONED BY (subject STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
4、按分区加载数据
-
加载
chinese.txt
到chinese分区 -
执行命令:
LOAD DATA INPATH '/subjectavg/input/chinese.txt' INTO TABLE student_score PARTITION (subject='chinese');
-
加载
math.txt
到math分区 -
执行命令:
LOAD DATA INPATH '/subjectavg/input/math.txt' INTO TABLE student_score PARTITION (subject='math');
-
加载
english.txt
到english分区 -
执行命令:
LOAD DATA INPATH '/subjectavg/input/english.txt' INTO TABLE student_score PARTITION (subject='english');
查看Hadoop WebUI里查看分区表对应目录
5、查看分区表全部记录
- 执行语句:
select * from student_score;