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】中对应的任务序号下。
子任务二:HBase 分布式安装配置
本任务需要使用 root 用户完成相关配置, 安装 HBase 需要配置 Hadoop 和 ZooKeeper 等前置环境。命令中要求使用绝对路径,具体要求如下:
1、 从 虚 拟 机 bigdata-spark 的 /opt/software 目 录 下 将 安 装 包 apache-zookeeper-3.5.7-bin.tar.gz、hbase-2.2.3-bin.tar.gz 复制到容器 master 中的/opt/software 路径中(若路径不存在,则需新建),将 ZooKeeper、HBase 安装包解压到/opt/module 目录下,将 HBase 的解压命令
复制并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
2、 完成 ZooKeeper 相关部署,用 scp 命令并使用绝对路径从容器 master 复制 HBase 解压后的包分发至 slave1、slave2 中,并修改相关配置,配置好环境变量,在容器 Master 节点中运行命令 hbase version,将全部复制命令复制并将 hbase version 命令的结果截图粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
3、 启动HBase 后在三个节点分别使用jps 命令查看,正常启动后在hbase shell中查看命名空间,将三个节点查看的 hbase 服务进程和查看命名空间的结果截图粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下。
子任务三:ClickHouse 单节点安装配置
本任务需要使用 root 用户完成相关配置,具体要求如下:
1、从虚拟机 bigdata-spark 的/opt/software 将 clickhouse 开头的相关文件复制到容器 master 中的/opt/module/clickhouse 路径中(若路径不存在,则需新建),将全部解压命令复制并粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
2、执行启动各个相关脚本,将全部启动命令复制并将执行结果(截取结果最后倒数 15 行即可)截图粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下;
3、设置远程访问并移除默认监听文件(listen.xml),同时由于 9000 端口被 Hadoop 占用,需要将 clickhouse 的端口更改为 9001,并启动 clickhouse,启动后查看 clickhouse 运行状态,并将启动命令复制、查看运行状态命令复制并将执行结果截图粘贴至物理机桌面【Release\任务 A 提交结果.docx】中对应的任务序号下。
任务 B:离线数据处理(25 分)
环境说明:
子任务一:数据抽取
编 写 Scala 代 码 , 使 用 Spark 将 MySQL 的 spark_test 库 中 表 clothing_sales_spark 的 数 据 全 量 抽 取 到 Hive 的 ods 库 中 对 应 表 clothing_sales_spark 中
1、 抽取 MySQL 的 spark_test 库中 clothing_sales_spark 表的全量数据进入 Hive 的 ods 库中表 clothing sales_spark,字段排序、类型不变,分区字段为 etldate,类型为 String,且值为当前比赛日的前一天日期(分区字段格式为 yyyy-MM-dd),使用 Hive 的 cli 执行 select count(*) from ods. clothing_sales_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 库 中 clothing_sales_spark 表 中 全 量 数 据 进 入 dwd 库 表 clothing_sales_spark 中,分区字段为 etldate,值与 ods 库的相对应表该值相等且要符合以下几个要求:
1、 如果订单折扣率字段有缺失值,则使用(零售单价-折后单价)/零售单价计算 后 进 行 填 充 , 将 查 询 日 销 单 明 细 ID 为 RXDMX-00c28b80a3e60f5c18f69b2a93861112-5 、
RXDMX-1e3f59d9979d8655ce833b9b985c09e9-7 、
RXDMX-1b9d52484507a08ad34e0e71be5031c1-2 的三个订单结果截图粘贴至客户端桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
2、 处理日销单明细 ID 重复的数据,根据交易时间取较新的一条数据,交易信 息老旧一条数据进行删除,请统计出该张表去除重复数据后一共有多少数据,截图粘贴至客户端桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
3、 如果订单明细中的零售单价字段为空,则根据折扣率和折后单价计算零售单价进行填充,请统计处理后宽表中零售单价的平均数,截图粘贴至客户端桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
子任务三:指标计算
编写 Scala 代码,使用 Spark 计算相关指标。
1、 根据 dwd 层表,计算 2024 年每个门店的销售额及平均折扣率,销售额使用折后总价作为标准来计算,统计每个门店的平均折扣率(年度总折扣金额/年度总原价金额) ,将计算结果存入 Hive 的 dws 数据库的 store_sales 表中
(表结构如下),然后使用 hive cli,找出折扣率最高的门店 TOP5,将 SQL语句复制粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务 B 提交结果.docx】中对应的任务序号下;
字段名 | 类型 | 中文含义 | 备注 |
---|---|---|---|
store_name | string | 门店名称 | |
total_sales | double | 销售额 | 统计折后总价 |
avg_discount_rate | double | 平均折扣率 | 每个门店的平均折扣率=该门店年度总折扣金额/该门店年度总原价金额 |
2、 根据 dwd 层表,计算 2023 年每个门店员工的销售额与其业绩表现。销售额使用实际支付总价来衡量。通过 IS_MANAGER 字段,区分门店经理和普通员工,计算每位员工的销售业绩。输出员工姓名、员工所属门店、是否为经理、销售总额,在该门店的排名,并找出每个门店业绩表现最好的 TOP3 个员工,存入 MySQL 数据库 spark_result 的 employee_sales 表中(表结构如下),然后在 Linux 的 MySQL 命令行中,根据门店编码、门店名称、排名均为升序排序,查询出前 10 条,将 SQL 语句复制粘贴至客户端桌面【Release\任务 B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面
【Release\任务 B 提交结果.docx】中对应的任务序号下;
3、 根据 dwd 层表,计算不同门店每个月的销售情况。统计每个月不同门店的销售数量、销售金额,找出销售金额连续增长两个月及以上的门店信息。输出门店名称、销售数量、销售金额、上个月销售金额、上上个月销售金额,月份,将计算结果存入 Hive 的 dws 数据库的 continuous_growth 表中(表结构如下),然后使用 hive cli,根据门店和月份均为升序排序,查询出前 5条,将 SQL 语句复制粘贴至物理机桌面【Release\任务 B 提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务 B提交结果.docx】中对应的任务序号下。
字段名 | 类型 | 中文含义 | 备注 |
---|---|---|---|
store_name | string | 门店名称 | |
total_quantity | int | 销售数量 | |
total_sales_amount | double | 销售金额 | |
Last_month_sales_amount | double | 上个月销售金额 | |
Sales_amount_two_months_ago | double | 上上个月销售金额 | |
Sales_month | string | 月份 | 例如:2023-05 |
任务 C:数据挖掘(10 分)
环境说明:
子任务一:特征工程
使用 Idea Spark 工程或 Spark-shell , 读取虚拟机 bigdata-spark 的
/opt/data 目录下的 credit_train.csv:
1、 使用 VectorAssembler 对 Age、Income、dist_home_val、dist_avg_income、 high_avg 进行特征工程处理,使用 transform 处理,使用 Dataframe 的 show(5, truncate =false)打印特征向量列的前 5 行。将对应 show 代码以及 show 结果的截图粘贴至物理机桌面【Release\任务 C 提交结果.docx】中对应的任务序号下。
2、使用 StandardScaler 对 VectorAssembler 处理后的特征向量列进行标准化处理,使用 transform 处理,使用 Dataframe 的 show(5, truncate =false)打印特征向量列、标准化向量列的前 5 行。将对应 show 代码以及 show 结果的截图粘贴至物理机桌面【Release\任务 C 提交结果.docx】中对应的任务序号下。
子任务二:信用卡支出预测
使用 Idea Spark 工程或 Spark-shell , 读取虚拟机 bigdata-spark 的
/opt/data 目录下的 credit_test.csv:
1、 接子任务一,将 credit_train.csv 划分 80%训练集和 20%测试集,使用 Idea Spark 工程或 Spark-shell,基于 GBTR 梯度提升决策树模型(GBTR 相关参数可自定义,不做限制)编写信用卡支出预测,使用 80%训练集训练处模型后,使用 20%测试集进行预测,并使用 show(5, truncate =false)输出预测结果中 prediction,avg_exp 三列结果。将对应 show 的代码以及 show 结果的截图粘贴至物理机桌面【Release\任务 C 提交结果.docx】中对应的任务序号下
2、 结合已训练好的模型,预测虚拟机 bigdata-spark 的/opt/data 目录下的 credit_test.csv 新数据集,并使用 show(5, truncate = false)输出预测结果中以下列
“Age” “Income”“dist_home_val” “dist_avg_income” “high_avg” “avg_exp” “prediction”
将对应 show 的代码以及 show 结果的截图粘贴至物理机桌面【Release\任务 C 提交结果.docx】中对应的任务序号下
任务 D:数据采集与实时计算(20 分)
环境说明:
子任务一:实时数据采集
1、 在虚拟机 bigdata-spark 使用 Flume 采集/opt/data 目录下实时日志文件 中 的 数 据 ( 如 果 没 有 权 限 , 请 执 行 授 权 命 令 chmod 777
/opt/data/ChangeRecord),将数据存入到 Kafka 的 Topic 中(Topic 名称
分别为 ChangeRecord、ProduceRecord 和 EnvironmentData,分区数为 4),将 Flume 采集 ChangeRecord 主题的配置截图粘贴至客户端桌面【Release\任务 D 提交结果.docx】中对应的任务序号下;
子任务二:使用Flink 处理Kafka 中的数据
编写 Scala 代码,使用 Flink 消费 Kafka 中的数据并进行相应的数据统计计算。
1、 使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中 , 各 设备每 5 分钟 生产 产品总 数, 将结 果存入 HBase 中 的 gyflinkresult:Produce5minAgg 表,rowkey“设备 id-系统时间”(如: 123-2023-01-01 12:06:06.001),将结果截图粘贴至客户端桌面【Release\任务 D 提交结果.docx】中对应的任务序号下;
注:ProduceRecord 主题,每生产一个产品产生一条数据; change_handle_state 字段为 1 代表已经检验,0 代表为检验;时间语义使用 Processing Time。
2、 使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,实时统计每个设备从其他状态转变为“ 运行” 状态的总次数, 将结果存入 MySQL 数据库 spark_industry 的 change_state_other_to_run_agg 表中(表结构如下)。请将任务启动命令复制粘贴至客户端桌面【Release\任务 D 提交结果.docx】中对应的任务序号下,启动 1 分钟后根据 change_machine_id 降序查询 change_state_other_to_run_agg 表并截图粘贴至客户端桌面【Release\任务 D 提交结果.docx】中对应的任务序号下;
注:时间语义使用 Processing Time。 change_state_other_to_run_agg 表:
字段 | 类型 | 中文含义 |
---|---|---|
change_machine_id | int | 设备 id |
last_machine_state | varchar | 上一状态。即触发本次统计的最近一次非运行状态 |
total_change_torun | int | 从其他状态转为运行的总次数 |
in_time | varchar | flink 计算完成时间(yyyy-MM-ddHH:mm:ss) |
任务 E:数据可视化(15 分)
环境说明:
子任务一:用柱状图展示销售数量最高的门店
编 写 Vue 工 程 代 码 , 读 取 虚 拟 机 bigdata-spark 的 /opt/data 目 录 下 clothing_sales_data.csv 文件,用柱状图展示 2023~2024 年销售数量最高的前 5 个门店,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面
【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务二:用柱状图展示销售金额最低的导购人员名称
编 写 Vue 工 程 代 码 , 读 取 虚 拟 机 bigdata-spark 的 /opt/data 目 录 下 clothing_sales_data.csv 文件,用柱状图展示 2023~2024 年销售金额最低的前 10 个导购,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面
【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务三:用折线图展示不同月份销售金额变化
编 写 Vue 工 程 代 码 , 读 取 虚 拟 机 bigdata-spark 的 /opt/data 目 录 下 clothing_sales_data.csv 文件,用折线图展示 2023~2024 年不同月份销售量变化,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可
视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务五:用饼状图展示每个月份销售数量
编 写 Vue 工 程 代 码 , 读 取 虚 拟 机 bigdata-spark 的 /opt/data 目 录 下 clothing_sales_data.csv 文件,用饼状图展示 2024 年中每个月的销售数量,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
子任务五:用基础南丁格尔玫瑰图展示销量最高的导购人员名称
编 写 Vue 工 程 代 码 , 读 取 虚 拟 机 bigdata-spark 的 /opt/data 目 录 下 clothing_sales_data.csv 文件,用基础南丁格尔玫瑰图展示 2023~2024 年销售数量最高的前 5 名导购人员名称,同时将用于图表展示的数据结构在 vscode 终端中进行打印输出,将图表可视化结果和 vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务 E 提交结果.docx】中对应的任务序号下。
任务 F:综合分析(10 分)
子任务一:Kafka 的消费组如何实现消息的负载均衡?
请简述 Kafka 的消费组如何实现消息的负载均衡。将内容编写至客户端桌面
【Release\任务 F 提交结果.docx】中对应的任务序号下。
子任务二:Flink CDC 如何确保数据一致性?
请简述 Flink CDC 如何确保数据一致性,将内容编写至客户端桌面【Release\任务 F 提交结果.docx】中对应的任务序号下。
子任务三:Hive 中如何优化查询性能?
请简述 Hive 中如何优化查询性能,将内容编写至客户端桌面【Release\任务 F提交结果.docx】中对应的任务序号下。
附录:补充说明
截图样例(保证清晰,选取可视区域截取)
表结构说明
1.1门店服装销售数据表(clothing_sales_spark)
标签 | 中文含义 | 备注 |
---|---|---|
daily_sales_detail_id | 日销单明细 ID | |
daily_sales_id | 日销单 ID | |
style_combo_code | 款式组合编码 | |
sales_quantity | 销售数量 | |
retail_unit_price | 零售单价 | |
discount_rate | 折扣率 | |
discounted_unit_price | 折后单价 | |
discounted_total_price | 折后总价 | |
store_code | 门店编码 | |
salesperson_code | 导购员编码 | |
transaction_time | 交易时间 | |
product_combo_name | 款式组合名称 | |
product_code | 款式编码 | |
salesperson_name | 导购员姓名 | |
is_manager | 是否门店经理 | |
store_name | 门店名称 |
1.2信用卡支出数据文件(credit_train.csv)
标签 | 中文含义 | 备注 |
---|---|---|
Age | 年龄 | |
Income | 收入 | |
dist_home_val | 所在小区房屋均价( 万元) | |
dist_avg_income | 当地人均收入 | |
high_avg | 高出当地平均收入 | |
avg_exp | 信用卡支出(元) |