本系列共分五篇,内容分别为:

(一)任务一:大数据平台环境搭建

具体内容

按照大数据分析平台需求,需要完成Hadoop完全分布式、Spark安装配置、Flink安装配置、Hive安装配置、Kafka安装配置、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。

  • “聚合计算出系统在线人数并将结果存入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程序服务器端实现:
    • 这里没有具体说明服务器端采用什么技术(Spring? Servlet? PHP?)
    • 在参考实现中,我采用了Java Web来实现(JSP + Servlet)

  • Web程序客户端实现:要求使用vue.js前端框架,使用ECharts可视化组件。

(六)补充说明

阅读大赛赛项规程说明,其中有这么一段描述:

(二)软件平台 采用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平台的。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐