2024 年河南省职业院校 技能大赛高职组 "大数据分析与应用" 赛项任务书(二))
-
- 背景描述:
-
-
- [模块 A:数据采集(15 分)](#模块 A:数据采集(15 分))
- 任务一:离线数据采集
- 任务二:实时数据采集
-
- [模块 B:实时数据处理(25 分)](#模块 B:实时数据处理(25 分))
- [模块 C:离线数据处理(30 分)](#模块 C:离线数据处理(30 分))
- [模块 D:数据可视化(15 分)](#模块 D:数据可视化(15 分))
- [模块 E:综合分析(10 分)](#模块 E:综合分析(10 分))
-
-
- [任务一:MySQL 数据库事务](#任务一:MySQL 数据库事务)
- [任务二:Flink 的反压机制](#任务二:Flink 的反压机制)
- [任务三:Spark 执行计划](#任务三:Spark 执行计划)
-
- 附录:补充说明
- 需要培训私信博主,资源环境也可以!!
背景描述:
大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。
因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hudi、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。
模块 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 数据。
任务一:实时数据清洗
编写 Java 代码 ,使用 Flink 消费 Kafka 中 Topic 为 ods_mall_log 和ods_mall_data 的数据并进行相应的数据统计计算(使用 Processing Time)。
1、 使用 Flink 消费 Kafka 中 topic 为 ods_mall_data 的数据,根据数据中不同的 表 将 数 据 分 别 分 发 至 kafka 的 DWD 层 的 fact_order_master 、fact_order_detail 的 Topic 中(只获取 data 的内容,具体的内容格式请自查,其分区数均为 2),其他的表则无需处理。使用 Kafka 自带的消费者消费 fact_order_master(Topic)的前 1 条数据,将结果截图粘贴至客户端桌面【Release\模块 B 提交结果.docx】中对应的任务序号下;fact_order_master 表结构,存储位置:Kafka,存储格式: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:离线数据处理(30 分)
环境说明:
服务端登录地址详见各模块服务端说明。
补充说明:
各节点可通过 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_userdwd_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_userdwd_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 partitionsdwd.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_master_offline 数据结构如下:
5、 抽 取 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】中对应的任务序号下;ods:order_detail_offline 数据结构如下:

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 执行 show partitions dwd.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_user、dws_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 年最高 10 个省份平均消费额(四舍五入保留两位小数),同时将用于图表展示的数据结构在浏览器的console 中进行打印输出,将图表可视化结果和浏览器 console 打印结果分别截图并粘贴至客户端桌面【Release\模块 D 提交结果.docx】中对应的任务序号下。
任务二:用折柱混合图展示省份平均消费额和地区平均消费额
编写 Vue 工程代码,根据接口,用折柱混合图展示 2020 年各省份平均消费额(四舍五入保留两位小数)和地区平均消费额(四舍五入保留两位小数)的对比情况,柱状图展示平均消费额最高的 5 个省份,折线图展示这 5 个省所在的地区的平均消费额变化,同时将用于图表展示的数据结构在浏览器的 console 中进行打印输出,将图表可视化结果和浏览器 console 打印结果分别截图并粘贴至客户端桌面【Release\模块 D 提交结果.docx】中对应的任务序号下。
模块 E:综合分析(10 分)
任务一:MySQL 数据库事务
MySQL 是企业生产环境中常运用的开源数据库,其相关事务在实际操作中十分重要,请列出 MySQL 数据库事务的四大特性以及事务的隔离级别。将内容编写至客户端桌面【Release\模块 E 提交结果.docx】中对应的任务序号下。
任务二:Flink 的反压机制
在使用 Flink 进行实时计算时通常出现反压问题,为确定具体问题所在,我们通常需要查看 Flink 的 Web 界面的 Metrics 菜单栏,其中可以添加关注的度量(指标)来确定是上游还是下游出现反压,我们所添加的度量有哪些。将内容编写至客户端桌面【Release\模块 E 提交结果.docx】中对应的任务序号下。
任务三:Spark 执行计划
Spark 执行计划是 Spark 根据输入的 SQL 语句或者算子,经过优化器生成的一个步骤序列,即将 SQL 语句等转换为一系列可供操作系统可执行步骤从而对数据进行处理,从而实现 SQL 语句或算子的最终的功能,请写出 spark 生成执行计划的具体流程(即从算子/SQL 代码到 RDD 的转换流程)。将内容编写至客户端桌面【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 大版本一致即可)。
需要培训私信博主,资源环境也可以!!



