2024 年河南省职业院校 技能大赛高职组 “大数据分析与应用” 赛项任务书(一))
背景描述:
大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。
因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hudi、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。
任务A:模块 A:数据采集(15 分)
环境说明:
服务端登录地址详见各模块服务端说明。
补充说明:
各节点可通过 Asbru 工具或 SSH 客户端进行 SSH 访问; 主节点 MySQL
数据库用户名/密码:root/123456(已配置远程连接); Hive
的配置文件位于主节点/opt/module/hive-3.1.2/conf/ Spark 任务在 Yarn 上用 Client
运行,方便观察日志; 建议使用 gson 解析 json 数据。
任务一:离线数据采集
编 写 Scala 工 程 代 码 , 将 MySQL 的 ds_db01 库 中 表 order_master 、order_detail、coupon_info、coupon_use、product_browse、product_info、customer_inf 、 customer_login_log 、 order_cart 、 customer_level_inf 、customer_addr 的数据增量抽取到 Hive 的 ods 库中对应表 order_master、order_detail、coupon_info、coupon_use、product_browse、product_info、customer_inf 、 customer_login_log 、 order_cart 、 customer_level_inf 、customer_addr 中(ods 库中部分表没有数据,正常抽取即可)。
1、 抽取 ds_db01 库中 order_master 的增量数据进入 Hive 的 ods 库中表order_master。根据 ods.order_master 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 show partitions ods.order_master命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
2、 抽取 ds_db01 库中 order_detail 的增量数据进入 Hive 的 ods 库中表order_detail。根据ods.order_detail 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 show partitions ods.order_detail命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
3、 抽 取 ds_db01 库 中 coupon_info 的 增 量 数 据 进 入 Hive 的 ods 库 中 表coupon_info,根据 ods.coupon_info 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 show partitions ods.coupon_info命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
4、 抽 取 ds_db01 库 中 coupon_use 的 增 量 数 据 进 入 Hive 的 ods 库 中 表coupon_use,增量字段取 ods.coupon_use 表中 get_time、used_time、pay_time 中的最大者,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 Hive Cli 查询最新分区数据总条数,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
5、 抽取 ds_db01 库中 product_browse 的增量数据进入 Hive 的 ods 库中表product_browse,根据 ods.product_browse 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区 字 段 格 式 为 yyyyMMdd ) 。 使 用 hive cli 执 行 show partitionsods.product_browse 命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下。
6、 抽取 ds_db01 库中 product_info 的增量数据进入 Hive 的 ods 库中表product_info,根据 ods.product_info 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 show partitions ods.product_info命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
7、 抽取 ds_db01 库中 customer_inf 的增量数据进入 Hive 的 ods 库中表customer_inf,根据 ods.customer_inf 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 show partitions ods.customer_inf命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
8、 抽取 ds_db01 库中 customer_login_log 的增量数据进入 Hive 的 ods 库中customer_login_log,根据 ods.customer_login_log 表中 login_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 show partitions ods.customer_login_log 命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
9、 抽 取 ds_db01 库 中 order_cart 的 增 量 数 据 进 入 Hive 的 ods 库 中 表order_cart,根据ods.order_cart 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 show partitions ods.order_cart 命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
10、 抽取 ds_db01 库中 customer_addr 的增量数据进入 Hive 的 ods 库中表customer_addr,根据 ods.customer_addr 表中 modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字 段 格 式 为 yyyyMMdd ) 。 使 用 hive cli 执 行 show partitions ods.customer_addr 命令,将执行结果截图粘贴至客户端桌面【Release\模块 A提交结果.docx】中对应的任务序号下;
11、 抽取 ds_db01 库中 customer_level_inf 的增量数据进入 Hive 的 ods 库中 表 customer_level_inf , 根 据 ods.customer_level_inf 表 中modified_time 作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd)。使用 hive cli 执行 showpartitions ods.customer_level_inf 命令,将执行结果截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下。
任务二:实时数据采集
1、 在主节点使用 Flume 采集实时数据生成器 25001 端口的 socket 数据(实时数据生成器脚本为主节点/data_log 目录下的 gen_ds_data_to_socket 脚本,该脚本为 Master 节点本地部署且使用 socket 传输),将数据存入到 Kafka的 Topic 中(Topic 名称为 ods_mall_log,分区数为 2,ZK 关于 Kafka 的信息在其/kafka 节点),使用 Kafka 自带的消费者消费 ods_mall_log(Topic)中的数据,查看 Topic 中的前 1 条数据的结果,将查看命令与结果完整的截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下;
注:需先启动已配置好的 Flume 再启动脚本,否则脚本将无法成功启动,启动方式为进入/data_log 目录执行./gen_ds_data_to_socket (如果没有权限,请执行授权命令 chmod 777/data_log/gen_ds_data_to_socket)
2、 实时脚本启动后,在主节点进入到 maxwell-1.29.0 的解压后目录下(在/opt/module 下),配置相关文件并启动,读取主节点 MySQL 数据的 binlog日志(MySQL 的 binlog 相关配置已完毕,只需要关注 ds_realtime_db 数据库的表)到 Kafka 的 Topic 中(Topic 名称为 ods_mall_data,分区数为 2,ZK 关于 Kafka 的信息在其/kafka 节点)。使用 Kafka 自带的消费者消费ods_mall_data(Topic)中的数据,查看 Topic 中的前 1 条数据的结果,将查看命令与结果完整的截图粘贴至客户端桌面【Release\模块 A 提交结果.docx】中对应的任务序号下。
模块 B:实时数据处理(25 分)
环境说明:
服务端登录地址详见各模块服务端说明。
补充说明:
各节点可通过 Asbru 工具或 SSH 客户端进行 SSH 访问; 主节点 MySQL
数据库用户名/密码:root/123456(已配置远程连接);
Flink 任务在 Yarn 上用 per job 模式(即 Job
分离模式,不采用 Session 模式),
方便 Yarn 回收资源; 建议使用 gson 解析 json 数据。
fact_order_detail 表结构,存储位置:Kafka,存储格式:json
2、 使用 Flink 消费 Kafka 中 topic 为 ods_mall_log 的数据,根据数据中不同的表前缀区分,过滤出 product_browse 的数据,将数据分别分发至 kafka的 DWD 层 log_product_browse 的 Topic 中,其分区数为 2,其他的表则无需处理。使用 Kafka 自带的消费者消费 log_product_browse(Topic)的前 1
条数据,将结果截图粘贴至客户端桌面【Release\模块 B 提交结果.docx】中对应的任务序号下。log_product_browse 表结构,存储位置:Kafka,存储格式:json
3、 在 任 务 1 、 2 进 行 的 同 时 , 需 要 将 order_master 、 order_detail 、product_browse 备份至 HBase 中(若 Int 类型长度不够,可使用 BigInt 或Long 类型代替),使用 HBase Shell 查看 ods:order_master 表的任意 2 条数据,查看字段为 row_key 与 shipping_user、查看 ods:order_detail 表的任 意 2 条 数 据 , 查 看 字 段 为 row_key 与 product_name 、 查 看ods:product_browse 表的任意 2 条数据,查看字段为 row_key 与 order_sn。将结果分别截图粘贴至客户端桌面【Release\模块 B 提交结果.docx】中对应的任务序号下(截图中不能有乱码)。
三个 HBase 中的数据结构为:
ods:order_master 数据结构如下:
ods:order_detail 数据结构如下:
ods:product_browse 数据结构如下:
模块 C:离线数据处理(20 分)
环境说明:
服务端登录地址详见各模块服务端说明。
补充说明:
各节点可通过 Asbru 工具或 SSH 客户端进行 SSH 访问;
主节点 MySQL数据库用户名/密码:root/123456(已配置远程连接);
Hive的配置文件位于主节点/opt/module/hive-3.1.2/conf/
Spark 任务在 Yarn 上用 Client运行,方便观察日志;
ClickHouse 的 jdbc 连接端口 8123,用户名/密码:default/123456,
命令行客户端(tcp)端口 9001;
建议使用 gson 解析 json 数据。
任务一:离线数据清洗
编写 Scala 工程代码,将 ods 库中表 order_master、order_detail、
coupon_info、coupon_use、product_browse、product_info、customer_inf、
customer_login_log、order_cart、customer_level_inf、customer_addr 抽取
到 Hive 的 dwd 库中对应表中。表中有涉及到 timestamp 类型的,均要求按照
yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的
位置添加 00:00:00,添加之后使其符合 yyyy-MM-dd HH:mm:ss。
1、 抽取 ods 库中表 customer_inf 最新分区数据,并结合 dim_customer_inf 最
新 分 区 现 有 的 数 据 , 根 据 customer_id 合 并 数 据 到 dwd 库 中
dim_customer_inf 的分区表(合并是指对 dwd 层数据进行插入或修改,需修
改的数据以 customer_id 为合并字段,根据 modified_time 排序取最新的一
条),分区字段为 etl_date 且值与 ods 库的相对应表该值相等,并添加
dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time
四列,其中 dwd_insert_user、dwd_modify_user 均填写“user1”。若该条
记录第一次进入数仓 dwd 层则 dwd_insert_time、dwd_modify_time 均存当
前操作时间,并进行数据类型转换。若该数据在进入 dwd 层时发生了合并修
改,则 dwd_insert_time 时间不变,dwd_modify_time 存当前操作时间,其
余列存最新的值。使用 hive cli 查询 modified_time 为 2022 年 10 月 01 日
当天的数据,查询字段为 customer_id、customer_email、modified_time、
dwd_insert_time、dwd_modify_time,并按照 customer_id 进行升序排序,
将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的
任务序号下;
2、 抽取 ods 库中表 coupon_info 最新分区数据,并结合 dim_coupon_info 最新
分区现有的数据,根据 coupon_id 合并数据到 dwd 库中 dim_coupon_info 的
分区表(合并是指对 dwd 层数据进行插入或修改,需修改的数据以 coupon_id
为合并字段,根据 modified_time 排序取最新的一条),分区字段为 etl_date
且 值 与 ods 库 的 相 对 应 表 该 值 相 等 , 并 添 加 dwd_insert_user 、
dwd_insert_time 、 dwd_modify_user 、 dwd_modify_time 四 列 , 其 中
dwd_insert_user、dwd_modify_user 均填写“user1”。若该条记录第一次
进入数仓 dwd 层则 dwd_insert_time、dwd_modify_time 均存当前操作时间,
并进行数据类型转换。若该数据在进入 dwd 层时发生了合并修改,则
dwd_insert_time 时间不变,dwd_modify_time 存当前操作时间,其余列存
最新的值。使用 hive cli 执行 show partitions dwd.dim_coupon_info 命
令,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对
应的任务序号下;
3、 抽取 ods 库中表 product_info 最新分区的数据,并结合 dim_product_info
最 新 分 区 现 有 的 数 据 , 根 据 product_core 合 并 数 据 到 dwd 库 中
dim_product_info 的分区表(合并是指对 dwd 层数据进行插入或修改,需修
改的数据以 product_core 为合并字段,根据 modified_time 排序取最新的
一条),分区字段为 etl_date 且值与 ods 库的相对应表该值相等,并添加
dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time
四列,其中 dwd_insert_user、dwd_modify_user 均填写“user1”。若该条
记录第一次进入数仓 dwd 层则 dwd_insert_time、dwd_modify_time 均存当
前操作时间,并进行数据类型转换。若该数据在进入 dwd 层时发生了合并修
改,则 dwd_insert_time 时间不变,dwd_modify_time 存当前操作时间,其
余 列 存 最 新 的 值 。 使 用 hive cli 执 行 show partitions
dwd.dim_product_info 命令,将结果截图粘贴至客户端桌面【Release\模块
C 提交结果.docx】中对应的任务序号下;
4、 抽 取 ods 库 中 表 order_master 最 新 分 区 的 数 据 , 并 结 合 HBase 中
order_master_offline 表中的数据合并抽取到 dwd 库中 fact_order_master
的分区表,分区字段为 etl_date 且值与 ods 库的相对应表该值相等,并添
加 dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time
四 列 , 其 中 dwd_insert_user 、 dwd_modify_user 均 填 写 “ user1 ” ,
dwd_insert_time、dwd_modify_time 均填写当前操作时间(年月日必须是今
天,时分秒只需在比赛时间范围内即可),抽取 HBase 中的数据时,只抽取
2022 年 10 月 01 日的数据(以 rowkey 为准),并进行数据类型转换。使用
hive cli 查询 modified_time 为 2022 年 10 月 01 日当天的数据,查询字段
为 order_id、order_sn、shipping_user、create_time、shipping_time,
并按照 order_id 进行升序排序,将结果截图复制粘贴至客户端桌面
【Release\模块 C 提交结果.docx】中对应的任务序号下;
抽 取 ods 库 中 表 order_detail 表 最 新 分区 的 数 据 ,并 结 合 HBase 中order_detail_offline 表中的数据合并抽取到 dwd 库中 fact_order_detail的分区表,分区字段为 etl_date 且值与 ods 库的相对应表该值相等,并添加 dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time
四 列 , 其 中 dwd_insert_user 、 dwd_modify_user 均 填 写 “ user1 ” ,dwd_insert_time、dwd_modify_time 均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),抽取 HBase 中的数据时,只抽取2022 年 10 月 01 日的数据(以 rowkey 为准),并进行数据类型转换。使用hive cli 查询 modified_time 为 2022 年 10 月 01 日当天的数据,查询字段为 order_detail_id、order_sn、product_name、create_time,并按照order_detail_id 进行升序排序,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下
6、 抽取 ods 库中表 coupon_use 最新分区的数据到 dwd 库中 fact_coupon_use的分区表,分区字段为 etl_date 且值与 ods 库的相对应表该值相等,并添加 dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四 列 , 其 中 dwd_insert_user 、 dwd_modify_user 均 填 写 “ user1 ” ,dwd_insert_time、dwd_modify_time 均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用 hivecli 执行 show partitions dwd.fact_coupon_use 命令,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下;
7、 抽 取 ods 库 中 表 customer_login_log 最 新 分 区 的 数 据 到 dwd 库 中log_customer_login 的分区表,分区字段为 etl_date 且值与 ods 库的相对应 表 该 值 相 等 , 并 添 加 dwd_insert_user 、 dwd_insert_time 、dwd_modify_user 、 dwd_modify_time 四 列 , 其 中 dwd_insert_user 、dwd_modify_user 均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可 ) , 并 进 行 数 据 类 型 转 换 。 使 用 hive cli 执 行 show partitionsdwd.log_customer_login 命令,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下;
8、 抽取 ods 库中表 order_cart 最新分区的数据到 dwd 库中 fact_order_cart的分区表,分区字段为 etl_date 且值与 ods 库的相对应表该值相等,并添加 dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四 列 , 其 中 dwd_insert_user 、 dwd_modify_user 均 填 写 “ user1 ” ,dwd_insert_time、dwd_modify_time 均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用 hivecli 执行 showpartitionsdwd.fact_order_cart 命令,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下;
9、 抽 取 ods 库 中 表 product_browse 最 新 分 区 的 数 据 , 并 结 合 HBase 中product_browse_offline 表 中 的 数 据 合 并 抽 取 到 dwd 库 中log_product_browse 的分区表,分区字段为 etl_date 且值与 ods 库的相对应 表 该 值 相 等 , 并 添 加 dwd_insert_user 、 dwd_insert_time 、dwd_modify_user 、 dwd_modify_time 四 列 , 其 中 dwd_insert_user 、dwd_modify_user 均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月必须是今天,时分秒只需在比赛时间范围内即可),抽取 HBase 中的数据时,只抽取 2022 年 10 月 01 日的数据(以 rowkey为准),并进行数据类型转换。使用 hive cli 查询 modified_time 为 2022年 10 月 01 日当天的数据,查询字段为 log_id、product_id、order_sn、modified_time,并按照 log_id 进行升序排序,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下;
ods:product_browse_offline 数据结构如下:
10、 抽取 ods 库中表 customer_level_inf 最新分区的数据到 dwd 库中dim_customer_level_inf 的分区表,分区字段为 etl_date 且值与 ods 库的相 对 应 表 该 值 相 等 , 并 添 加 dwd_insert_user 、 dwd_insert_time 、dwd_modify_user 、 dwd_modify_time 四 列 , 其 中 dwd_insert_user 、
dwd_modify_user 均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用 hive cli 执行 show partitions dwd.dim_customer_level_inf 命令,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下;
11、 抽 取 ods 库 中 表 customer_addr 最 新 分 区 的 数 据 到 dwd 库 中dim_customer_addr 的分区表,分区字段为 etl_date 且值与 ods 库的相对应表该值相等,并添加 dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time 四列,其中 dwd_insert_user、dwd_modify_user 均填写“user1”,dwd_insert_time、dwd_modify_time 均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用 hive cli 执行 show partitions dwd.dim_customer_addr 命令,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下;
12、 将 dwd 库 中 dim_customer_inf 、 dim_customer_addr 、dim_customer_level_inf 表 的 数 据 关 联 到 dws 库 中customer_addr_level_aggr 的分区表,分区字段为 etl_date,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyyMMdd),并添加dws_insert_userdws_insert_time、dws_modify_user、dws_modify_time四 列 , 其 中 dws_insert_user 、 dws_modify_user 均 填 写 “ user1 ” ,dws_insert_time、dws_modify_time 均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用 hivecli 统计最新分区中得数据总量,将结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下。
任务二:离线指标计算
1、 编写 Scala 工程代码,根据 dwd 的 fact_order_master 表最新分区关联fact_order_detail 表,计算所有订单中各商品所有订单(若该订单存在“已退款”状态则该订单不做计算,其余情况都参与计算)总销售金额(购买商品单价*购买商品数量)排名,并将计算结果按照下述表结构写入 clickhouse的 ds_result 库的 sales_amount_rank 表。然后在 Linux 的 clickhouse 命令行中根据 sales_rank 升序查询前 5 行,将 SQL 语句与执行结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】中对应的任务序号下;sales_amount_rank 表结构:
2、 编写 Scala 工程代码,根据 dwd 的登录日志表 dwd.log_customer_login,求login_time 字段值为 2022-08-10 的最近连续三周登录的用户数,并将计算结果按照下述表结构写入 clickhouse 的 ds_result 库的 continuous_3week表。然后在 Linux 的 clickhouse 命令行中根据 active_total 降序查询,将SQL 语句与执行结果截图粘贴至客户端桌面【Release\模块 C 提交结果.docx】
中对应的任务序号下。continuous_3week 表结构:
date_range: 例:假设统计 2022 年 9 月 8 日的连续三周登录用户数,则该字段值应该为 2022-08-22_2022-09-11。
模块 D:数据可视化(15 分)
环境说明:
数据接口地址及接口描述详见各模块服务端说明。
任务一:用玫瑰图展示各地区消费能力
编写 Vue 工程代码,根据接口,用基础南丁格尔玫瑰图展示 2020 年各地区的消费总额占比,同时将用于图表展示的数据结构在浏览器的 console 中进行打印输出将图表可视化结果和浏览器 console 打印结果分别截图并粘贴至客户端桌面
【Release\模块 D 提交结果.docx】中对应的任务序号下。
任务二:用折柱混合图展示省份平均消费额和地区平均消费额
编写 Vue 工程代码,根据接口,用折柱混合图展示 2020 年各省份平均消费额(四舍五入保留两位小数)和地区平均消费额(四舍五入保留两位小数)的对比情况,柱状图展示平均消费额最高的 5 个省份,折线图展示这 5 个省所在的地区的平均消费额变化,同时将用于图表展示的数据结构在浏览器的 console 中进行打印输出,将图表可视化结果和浏览器 console 打印结果分别截图并粘贴至客户端桌面【Release\模块 D 提交结果.docx】中对应的任务序号下。
模块 E:综合分析(10 分)
任务一:详细分析 Flink 中 Checkpoint 的 Barrier 协议如何确保
Checkpoint 的一致性。
将内容编写至客户端桌面【Release\模块 E 提交结果.docx】中对应的任务序号下。
任务二:在高吞吐量场景中,State Backend 的存储可能成为瓶颈。
如何优化 RocksDB Backend 的性能,降低 Checkpoint 延迟?
将内容编写至客户端桌面【Release\模块 E 提交结果.docx】中对应的任务序号下。
任务三:Fair Scheduler 如何解决高优先级任务长时间等待资源?
将内容编写至客户端桌面【Release\模块 E 提交结果.docx】中对应的任务序号下。
附录:补充说明
命令行截图样例(保证清晰)
表结构说明
MySQL 数据库中已自带注释,自行连接使用工具查看。
若 IDEA 运行代码时候出现
scalac: No ‘scala-library*.jar’ in Scala compiler classpath in Scala
SDK Maven: org.scala-lang:scala-library:2.12.0
则需要在 Flie->Project Structure->Project Settings->Libraries->添加 scala的包
(2.12 大版本一致即可)。