你好呀!
这里是小易同学的博客,一名大二在校生。
写博客是为了记录自己的学习过程,同时也希望能帮助到需要帮助的人。
如果我的博客可以帮助到你,不妨给我一个关注🥰
实践题目:
1、把学生表,选课表,课程表,课程_班级表 先用flume导入到hdfs,然后在hive上建表并导入数据
2、用hive分析数据:
a、男女生比例
b、及格率
c、每门课程的平均分,要求显示出课程的中文名字
d、有2门课不及格的学生
3、在mysql中创建结果表,把结果用sqoop写入到表中,并显示结果。
4,可视化
实践报告:
一、将所有的文件用flume先导入hdfs
以下是要导的四个文件
1.在hdfs中创建一个目录用来存放四个数据表的文件
2.配置source,channel以及sink
第一个框填写所要上传的文件路径
第二个框填写所要上传的文件上一级目录路径(即文件夹路径)
第三个框是hdfs.path,这里是用来指定hdfs上的存储目录
3.启动Agent(记得是在启动hdfs的前提下)
命令:flume-ng agent --conf conf --conf-file class4.conf --name a1 -Dflume.hadoop.logger=INFO,console
4.查询hdfs中相应目录下是否成功导入文件
5.为了防止各文件的混乱,修改文件的名字
注意:在上传文件的时候可能会出现一个文件会拆分成多个小文件
修改设置文件回滚的条件
6.完成文件的上传
用上面同样的方法把其它三个文件上传至hdfs并改名
二.将数据全部导入hive中
在hive中创建第一个表,yiqianbin_course表
查询结果
在hive中创建第二个表,yiqianbin_course_class表
查询结果
在hive中创建第三个表,yiqianbin_electives表
查询结果
在hive中创建第四个表,yiqianbin_student表
查询结果
三.开始在hive实现数据分析
1.查询出男女生比例
1.1.由于此题涉及到计数,所以先把表头去掉
1.2.查询一共有多少学生
1.3.2071为查询出来的学生总人数,后面接着查询男女比例,这里涉及到“concat()函数,round()函数”,concat()函数用于将两个字符串连接起来,round()形成一个单一的字符串,用于把数值字段舍入为指定的小数位数
1.4.创建一个表用来存储结果
2.求学生及格率
先查询出各课程有多少学生成绩及格
创建一个表passRate1_yiqianbin,并将各课程有多少学生及格的数据加入表中
查询各课程分别有多少同学参考![](https://i-blog.csdnimg.cn/blog_migrate/aabc145717a15b439a097cc142917f77.png)
用分数大于60的学生人数除以总参考的学生,可得到及格率
创建一个表passRate2_yiqianbin,将结果导入 ![](https://i-blog.csdnimg.cn/blog_migrate/1f564732c7ea4514e6cd6576cf596e7d.png)
查询结果
3.求每门课程的平均分,要求显示出课程的中文名字
3.1.先查出每门课程的平均分,并把字段拆分,方便后面两个表的连接查询(分步1)
创建一个course_avg1_yiqianbin表,将上面结果装入(分步2)
3.2.把每个班的每门课程平均分算出来,并将中文名的字段连起来
3.3.创建一个表course_avg2_yiqianbin,将上面结果装入
3.4.创建一个表course_avg3_yiqianbin,装入上面结果![](https://i-blog.csdnimg.cn/blog_migrate/4a49add737db923b7d9b6985545a4963.png)
查询结果
3.5.创建一个表course_avg4_yiqianbin,将相同名字全部合并,得到最终数据![](https://i-blog.csdnimg.cn/blog_migrate/b25f69caa2ee961f9b0affee7c9da1ab.png)
检验最终结果![](https://i-blog.csdnimg.cn/blog_migrate/b3dd1bcfe41976d7a6f51dc819f7b1a8.png)
4.求出有2门课不及格的学生
4.1.先把学生姓名和分数连接起来(连接学生表和课程成绩表)
4.2.创建一个表NoPassStudent1_yiqianbin,并把上面结果导入
4.3.把有成绩小于60的学生姓名全部查询出来,并将学生姓名分组计数
4.4.创建一个表NoPassStudent2_yiqianbin,并将上面结果导入
4.5.将成绩有2门课小于60分的学生查出来,并把最终结果装入新表NoPassStudent3_yiqianbin
4.6.查询最终结果![](https://i-blog.csdnimg.cn/blog_migrate/099d76b915bdf15aba906b0cd292115d.png)
四.在mysql中创建结果表,把hive中的结果用sqoop写入表中,并显示结果。
1.启动mysql,创建一个新的数据库sqoop_class用来存储数据表
2.1.在mysql中创建第一个数据表yiqianbin_sexRate,用来储存男女比例的数据
2.2.在mysql中创建第二个数据表passRate_yiqianbin,用来储存学生及格率![](https://i-blog.csdnimg.cn/blog_migrate/8680de23e52490af5093553ec071d90e.png)
2.3.在mysql中创建第三个数据表course_avg_yiqianbin,用来储存每门课程的平均分以及名字 ![](https://i-blog.csdnimg.cn/blog_migrate/6d97143ddc3915c638c5b0e28a91302e.png)
2.4.在mysql中创建第四个数据表NoPassStudent_yiqianbin,用来储存有2门课不及格的学生名字 ![](https://i-blog.csdnimg.cn/blog_migrate/f498d168efac419b6028797f2fe6effe.png)
四个表创建成功
3.用sqoop把结果从hive中导入mysql中
3.1.把男女比例数据导入mysql中![](https://i-blog.csdnimg.cn/blog_migrate/95a30e646730b989cdc1ed087712e22a.png)
查询结果发现中文乱码
查看表的信息 ![](https://i-blog.csdnimg.cn/blog_migrate/fc4f68c8e99c257c63d28a3526f77e2d.png)
修改mysql里面相应表的字符集 ![](https://i-blog.csdnimg.cn/blog_migrate/2387f1535f47d42ca52884ba7e978add.png)
最终结果
3.2.把学生及格率数据导入mysql中 ![](https://i-blog.csdnimg.cn/blog_migrate/f3863c1af80e045b6221ac6ba78965fa.png)
查询结果 ![](https://i-blog.csdnimg.cn/blog_migrate/5cec0dfc928aed4436e4ac45ce4b3ac7.png)
3.3.把每门课程的平均分以及中文名字导入mysql中
修改表的字符集并查看是否修改成功![](https://i-blog.csdnimg.cn/blog_migrate/624e8e3c895e20508da4635edff23c55.png)
输入命令导表
发现第一条信息多余 ![](https://i-blog.csdnimg.cn/blog_migrate/e69bdcfc670eb3705c4926ffc7d88cf6.png)
删除空值,并得到最终结果 ![](https://i-blog.csdnimg.cn/blog_migrate/444420bf7a1556add2e8b3c881aa2a19.png)
3.4.把有2门课不及格的学生名字导入mysql中
修改表的字符集并查看是否修改成![](https://i-blog.csdnimg.cn/blog_migrate/a670809997268bc945efa5742d3fd1de.png)
输入命令 ![](https://i-blog.csdnimg.cn/blog_migrate/35cf89a63bad09e4be4a9d2ff33898a8.png)
查看结果 ![](https://i-blog.csdnimg.cn/blog_migrate/de48f801cda635ab6f23a40180561a5f.png)
五.结果导出本地
1.把男女比例数据导入向本地中![](https://i-blog.csdnimg.cn/blog_migrate/1e7e9e95775a4a8628121b0e928e596b.png)
导入结果
2.把学生及格率数据导入本地
导入结果
3.把每门课程的平均分以及中文名字导入本地
导入结果 ![](https://i-blog.csdnimg.cn/blog_migrate/2b5f20542c1a96e7ce6b446e91ae1eba.png)
4.把有2门课不及格的学生名字导入本地![](https://i-blog.csdnimg.cn/blog_migrate/0cc03d19fc12cdff80b6e964c2418dc1.png)
导入结果