2021-2022年高职大数据竞赛-赛题任务剖析
本系列共分五篇,内容分别为:
(一)任务一:大数据平台环境搭建
具体内容
按照大数据分析平台需求,需要完成Hadoop完全分布式、Spark安装配置、Flink安装配置、Hive安装配置、Kafka安装配置、Flume安装配置。
分析
- Hadoop完全分布式:请参考Hadoop-3.2.1环境搭建(3)_完全分布模式。
- Spark安装配置:《Spark实用教程_v3.1.2》,参考1.5小节内容
- Flink安装配置:Flink完全分布式集群安装
- Hive安装配置:安装和使用Hive
- Kafka安装配置:安装Kafka集群
- Flume安装配置:安装Apache Flume
(二)任务二:离线数据抽取
具体内容
按照要求使用Scala语言完成特定函数的编写,使用Spark抽取MySQL指定数据表中的新增的数据到ODS层的指定的分区表中。
分析
- 编程语言采用Scala:请参考Scala3教程
- 开发工具:IDEA 2019社区版。本次样卷中没有给出更多的说明,但参考往年对IDEA的要求,应该是会要求创建Maven类型的项目,出卷方会给出pom.xml依赖配置文件(竞赛环境是不能上外网的,创建项目后把pom.xml复制进去即可)。因此参赛选手需要掌握如何使用IDEA创建Maven项目,可参考小白学苑的教程:使用IntelliJ IDEA开发Spark Maven应用程序。
- 任务中提到“抽取MySQL指定数据表中新增的数据到ODS层的指定分区表中”,这个任务要求涉及到以下几个知识点:
- ODS层:我们理解为出卷方意指Hive的ODS层。ODS是个数据仓库的概念“数据贴源层”,简单理解就是刚加载到Hive中的原始数据所存放的层就是ODS层,表就是ODS表。更详细的概念解释,请自行google或biying。
- Spark集成Hive:既然要将数据ETL到Hive中,就需要配置Spark能访问Hive的元数据库Metastore。集成方法请参考《Spark实用教程_v3.1.2》,5.7小节内容。
- IDEA开发环境支持Hive:同样,要在IDEA中添加相应的依赖配置、JDBC驱动等。集成方法请参考《Spark实用教程_v3.1.2》,5.7小节内容。
- “特定函数的编写”,要求将这个ETL任务封装到Scala函数中以调用。
- “指定的分区表”,说明Spark写Hive的时候要进行分区写入。
- 以上任务要求所涉及到的开发编程技术,可参考小白学苑的案例_Spark SQL实现数据ETL到Hive ODS教程,里面有详细的讲解和参考代码实现。
- 本任务的完整参考实现,请参考“第三部分 赛题模拟实现-离线数据抽取与离线数据统计”。
- 另,任务描述中的“新增的数据”,意思是会考查两种抽取方式:全量抽取和增量抽取。
(三)任务三:离线数据统计
具体内容
使用Scala语言编写程序获取ODS层指定分区表中的数据进行清洗,并完成销量前5的商品统计、某月的总销售额统计、指定月份的销售额统计、各用户在线总时长统计,并将统计后的数据存入MySQL数据库中。
分析
- 任务是进行数据清洗。根据竞赛说明,这里的数据清洗内容包括:(1)数据去重;(2)缺失字段填充。
- 清洗任务使用Spark SQL DataFrame API实现,可参考小白学苑的教程“示例_数据缺失值处理”和“示例_数据整合、清洗与转换”。
- “统计销量前5的商品并存入MySQL”:这是个Top N问题,可参考“Spark SQL编程案例3_航班延误数据集分析”中Top N统计部分。
- “统计某月的总销售额并存入MySQL”:需要增加两个计算列--月份列和销售额列,然后执行group by...count...统计。可参考“Spark SQL编程案例1_电商数据分析”。
- “统计指定几个月的销售额并存入MySQL”:与上一任务类似,再加上使用where(或filter)过滤指定的几个月销售数据。
- “统计每个用户的在线总时长并存入MySQL”:按用户ID执行分组统计。因为没有看到真实的比赛数据,不太理解在销售表中如果有在线时长字段(用户在线统计表,不是销售表),请大家比赛时看真题的具体说明。
- 以上几个任务都有“存入MySQL”的要求,实际上是要求将统计的结果集DataFrame写出到MySQL数据库中,可参考小白学苑的教程“存储DataFrame”中的示例-“示例2:将DataFrame存储到MySQL表中”。
(四)任务四:数据采集与实时计算
具体内容
启动业务系统,按照要求使用Flume将用户操作日志采集并存入Kafka中并使用Flink、Scala消费Kafka中的数据将其进行聚合计算出商城在线人数,将结果存入Redis中,并统计该电商系统的UV与PV将结果存入MySQL中。
综合利用Flume、Flink相关技术,使用Scala开发语言,完成将某电商系统的用户操作日志抽取到Kafka中,消费Kafka中的数据并计算商城在线人数,并统计该电商系统的UV与PV。
分析
- 本任务包含三个组成部分:
- 数据采集:从Flume到Kafka;
- Flink流处理程序编写(使用Scala API,统计在线人数、UV和PV指标);
- 统计结果写出:Redis Sink和JDBC Sink。
- “使用Flume采集某电商系统用户操作日志存入Kafka中”:参考小白学苑“Flume集成Kafka”
- “使用Flink消费Kafka中的数据”
- 根据竞赛内容构成部分的说明,编程语言采用Scala;
- 开发工具:IDEA 2019社区版;
- 项目使用Maven构建。《Flink实用教程》第2.2节,或使用IntelliJ IDEA+Maven开发Flink项目
- “聚合计算出系统在线人数并将结果存入Redis中”
- 这里有个疑问,聚合计算需要时间维度,是要求计算每分钟的在线人数?还是每小时的?每天的?从样卷中无法看出。根据任务要求分析,既然要将结果存入Redis中缓存,说明计算的频次还是比较高的,在参考实现中,我会暂定为计算系统每分钟在线人数,大家可以参赛时看真题的具体要求再调整代码。
- 实现技术使用滚动窗口函数,事件时间,Flink写Redis和MySQL,请参考《Flink实用教程》相关章节。
- “统计系统的UV与PV并存入MySQL中”:同样的疑问:每分钟UV、PV?还是每小时?每天?从样卷中无法看出。同样在参考实现中,我会按每分钟进行统计。实现技术请参考《Flink实用教程》相关章节。
(五)任务五:数据可视化
具体内容
编写前端Web界面,调用后台数据接口,使用Vue.js、Echarts完成数据可视化。基于Vue.js、Echarts的数据可视化渲染编码(柱状图、折线图、饼图等)。
综合运用HTML、CSS、JavaScript等开发语言,Vue.js前端技术,结合Echarts数据可视化组件,对MySQL中的数据进行可视化呈现。
分析
- 本任务包含三个组成部分:
- ECharts:基于Web的js绘图库使用;
- Web程序服务器端实现;
- Web程序客户端实现。
- 使用ECharts绘制柱状图、折线图、饼图等:非常简单,参考ECharts官网上的Demo即可,实现时将其中静态数据替换为服务器端获取的动态数据即可;
- Web程序服务器端实现:
- 省赛中虽然没有说明,但从国赛赛规来看,不需要自己开发服务器端。而是已经提供好了Web Service接口,我们只需要在Vue工程文件中调用此接口获取数据就可以了。
- 在我们提供的参考实现中,会同步提供RESTful API接口供测试,并提供模拟实现参考。请关注我们的PBCP平台(个人大数据竞赛平台)。
- Web程序客户端实现:要求使用vue.js前端框架,倒创建Vue工程,使用ECharts可视化组件。开发工具要求使用的是Visual Studio Code。
(六)补充说明
阅读大赛赛项规程说明,其中有这么一段描述:
(二)软件平台 采用xxxx大数据实训管理系统(北京xxxx科技有限公司研发)。
说明出题方是依据这个平台环境出题的,所以在上面的分析中,我们看到有很多语焉不详的地方,要么是因为出题方故意为之,要么是出题方想当然地忽略了一些细节。
在“(三)软件环境”部分,可以看到,该实训管理系统使用的大数据组件比较陈旧,比如Spark是2.1.1版本,Hadoop是2.7.7版本,Kafka 2.0.0,Redis 4.0.1,Flume 1.7.0,Flink 1.10.2。其中比较麻烦的是Flink,因为Flink不同的版本,API之间有较大的差异,连接Kafka和连接Redis的代码都会随版本不同而不同。所以如果是为了竞赛,大家最好搭建一个和他的版本相同的环境。如果想掌握较新的技术,那么我推荐小白学苑的PBLP平台(个人大数据学习平台),搭载的大数据组件大家可以做个对比,另外小白学苑的所有教程代码都是基于PBLP平台的。