【hadoop】大数据核心技术综合练习

你好呀!这里是小易同学的博客,一名大二在校生。
写博客是为了记录自己的学习过程,同时也希望能帮助到需要帮助的人。
如果我的博客可以帮助到你,不妨给我一个关注🥰


实践题目:

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,并将各课程有多少学生及格的数据加入表中 

 查询各课程分别有多少同学参考

 

 用分数大于60的学生人数除以总参考的学生,可得到及格率

 

创建一个表passRate2_yiqianbin,将结果导入 

查询结果 

3.求每门课程的平均分,要求显示出课程的中文名字

3.1.先查出每门课程的平均分,并把字段拆分,方便后面两个表的连接查询(分步1)

 创建一个course_avg1_yiqianbin表,将上面结果装入(分步2)

3.2.把每个班的每门课程平均分算出来,并将中文名的字段连起来

 

3.3.创建一个表course_avg2_yiqianbin,将上面结果装入 

 3.4.创建一个表course_avg3_yiqianbin,装入上面结果

查询结果 3.5.创建一个表course_avg4_yiqianbin,将相同名字全部合并,得到最终数据

检验最终结果

4.求出有2门课不及格的学生

4.1.先把学生姓名和分数连接起来(连接学生表和课程成绩表)

4.2.创建一个表NoPassStudent1_yiqianbin,并把上面结果导入 

4.3.把有成绩小于60的学生姓名全部查询出来,并将学生姓名分组计数 

4.4.创建一个表NoPassStudent2_yiqianbin,并将上面结果导入 

4.5.将成绩有2门课小于60分的学生查出来,并把最终结果装入新表NoPassStudent3_yiqianbin4.6.查询最终结果

四.在mysql中创建结果表,把hive中的结果用sqoop写入表中,并显示结果。

1.启动mysql,创建一个新的数据库sqoop_class用来存储数据表

2.1.在mysql中创建第一个数据表yiqianbin_sexRate,用来储存男女比例的数据2.2.在mysql中创建第二个数据表passRate_yiqianbin,用来储存学生及格率

2.3.在mysql中创建第三个数据表course_avg_yiqianbin,用来储存每门课程的平均分以及名字 

2.4.在mysql中创建第四个数据表NoPassStudent_yiqianbin,用来储存有2门课不及格的学生名字 

四个表创建成功

3.用sqoop把结果从hive中导入mysql中

3.1.把男女比例数据导入mysql中

查询结果发现中文乱码 

查看表的信息 

修改mysql里面相应表的字符集 

最终结果 

3.2.把学生及格率数据导入mysql中 

查询结果 

3.3.把每门课程的平均分以及中文名字导入mysql中

修改表的字符集并查看是否修改成功

输入命令导表 

发现第一条信息多余 

删除空值,并得到最终结果 

3.4.把有2门课不及格的学生名字导入mysql中

修改表的字符集并查看是否修改成

输入命令 

查看结果 

五.结果导出本地

1.把男女比例数据导入向本地中

导入结果

 

2.把学生及格率数据导入本地

导入结果 

3.把每门课程的平均分以及中文名字导入本地

导入结果 

4.把有2门课不及格的学生名字导入本地

导入结果

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小易同学go

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值