目录
任务A:大数据平台搭建(容器环境)(15分)
子任务一:Hadoop HA安装配置
子任务二:Hive安装配置
子任务三:Kafka安装配置
任务B:离线数据处理(25分)
子任务一:数据抽取
子任务二:数据清洗
子任务三:指标计算
任务C:数据挖掘(10分)
子任务一:特征工程
子任务二:推荐系统
任务D:数据采集与实时计算(20分)
子任务一:实时数据采集
子任务二:使用Flink处理Kafka中的数据
任务E:数据可视化(15分)
子任务一:用柱状图展示各地区消费额的中位数
子任务二:用饼状图展示各地区消费能力
子任务三:用散点图展示每年上架商品数量的变化
子任务四:用条形图展示平均消费额最高的省份
子任务五:用折柱混合图展示省份平均消费额和地区平均消费额
任务F:综合分析(10分)
子任务一:请简述Spark中共享变量的基本原理和用途。
子任务二:请简述Flink资源管理中Task Slot的概念。
子任务三:分析地区销售状况。
2023年全国职业院校技能大赛
赛题第03套
赛项名称: 大数据应用开发
英文名称: Big Data Application Development
赛项组别: 高等职业教育组
赛项编号: GZ033
背景描述
大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。
因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。
环境说明:
服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过Asbru工具或SSH客户端进行SSH访问; 相关软件安装包在宿主机的/opt目录下,请选择对应的安装包进行安装,用不到的可忽略; 所有任务中应用命令必须采用绝对路径; 进入Master节点的方式为 docker exec -it master /bin/bash 进入Slave1节点的方式为 docker exec -it slave1 /bin/bash 进入Slave2节点的方式为 docker exec -it slave2 /bin/bash MySQL已在容器的Master中安装完毕,用户名/密码为root/123456 三个容器节点的root密码均为123456 |
本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:
本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:
本任务需要使用root用户完成相关配置,需要配置前置环境,具体要求如下:
环境说明:
服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 |
编写Scala代码,使用Spark将MySQL的shtd_store库中表user_info、sku_info、base_province、base_region、order_info、order_detail的数据增量抽取到Hive的ods库中对应表user_info、sku_info、base_province、base_region、order_info、order_detail中。
编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。
编写Scala代码,使用Spark计算相关指标。
注:在指标计算中,不考虑订单信息表中order_status字段的值,将所有订单视为有效订单。计算订单金额或订单总金额时只使用final_total_amount字段。需注意dwd所有的维表取最新的分区。
字段 |
类型 |
中文含义 |
备注 |
province_id |
int |
省份表主键 |
|
province_name |
string |
省份名称 |
|
region_id |
int |
地区主键 |
|
region_name |
string |
地区名称 |
|
total_amount |
double |
订单总金额 |
当月订单总金额 |
total_count |
int |
订单总数 |
当月订单总数 |
sequence |
int |
次序 |
|
year |
int |
年 |
订单产生的年,为动态分区字段 |
month |
int |
月 |
订单产生的月,为动态分区字段 |
字段 |
类型 |
中文含义 |
备注 |
provinceid |
int |
省份表主键 |
|
provincename |
text |
省份名称 |
|
provinceavgconsumption |
double |
该省平均订单金额 |
|
regionid |
int |
地区表主键 |
|
regionname |
text |
地区名称 |
|
regionavgconsumption |
double |
地区平均订单金额 |
该省所在地区平均订单金额 |
comparison |
text |
比较结果 |
省平均订单金额和该省所在地区平均订单金额比较结果,值为:高/低/相同 |
字段 |
类型 |
中文含义 |
备注 |
regionid |
int |
地区表主键 |
|
regionname |
text |
地区名称 |
|
provinceids |
text |
省份表主键 |
用,分割显示前三省份的id |
provincenames |
text |
省份名称 |
用,分割显示前三省份的name |
provinceamount |
text |
省份名称 |
用,分割显示前三省份的订单金额(需要去除小数部分,使用四舍五入) |
例如:
3 |
华东地区 |
21,27,11 |
上海市,江苏省,浙江省 |
100000,100,10 |
环境说明:
服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。 |
剔除订单信息表与订单详细信息表中用户id与商品id不存在于现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。
字段 |
类型 |
中文含义 |
备注 |
user_id |
int |
用户id的mapping对应键 |
|
sku_id |
int |
商品id的mapping对应键 |
提示:
Mapping操作:例如用户id:1、4、7、8、9,则做完mapping操作转为字典类型,键0对应用户id 1,键1对应用户id 4,以此类推
结果格式如下:
-------user_id_mapping与sku_id_mapping数据前5条如下:-------
0:0
0:89
1:1
1:2
1:3
字段 |
类型 |
中文含义 |
备注 |
user_id |
double |
客户key |
|
sku_id0 |
double |
用户是否购买过商品1 |
若用户购买过该商品,则值为1,否则为0 |
sku_id1 |
double |
用户是否购买过商品2 |
若用户购买过该商品,则值为1,否则为0 |
sku_id2 |
double |
用户是否购买过商品3 |
若用户购买过该商品,则值为1,否则为0 |
..... |
结果格式如下:
---------------第一行前5列结果展示为---------------
0.0,1.0,0.0,0.0,0.0
结果格式如下:
------------------------推荐Top5结果如下------------------------
相似度top1(商品id:1,平均相似度:0.983456)
相似度top2(商品id:71,平均相似度:0.782672)
相似度top3(商品id:22,平均相似度:0.7635246)
相似度top4(商品id:351,平均相似度:0.7335748)
相似度top5(商品id:14,平均相似度:0.522356)
环境说明:
服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。 |
编写Scala代码,使用Flink消费Kafka中Topic为order的数据并进行相应的数据统计计算(订单信息对应表结构order_info,订单详细信息对应表结构order_detail(来源类型和来源编号这两个字段不考虑,所以在实时数据中不会出现),同时计算中使用order_info或order_detail表中create_time或operate_time取两者中值较大者作为EventTime,若operate_time为空值或无此列,则使用create_time填充,允许数据延迟5s,订单状态order_status分别为1001:创建订单、1002:支付订单、1003:取消订单、1004:完成订单、1005:申请退回、1006:退回完成。另外对于数据结果展示时,不要采用例如:1.9786518E7的科学计数法)。
示例如下:
top2userconsumption:[1:张三:10020,42:李四:4540]
表空间为:shtd_result,表为order_info,列族为:info
字段 |
类型 |
注释 |
rowkey |
string |
HBase的主键,值为id |
id |
bigint |
|
consignee |
string |
|
consignee_tel |
string |
|
final_total_amount |
double |
|
order_status |
string |
|
user_id |
bigint |
|
delivery_address |
string |
|
order_comment |
string |
|
out_trade_no |
string |
|
trade_body |
string |
|
create_time |
string |
转成yyyy-MM-dd hh:mm:ss格式的的字符串 |
operate_time |
string |
转成yyyy-MM-dd hh:mm:ss格式的的字符串 |
expire_time |
string |
转成yyyy-MM-dd hh:mm:ss格式的的字符串 |
tracking_no |
string |
|
parent_order_id |
bigint |
|
img_url |
string |
|
province_id |
int |
|
benefit_reduce_amount |
double |
环境说明:
数据接口地址及接口描述详见各任务服务端说明。 |
编写Vue工程代码,根据接口,用柱状图展示2020年各地区所有订单消费额的中位数(降序排列,若有小数则四舍五入保留两位),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
编写Vue工程代码,根据接口,用饼状图展示2020年各地区的消费总额占比,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
编写Vue工程代码,根据接口,用基础散点图展示每年上架商品数量的变化情况,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
编写Vue工程代码,根据接口,用条形图展示2020年平均消费额(四舍五入保留两位小数)最高的5个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
编写Vue工程代码,根据接口,用折柱混合图展示2020年各省份平均消费额(四舍五入保留两位小数)和地区平均消费额(四舍五入保留两位小数)的对比情况,柱状图展示平均消费额最高的5个省份,折线图展示这5个省所在的地区的平均消费额变化,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。
请简述Spark中共享变量的基本原理和用途,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。
请简述你对Task Slot的理解,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。
在任务E中,根据相关的展示数据,请分析购买力较强的前三个地区,可从该地区的省份维度进行详细说明。将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。