2025年广东省职业院校技能大赛高职组“大数据应用开发”赛项任务书(三)
文章目录
任务 A:大数据平台搭建(容器环境)(15 分)
环境说明:
子任务一:Hadoop 完全分布式安装配置
本任务需要使用 root 用户完成相关配置,安装 Hadoop 需要配置前置环境。命令中要求使用绝对路径,具体要求如下:
1、 从 虚 拟 机 bigdata-spark 的 /opt/software 目 录 下 将 安 装 包hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz 复制到容器 master中的/opt/software 路径中(若路径不存在,则需新建),将 master 节点 JDK 安装包解压到/opt/module 路径中(若路径不存在,则需新建),将 JDK解压命令复制并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
2、 修改容器中~/.bashrc 文件,设置 JDK 环境变量并使其生效,配置完毕后在 Master 节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
3、 请完成 host 相关配置,将三个节点分别命名为 master、slave1、slave2,并做免密登录,用 scp 命令并使用绝对路径从 master 复制 JDK 解压后的安装文件到 slave1、slave2 节点(若路径不存在,则需新建),并配置 slave1、 slave2 相关环境变量,将全部 scp 复制 JDK 的命令复制并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
4、 在 master 将 Hadoop 解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至 slave1、slave2 中,其中 master、slave1、slave2 节点均作为 datanode,配置好相关环境,初始化 Hadoop 环境 namenode,将初始化命令及初始化结果截图,截取初始化结果日志最后 20 行(需包含出现成功格式化提示的行),粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
5、 启动 Hadoop 集群(包括 hdfs 和 yarn),使用 jps 命令查看 master 节点与 slave1 节点、slave2 节点的 Java 进程,将 jps 命令与结果截图粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下。
子任务二:Zookeeper 集群安装和配置
本任务需要使用 root 用户完成相关配置,具体要求如下:
1、 从 虚 拟 机 bigdata-spark 的 /opt/software 目 录 下 将 安 装 包apache-zookeeper-3.5.7-bin.tar.gz 复 制 到 容 器 master 中 的/opt/software 路径中(若路径不存在,则需新建),将 master 节点Zookeeper安装包解压到/opt/module 目录下,将解压命令复制并粘贴至物理机桌面
【Release\任务 A 提交结果.docx】中对应的任务序号下;
2、 在 master 容器中,进行 Zookeeper 集群配置(需在 Zookeeper 的目录下创建 zkdata 目录),拷贝已经配置好的安装包到 slave1 和 slave2 相应目录下,将全部 scp 复制已配置的 Zookeeper 的命令和截图复制并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
3、 分别在 master、slave1、slave2 启动 Zookeeper 服务,并分别在三个节点上查看各自角色,截取查看每个节点 Zookeeper 角色的 5 行记录,粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
子任务三:Kafka 集群安装配置
本任务需要使用 root 用户完成相关配置,且安装和配置好 Zookeeper 环境。具体要求如下:
1、 从 虚 拟 机 bigdata-spark 的 /opt/software 目 录 下 将 安 装 包 kafka_2.12-2.4.1.tgz 复制到容器 master 中的/opt/software 路径中(若路径不存在, 则需新建), 将 master 节点 Zookeeper 安装包解压到/opt/module 目录下,将解压命令复制并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
2、 在master 容器中,进行kafka 集群配置,拷贝已经配置好的安装包到slave1和 slave2 相应目录下,将全部 scp 复制已配置 kafka 命令和截图复制并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
3、 分别在 master、slave1、slave2 启动 kafka 服务,使用 jps 分别在三个节查看对应的服务进程。在 master 容器节点上创建一个主题, 名称为 kafkaTest,并使用描述命令查看该主题信息。将创建主题成功、查看完整主题信息的命令和截图复制和粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
任务 B:离线数据处理(25 分)
环境说明:
子任务一:数据抽取
编 写 Scala 代 码 , 使 用 Spark 将 MySQL 的 spark_test 库 中 表 supermarket_spark 的 数 据 全 量 抽 取 到 Hive 的 ods 库 中 对 应 表 supermarket_spark 中:
1、 抽取 MySQL 的 spark_test 库中 supermarket_spark 表的全量数据进入 Hive的ods 库中表supermarket_spark,字段排序、类型不变,分区字段为 etldate,类型为 String , 且值为当前比赛日的前一天日期( 分区字段格式为 yyyy-MM-dd ) , 使 用 hive cli 执 行 select count ( * ) from ods.supermarket_spark 命令,将执行结果截图粘贴至物理机桌面【Release\ 任务 B 提交结果.docx】中对应的任务序号下。
子任务二:数据清洗
编写Scala 代码,使用 Spark 将ods 库中相应表数据全量抽取到Hive 的dwd 库对应表中。表中有涉及到 timestamp 类型的,均要求按照 yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加 00:00:00,添 加之后使其符合 yyyy-MM-dd HH:mm:ss。(若 dwd 库中部分表没有数据,正常抽取即可)
抽 取 ods 库 中 supermarket_spark 表 中 全 量 数 据 进 入 dwd 库 表 supermarket_spark 中,分区字段为 etldate,值与 ods 库的相对应表该值相等且要符合以下几个要求:
1、 2023 年没有 2 月 29 日,所以删除 2023 年 2 月 29 日的数据。使用 hive cli执 行 select * from dwd.supermarket_spark where order_date='2023-02-29’查询 supermarket_spark 的数据,将删除前后的查询结果截图粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
2、 如果销售数量有缺失值, 则删除销售数量为缺失值的记录。查询 supermarket_spark 中销售数量为缺失值的记录,将删除前后部分行的结果截图粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
3、 商品单价、销售数量,销售金额存在异常值,(1)删除商品单价和销售金额为 0 的记录,将删除前后部分行的结果截图粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;(2)增加一个字段作为是否退货标识,将销售金额少于 0 的记录标记为 1 表示退货,查询部分行并截图粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
(3)存在单价*数量不等于销售金额的情况,说明实际销售价格可能会有所变化,加一个字段显示实际销售价格。将处理前后部分行的结果截图粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下。
子任务三:指标计算
编写 Scala 代码,使用 Spark 计算相关指标。
注:在指标计算中,不考虑退货的订单,若退货标识为 1,则忽略该条销售记录。
1、 根据 dwd 层表统计每个月每个类型的商品销售的总金额,将计算结果存入MySQL 数据库spark_result 的Consumption_Categories 表(表结构如下)中,然后在 Linux 的 MySQL 命令行中根据年、月升序排序,销售总金额降序排序,查询出前 5 条,将 SQL 语句复制粘贴至物理机桌面【Release\任务 B 提交结果.docx 】中对应的任务序号下, 将执行结果截图粘贴至物理机桌面
【Release\任务 B 提交结果.docx】中对应的任务序号下;
字段 | 类型 | 中文含义 | 备注 |
---|---|---|---|
product_type | text | 商品类型 | |
total_amount | double | 订单总金额 | 当月每个类型商品销售总金额 |
year | int | 年 | 销售的年 |
month | int | 月 | 销售的月 |
2、 根据 dwd 层表查询顾客本次购买金额及本年累计的购买金额,查询结果存入 Hive 的 dws 数据库的 userorderamount 表中(表结构如下),然后使用 hive cli 根据顾客编号、销售日期均为升序排序,查询出前 5 条,将 SQL 语句复制粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
3、 请根据dwd 层表计算出每个月的销售金额和该年所有订单月平均销售金额相比较的结果(“高/低/相同”),存入 Hive 的 dws 数据库的 amountcmp 表(表结构如下)中,然后使用 hive cli 根据年、月份升序排序,查询出前 5 条,将 SQL 语句复制粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下。
字段 | 类型 | 中文含义 | 备注 |
---|---|---|---|
monthconsumption | double | 该月销售总金额 | |
avgconsumption | double | 该年销售月平均金额 | |
comparison | string | 比较结果 | 该大类平均销售金额和所有大类平均销售金额比较结果,值为:高/低/相同 |
year | int | 年 | 销售的年 |
month | int | 月 | 销售的月 |
任务 C:数据挖掘(10 分)
环境说明:
子任务一:特征工程
使用 Idea Spark 工程或 Spark-shell , 读取虚拟机 bigdata-spark 的
/opt/data 目录下的 user_churn_trian.csv:
1、将 Churn 列的值按 True 为 1,False 为 0 做映射,并将列名 Churn 改为 ChurnLabel,使用 Dataframe show 前 5 行,将对应 show 代码以及 show结果的截图粘贴至物理机桌面【Release\任务 C 提交结果.docx】中对应的任务序号下。
2、使用 StringIndexer 对列 International plan 进行特征工程处理,并将该输出列改为 indexedInternationalPlan, 使用 VectorAssembler 对 indexedInternationalPlan、Total day minutes、Total day charge、 Total eve minutes、Total eve charge、Total night minutes、Total intl calls、Total intl charge、Customer service calls 进行特征工程处理,使用 transform 处理,使用 Dataframe 的 show(5, truncate=false)只打印特征列的前 5 行。将对应 show 代码以及 show 结果的截图粘贴至物理机桌面【Release\任务 C 提交结果.docx】中对应的任务序号下。
子任务二:用户流失预测
使用 Idea Spark 工程或 Spark-shell , 读取虚拟机 bigdata-spark 的
/opt/data 目录下的 user_churn_test.csv:
1、 接子任务一,user_churn_trian.csv 划分 70%训练集和 30%测试集,使用 Idea Spark 工程或 Spark-shell,基于随机森林模型(随机森林相关参数可自定义,不做限制)编写完整的用户预测流失程序,使用 70%训练集训练处模型后,使用 30%测试集训练模型,并使用 show(5, truncate =false)输出预测结果中"prediction", “ChurnLabel”, "probability"三列结果。将对应 show 的代码以及 show 结果的截图粘贴至物理机桌面【Release\ 任务 C 提交结果.docx】中对应的任务序号下
2、 结合已训练好的模型,预测虚拟机 bigdata-spark 的/opt/data 目录下的 user_churn_test.csv 新数据集,并使用 show(10, truncate = false)输出预测结果中以下列
“Total day minutes”, “Customer service calls”, “Total intl charge”, “Total day charge”, “Total intl calls”, “prediction”, “probability”
将对应 show 的代码以及 show 结果的截图粘贴至物理机桌面【Release\任务 C 提交结果.docx】中对应的任务序号下
任务 D:数据采集与实时计算(20 分)
环境说明:
子任务一:实时数据采集
1、 在虚拟机 bigdata-spark 使用 Flume 采集实时数据生成器 10050 端口的 socket 数据(实时数据生成器脚本放在虚拟机 bigdata-spark 的/opt/data目录下的flink_data,将数据存入到 Kafka 的Topic 中,Topic 名称为order,分区数为 3,使用 Kafka 自带的消费者消费 order(Topic)中的数据,将前 2 条数据的结果截图粘贴至物理机桌面【Release\任务 D 提交结果.docx】中对应的任务序号下;
注:需在虚拟机 bigdata-spark 先启动已配置好的 Flume、终端启动 netcat 服务(nc -lk 10050)再启动脚本,否则脚本将无法成功启动,启动方式为进入/opt/data 目录执行./flink_data(如果没有权限,请执行授权命令 chmod 777/opt/data/flink_data)
子任务二:使用Flink 处理Kafka 中的数据
编写 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 的科学计数法)。
1、 使用 Flink 消费 Kafka 中的数据,统计商城实时订单数量(需要考虑订单状态,若有取消订单、申请退回、退回完成则不计入订单数量,其他状态则累加),将 key 设置成 totalcount 存入 Redis 中。使用 redis cli 以 get key方式获取 totalcount 值,将结果截图粘贴至物理机桌面【Release\任务 D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔 1 分钟以上,第一次截图放前面,第二次截图放后面;
2、 在任务 1 进行的同时,使用侧边流,使用 Flink 消费 Kafka 中的订单详细信息的数据,实时统计商城中销售量前 3 的商品(不考虑订单状态,不考虑打折),写入 mysql 的 flink_data 库的 top3itemamount 表中。在 mysql shell查询 top3itemamount 表结果,将结果截图粘贴至物理机桌面【Release\任务 D 提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔 1 分钟以上,第一次截图放前面,第二次截图放后面; top3itemamount 的 mysql 表结构 product_id,int 类型,amount,int 类型
任务 E:数据可视化(15 分)
环境说明:
子任务一:用折线图展示销售数量最高的大类名称
编写 Vue 工程代码, 读取虚拟机 bigdata-spark 的/opt/data 目录下的 supermarket_visualization.csv,用柱状图展示 2023~2024 年销售数量最高的 10 个大类名称,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务二:用柱状图展示销售金额最低的中类名称
编写 Vue 工程代码, 读取虚拟机 bigdata-spark 的/opt/data 目录下的 supermarket_visualization.csv,用柱状图展示 2023~2024 年销售金额最低的 10 个中类名称,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务三:用饼状图展示商品类型的销售金额占比
编写 Vue 工程代码, 读取虚拟机 bigdata-spark 的/opt/data 目录下的
supermarket_visualization.csv,用饼状图展示 2023~2024 年商品类型的销售金额占比,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务四:用散点图展示指定月份种类名称的销售数量
编写 Vue 工程代码, 读取虚拟机 bigdata-spark 的/opt/data 目录下的 supermarket_visualization.csv,用基础散点图展示 2024 年 2 月大类名称销售数量变化情况,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务五:用基础南丁格尔玫瑰图展示销售金额最高的中类名称
编写 Vue 工程代码, 读取虚拟机 bigdata-spark 的/opt/data 目录下的 supermarket_visualization.csv,用基础南丁格尔玫瑰图展示 2023~2024 销售金额前 10 的中类名称,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
任务 F:综合分析(10 分)
子任务一:Hudi 支持两种写入模式,分别是Copy - on - Write 和 Merge - on - Read,请阐述这两种模式的原理、优缺点以及适用场景。
Hudi 支持两种写入模式,分别是 Copy - on - Write 和 Merge - on - Read,请阐述这两种模式的原理、优缺点以及适用场景, 将内容编写至客户端桌面
【Release\任务 F 提交结果.docx】中对应的任务序号下。
子任务二:请简述Hadoop 的压缩机制。
请简述 Hadoop 的压缩机制是如何工作的?有哪些常见的压缩格式?将内容编写至客户端桌面【Release\任务 F 提交结果.docx】中对应的任务序号下。
子任务三:请简述YARN 的资源调度算法
请简述 YARN 的资源调度算法有哪些?分别简述其原理,将内容编写至客户端桌面【Release\任务 F 提交结果.docx】中对应的任务序号下。
附录:补充说明
截图样例(保证清晰,选取可视区域截取)
表结构说明
1.1超市订单记录表(supermarket_record)
标签 | 中文含义 | 备注 |
---|---|---|
customer_id | 顾客编号 | |
major_category_id | 大类编码 | |
major_category_name | 大类名称 | |
medium_category_id | 中类编码 | |
medium_category_name | 中类名称 | |
minor_category_id | 小类编码 | |
minor_category_name | 小类名称 | |
sale_date | 销售日期 | |
product_id | 商品编码 | |
specification_model | 规格型号 | |
product_type | 商品类型 | |
unit | 单位 | |
sale_quantity | 销售数量 | |
sale_amount | 销售金额 | |
product_unit_price | 商品单价 | |
is_promotion | 是否促销 |
1.2用户通话数据文件(user_churn_trian.csv)