资源简介 2023年全国职业院校技能大赛赛题第03套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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子任务一:Hadoop HA安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz,apache-zookeeper-3.5.7-bin.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),分别将Master节点Hadoop、Zookeeper、JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),其中将JDK、Hadoop解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2并做免密登录,修改容器中/etc/profile文件,设置JDK环境变量并使其生效,分发jdk至slave1、slave2中,均配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;配置好zookeeper,其中zookeeper使用集群模式,分别在master、slave1、slave2作为其集群的节点,使用zkServer.sh status获取zookeeper服务端状态,将命令和结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下(注:只截取三个节点中zookeeper server角色模式为leader的节点);配置好Hadoop HA,请将dfs.ha.namenodes.hadoopcluster设置为nn1、nn2,同时yarn.resourcemanager.ha.rm-ids设置为rm1、rm2,并在Master启动nn1与rm1,在slave1启动nn2与rm2,将master、slave1、slave2均作为datanode,分发hadoop至slave1、slave2中,启动yarn与hdfs的HA集群(Hadoop HA集群),并在Master节点上使用命令分别查看服务nn2与rm2进程状态,并将查看命令及结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;Hadoop HA配置并启动完毕后,使用jps在slave1节点查看服务进程,将查看命令及结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Hive安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-hive-3.1.2-bin.tar.gz、mysql-connector-java-5.1.37.jar复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点Hive安装包解压到/opt/module目录下,将命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;设置Hive环境变量,并使环境变量生效,执行命令hive --version并将命令与结果截图容复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成相关配置并添加所依赖包,将MySQL数据库作为Hive元数据库。初始化Hive元数据,并通过schematool相关命令执行初始化,将初始化结果截图(范围为命令执行结束的最后10行)复制粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务三:Kafka安装配置本任务需要使用root用户完成相关配置,需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-zookeeper-3.5.7-bin.tar.gz、kafka_2.12-2.4.1.tgz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点Zookeeper,Kafka安装包解压到/opt/module目录下,将Kafka解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;配置好ZooKeeper,其中ZooKeeper使用集群模式,分别将Master、slave1、slave2作为其节点(若ZooKeeper已安装配置好,则无需再次配置),配置好Kafka的环境变量,使用kafka-server-start.sh --version查看Kafka的版本内容,并将命令和结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完善其他配置并分发Kafka文件到slave1、slave2中,并在每个节点启动Kafka,创建Topic,其中Topic名称为installtopic,分区数为2,副本数为2,将创建命令和创建成果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过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中。抽取shtd_store库中user_info的增量数据进入Hive的ods库中表user_info。根据ods.user_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中sku_info的增量数据进入Hive的ods库中表sku_info。根据ods.sku_info表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.sku_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_province的增量数据进入Hive的ods库中表base_province。根据ods.base_province表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_province命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_region的增量数据进入Hive的ods库中表base_region。根据ods.base_region表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_region命令,将结果截图粘贴至对应报告中;抽取shtd_store库中order_info的增量数据进入Hive的ods库中表order_info,根据ods.order_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_detail的增量数据进入Hive的ods库中表order_detail,根据ods.order_detail表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中user_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_user_info最新分区现有的数据,根据id合并数据到dwd库中dim_user_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据operate_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,同时若operate_time为空,则用create_time填充,并添加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_user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库sku_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_sku_info最新分区现有的数据,根据id合并数据到dwd库中dim_sku_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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查询表dim_sku_info的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,条件为最新分区的数据,id大于等于15且小于等于20,并且按照id升序排序,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_province表中昨天的分区(子任务一生成的分区)数据,并结合dim_province最新分区现有的数据,根据id合并数据到dwd库中dim_province的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_province最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_region表中昨天的分区(子任务一生成的分区)数据,并结合dim_region最新分区现有的数据,根据id合并数据到dwd库中dim_region的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_region最新分区中,查询该分区中数据的条数,将结果内容截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_info表昨天的分区(子任务一生成的分区)数据抽取到dwd库中fact_order_info的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,同时若operate_time为空,则用create_time填充,并添加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.fact_order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_detail表昨天的分区(子任务一中生成的分区)数据抽取到dwd库中fact_order_detail的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,并添加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.fact_order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算编写Scala代码,使用Spark计算相关指标。注:在指标计算中,不考虑订单信息表中order_status字段的值,将所有订单视为有效订单。计算订单金额或订单总金额时只使用final_total_amount字段。需注意dwd所有的维表取最新的分区。本任务基于以下2、3、4小题完成,使用Azkaban完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;根据dwd层表统计每个省每月下单的数量和下单的总金额,并按照year,month,region_id进行分组,按照total_amount降序排序,形成sequence值,将计算结果存入Hive的dws数据库province_consumption_day_aggr表中(表结构如下),然后使用hive cli根据订单总数、订单总金额、省份表主键均为降序排序,查询出前5条,在查询时对于订单总金额字段将其转为bigint类型(避免用科学计数法展示),将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注province_id int 省份表主键province_name string 省份名称region_id int 地区主键region_name string 地区名称total_amount double 订单总金额 当月订单总金额total_count int 订单总数 当月订单总数sequence int 次序year int 年 订单产生的年,为动态分区字段month int 月 订单产生的月,为动态分区字段请根据dws层表province_consumption_day_aggr计算出每个省份2020年4月的平均订单金额和该省所在地区平均订单金额相比较结果(“高/低/相同”),存入MySQL数据库shtd_result的provinceavgcmpregion表中(表结构如下),然后在Linux的MySQL命令行中根据省份表主键、省平均订单金额、地区平均订单金额均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注provinceid int 省份表主键provincename text 省份名称provinceavgconsumption double 该省平均订单金额regionid int 地区表主键regionname text 地区名称regionavgconsumption double 地区平均订单金额 该省所在地区平均订单金额comparison text 比较结果 省平均订单金额和该省所在地区平均订单金额比较结果,值为:高/低/相同根据dws层表来计算每个地区2020年订单金额前3省份,依次存入MySQL数据库shtd_result的regiontopthree表中(表结构如下),然后在Linux的MySQL命令行中根据地区表主键升序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注regionid int 地区表主键regionname text 地区名称provinceids text 省份表主键 用,分割显示前三省份的idprovincenames text 省份名称 用,分割显示前三省份的nameprovinceamount text 省份名称 用,分割显示前三省份的订单金额(需要去除小数部分,使用四舍五入)例如:3 华东地区 21,27,11 上海市,江苏省,浙江省 100000,100,10任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程剔除订单信息表与订单详细信息表中用户id与商品id不存在于现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。据Hive的dwd库中相关表或MySQL数据库shtd_store中订单相关表(order_detail、order_info、sku_info),对用户购买过的商品进行去重,将其转换为以下格式:第一列为用户id mapping,第二列为用户购买过的商品id mapping,按照user_id与sku_id进行升序排序,输出前5行,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注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:00:891:11:21:3根据第1小题的结果,对其进行聚合,其中对sku_id进行one-hot转换,将其转换为以下格式矩阵:第一列为用户id,其余列名为商品id,按照用户id进行升序排序,展示矩阵第一行前5列数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。字段 类型 中文含义 备注user_id double 客户keysku_id0 double 用户是否购买过商品1 若用户购买过该商品,则值为1,否则为0sku_id1 double 用户是否购买过商品2 若用户购买过该商品,则值为1,否则为0sku_id2 double 用户是否购买过商品3 若用户购买过该商品,则值为1,否则为0.....结果格式如下:---------------第一行前5列结果展示为---------------0.0,1.0,0.0,0.0,0.0子任务二:推荐系统根据子任务一的结果,对其进行SVD分解,对数据进行降维保留前5个奇异值信息,根据该用户已购买的商品分别与未购买的商品计算余弦相似度再进行累加求均值,将均值最大的5件商品id进行输出作为推荐使用。将输出结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。结果格式如下:------------------------推荐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)任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用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的科学计数法)。使用Flink消费Kafka中的数据,实时统计商城中消费额前2的用户(需要考虑订单状态,若有取消订单、申请退回、退回完成则不计入订单消费额,其他的相加),将key设置成top2userconsumption存入Redis中(value使用String数据格式,value为前2的用户信息并且外层用[]包裹,其中按排序依次存放为该用户id:用户名称:消费总额,用逗号分割,其中用户名称为user_info表中的name字段,可从MySQL中获取)。使用redis cli以get key方式获取top2userconsumption值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面(如有中文,需在redis-cli中展示中文);示例如下:top2userconsumption:[1:张三:10020,42:李四:4540]在任务1进行的同时,使用侧边流,计算每分钟内状态为取消订单占所有订单的占比,将key设置成cancelrate存入Redis中,value存放取消订单的占比(为百分比,保留百分比后的一位小数,四舍五入,例如12.1%)。使用redis cli以get key方式获取cancelrate值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,监控order_status字段为取消订单的数据,将数据存入HBase数据库(namespace)shtd_result的order_info表中,rowkey为id的值,然后在Linux的HBase shell命令行中查询列consignee,并查询出任意5条,将执行结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下。表空间为:shtd_result,表为order_info,列族为:info字段 类型 注释rowkey string HBase的主键,值为idid bigintconsignee stringconsignee_tel stringfinal_total_amount doubleorder_status stringuser_id bigintdelivery_address stringorder_comment stringout_trade_no stringtrade_body stringcreate_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 stringparent_order_id bigintimg_url stringprovince_id intbenefit_reduce_amount double任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。子任务一:用柱状图展示各地区消费额的中位数编写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】中对应的任务序号下。任务F:综合分析(10分)子任务一:请简述Spark中共享变量的基本原理和用途。请简述Spark中共享变量的基本原理和用途,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请简述Flink资源管理中Task Slot的概念。请简述你对Task Slot的理解,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:分析地区销售状况。在任务E中,根据相关的展示数据,请分析购买力较强的前三个地区,可从该地区的省份维度进行详细说明。将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第10套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述工业互联网是工业全要素、全产业链、全价值链的全面连接,是人、机、物、工厂互联互通的新型工业生产制造服务体系,是互联网从消费领域向生产领域、从虚拟经济向实体经济拓展的核心载体,是建设现代化经济体系、实现高质量发展和塑造全球产业竞争力的关键支撑,工业大数据则是工业互联网实现工业要素互联之后的核心价值创造者 随着大数据行业的发展,工业数据收集呈现时间维度不断延长、数据范围不断扩大、数据粒度不断细化的趋势 以上三个维度的变化使得企业所积累的数据量以加速度的方式在增加,最终构成了工业大数据的集合 为完成工业大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hudi、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的密码均为123456子任务一:Hadoop HA安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz,apache-zookeeper-3.5.7-bin.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),分别将Master节点Hadoop、ZooKeeper、JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),其中将JDK、Hadoop解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2并做免密登录,修改容器中/etc/profile文件,设置JDK环境变量并使其生效,分发jdk至slave1、slave2中,均配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;配置好zookeeper,其中zookeeper使用集群模式,分别在master、slave1、slave2作为其集群的节点,使用zkServer.sh status获取zookeeper服务端状态,将命令和结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下(注:只截取三个节点中zookeeper server角色模式为leader的节点);配置好Hadoop HA,请将dfs.ha.namenodes.hadoopcluster设置为nn1、nn2,同时yarn.resourcemanager.ha.rm-ids设置为rm1、rm2,并在Master启动nn1与rm1,在slave1启动nn2与rm2,将master、slave1、slave2均作为datanode,分发hadoop至slave1、slave2中,启动yarn与hdfs的HA集群(Hadoop HA集群),并在Master节点上使用命令分别查看服务nn2与rm2进程状态,并将查看命令及结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;Hadoop HA配置并启动完毕后,使用jps在slave1节点查看服务进程,将查看命令及结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Flume安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-flume-1.7.0-bin.tar.gz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将Master节点Flume安装包解压到/opt/module目录下,将解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完善相关配置,配置Flume环境变量,并使环境变量生效,执行命令flume-ng version并将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Flume传输Hadoop日志(namenode或datanode日志),查看HDFS中/tmp/flume目录下生成的内容,将查看命令及结果(至少5条结果)截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务三:ClickHouse单节点安装配置本任务需要使用root用户完成相关配置,具体要求如下:从宿主机/opt目录下将clickhouse开头的相关文件复制到容器Master中的/opt/module/clickhouse路径中(若路径不存在,则需新建),将全部解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;执行启动各个相关脚本,将全部启动命令复制并将执行结果(截取结果最后倒数15行即可)截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;设置远程访问并移除默认监听文件(listen.xml),同时由于9000端口被Hadoop占用,需要将clickhouse的端口更改为9001,并启动clickhouse,启动后查看clickhouse运行状态,并将启动命令复制、查看运行状态命令复制并将执行结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。子任务一:数据抽取编写Scala代码,使用Spark将MySQL库中表EnvironmentData,ChangeRecord,BaseMachine,MachineData,ProduceRecord全量抽取到Hudi的hudi_gy_ods库(路径为/user/hive/warehouse/hudi_gy_ods.db)中对应表environmentdata,changerecord,basemachine, machinedata, producerecord中。抽取MySQL的shtd_industry库中EnvironmentData表的全量数据进入Hudi的hudi_gy_ods库中表environmentdata,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用InPutTime,EnvoId作为主键。使用spark-sql的cli执行show partitions ods.environmentdata命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ChangeRecord表的全量数据进入Hudi的hudi_gy_ods库中表changerecord,字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用ChangeEndTime,ChangeID和ChangeMachineID作为联合主键。使用spark-sql的cli执行select count(*) from ods.changerecord命令,将cli的执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中BaseMachine表的全量数据进入Hudi的hudi_gy_ods库中表basemachine,字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用MachineAddDate,BaseMachineID为主键。使用spark-sql的cli执行show partitions ods.basemachine命令,将spark-sql的cli的执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ProduceRecord表的全量数据进入Hudi的hudi_gy_ods库中表producerecord,剔除ProducePrgCode字段,其余字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用ProduceCodeEndTime,ProduceRecordID和ProduceMachineID为联合主键。使用spark-sql的cli执行show partitions ods.producerecord命令,将spark-sql的cli的执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中MachineData表的全量数据进入Hudi的hudi_gy_ods库中表machinedata,字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用MachineRecordDate,MachineRecordID为主键。使用spark-sql的cli执行show partitions ods.machinedata命令,将cli的执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hudi的hudi_gy_dwd库(路径为/user/hive/warehouse/hudi_gy_dwd.db)中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中environmentdata的全量数据进入Hudi的dwd库中表fact_environment_data,分区字段为etldate且值与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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照envoid降序排序,查询前5条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中changerecord的全量数据进入Hudi的dwd库中表fact_change_record,分区字段为etldate且值与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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照change_machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中basemachine的全量数据进入Hudi的dwd库中表dim_machine。分区字段为etldate且值与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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照base_machine_id升序排序,查询dim_machine前2条数据,将结果截图粘贴至对应报告中;抽取ods库中producerecord的全量数据进入Hudi的dwd库中表fact_produce_record,分区字段为etldate且值与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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照produce_machine_id升序排序,查询fact_produce_record前2条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中machinedata的全量数据进入Hudi的dwd库中表fact_machine_data。分区字段为etldate且值与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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算本任务基于以下2、3、4小题完成,使用DolphinScheduler完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;编写scala代码,使用Spark根据hudi_gy_dwd层的fact_machine_data表统计出每日每台设备,状态为“运行”的时长(若运行无结束时间,则需根据时间判断这个设备的运行状态的下一个状态是哪条数据,将下一个状态的数据的时间置为这个设备运行状态的结束时间,如果设备数据的运行状态不存在下一个状态,则该设备这个阶段数据的运行状态不参与计算,即该设备的这个阶段数据的运行状态时长按0计算),将结果数据写入hudi_gy_dws层的表machine_data_total_time中,然后使用spark-sql的cli根据machine_id降序和machine_record_date升序排序查询前5条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;dws.machine_data_total_time:字段 类型 中文含义 备注machine_id int 设备idmachine_record_date string 状态日期 如:2021-10-01total_time int 一天运行总时长 秒编写scala代码,使用Spark根据hudi_gy_dws层表machine_data_total_time,计算每日运行时长前三的设备(若存在运行时长相同的数据时应全部输出,例如有两条并列第二,则第三名次不变,总共输出四条数据)。将计算结果写入ClickHouse数据库shtd_industry的machine_data_total_time_top3表中(表结构如下),然后在Linux的ClickHouse命令行中根据查询所有数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;machine_data_total_time_top3:字段 类型 中文含义 备注date_day varchar 日期 如:2021-10-01first_id int 第一 一天运行总时长第一second_id int 第二 一天运行总时长第二tertiary_id int 第三 一天运行总时长第二first_time int 第一的时长 秒second_time int 第二的时长 秒tertiary_time int 第三的时长 秒编写scala代码,使用Spark根据hudi_gy_dwd层的fact_produce_record表,基于全量历史数据计算各设备生产一个产品的平均耗时,produce_code_end_time值为1900-01-01 00:00:00的数据为脏数据,需要剔除,并以produce_record_id和ProduceMachineID为联合主键进行去重(注:fact_produce_record表中,一条数据代表加工一个产品,produce_code_start_time字段为开始加工时间,produce_code_end_time字段为完成加工时间),将设备每个产品的耗时与该设备平均耗时作比较,保留耗时高于平均值的产品数据,将得到的数据写入ClickHouse数据库shtd_industry的machine_produce_per_avgtime表中(表结构如下),然后在Linux的ClickHouse命令行中根据设备id降序排序查询前3条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;machine_produce_per_avgtime:字段 类型 中文含义 备注produce_record_id int 生产记录id 每生产一件产品产生一条数据produce_machine_id int 设备idproducetime int 该产品耗时produce_per_avgtime int 设备生产一个产品平均耗时 单位:秒任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程根据dwd库中fact_machine_data表(或MySQL的shtd_industry库中MachineData表),根据以下要求转换:获取最大分区(MySQL不用考虑)的数据后,首先解析列machine_record_data(MySQL中为MachineRecordData)的数据(数据格式为xml,采用dom4j解析,解析demo在客户端/home/ubuntu/Documents目录下),并获取每条数据的主轴转速,主轴倍率,主轴负载,进给倍率,进给速度,PMC程序号,循环时间,运行时间,有效轴数,总加工个数,已使用内存,未使用内存,可用程序量,注册程序量等相关的值(若该条数据没有相关值,则按下表设置默认值),同时转换machine_record_state字段的值,若值为报警,则填写1,否则填写0,以下为表结构,将数据保存在dwd.fact_machine_learning_data,使用cli按照machine_record_id升序排序,查询dwd.fact_machine_learning_data前1条数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。dwd.fact_machine_learning_data表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_id double 设备idmachine_record_state double 设备状态 默认0.0machine_record_mainshaft_speed double 主轴转速 默认0.0machine_record_mainshaft_multiplerate double 主轴倍率 默认0.0machine_record_mainshaft_load double 主轴负载 默认0.0machine_record_feed_speed double 进给倍率 默认0.0machine_record_feed_multiplerate double 进给速度 默认0.0machine_record_pmc_code double PMC程序号 默认0.0machine_record_circle_time double 循环时间 默认0.0machine_record_run_time double 运行时间 默认0.0machine_record_effective_shaft double 有效轴数 默认0.0machine_record_amount_process double 总加工个数 默认0.0machine_record_use_memory double 已使用内存 默认0.0machine_record_free_memory double 未使用内存 默认0.0machine_record_amount_use_code double 可用程序量 默认0.0machine_record_amount_free_code double 注册程序量 默认0.0machine_record_date timestamp 记录日期dwd_insert_user stringdwd_insert_time timestampdwd_modify_user stringdwd_modify_time timestamp子任务二:报警预测根据子任务一的结果,建立随机森林(随机森林相关参数可自定义,不做限制),使用子任务一的结果训练随机森林模型,然后再将hudi中dwd.fact_machine_learning_data_test(该表字段含义与dwd.fact_machine_learning_data表相同,machine_record_state列值为空,表结构自行查看)转成向量,预测其是否报警将结果输出到MySQL数据库shtd_industry中的ml_result表中(表结构如下)。在Linux的MySQL命令行中查询出machine_record_id为1、8、20、28和36的5条数据,将SQL语句复制并粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。ml_result表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_record_state double 设备状态 报警为1,其他状态则为0任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集/data_log目录下实时日志文件中的数据,将数据存入到Kafka的Topic中(Topic名称分别为ChangeRecord、ProduceRecord和EnvironmentData,分区数为4),将Flume采集ChangeRecord主题的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;编写新的Flume配置文件,将数据备份到HDFS目录/user/test/flumebackup下,要求所有主题的数据使用同一个Flume配置文件完成,将Flume的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用Flink处理Kafka中的数据编写Scala代码,使用Flink消费Kafka中的数据并进行相应的数据统计计算。使用Flink消费Kafka中ChangeRecord主题的数据,实时统计每个设备从其他状态转变为“运行”状态的总次数,将结果存入MySQL数据库shtd_industry的change_state_other_to_run_agg表中(表结构如下)。请将任务启动命令复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动1分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并截图,启动2分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并再次截图,将两次截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;注:时间语义使用Processing Time。change_state_other_to_run_agg表:字段 类型 中文含义change_machine_id int 设备idlast_machine_state varchar 上一状态。即触发本次统计的最近一次非运行状态total_change_torun int 从其他状态转为运行的总次数in_time varchar flink计算完成时间(yyyy-MM-dd HH:mm:ss)使用Flink消费Kafka中ChangeRecord主题的数据,每隔1分钟输出最近3分钟的预警次数最多的设备,将结果存入Redis中,key值为“warning_last3min_everymin_out”,value值为“窗口结束时间,设备id”(窗口结束时间格式:yyyy-MM-dd HH:mm:ss)。使用redis cli以HGETALL key方式获取warning_last3min_everymin_out值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;注:时间语义使用Processing Time。使用Flink消费Kafka中EnvironmentData主题的数据,监控各环境检测设备数据,当温度(Temperature字段)持续3分钟高于38度时记录为预警数据,将结果存入Redis中,key值为“env_temperature_monitor”,value值为“设备id-预警信息生成时间,预警信息”(预警信息生成时间格式:yyyy-MM-dd HH:mm:ss)。使用redis cli以HGETALL key方式获取env_temperature_monitor值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需要Flink启动运行6分钟以后再截图。注:时间语义使用Processing Time。value示例:114-2022-01-01 14:12:19,设备114连续三分钟温度高于38度请及时处理!中文内容及格式必须为示例所示内容。同一设备3分钟只预警一次。任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。 注:所有数据排序按照接口返回数据顺序处理即可,不用特意排序。子任务一:用折线图展示PM2.5浓度变化编写Vue工程代码,根据接口,用折线图展示PM2.5浓度变化,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用饼状图展示每日各状态总时长编写Vue工程代码,根据接口,用饼状图展示每日各状态总时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务三:用柱状图展示每日所有车间各设备平均运行时长编写Vue工程代码,根据接口,用柱状图展示每日所有车间各设备平均运行时长(秒,四舍五入保留两位小数),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务四:用单轴散点图展示设备运行时长编写Vue工程代码,根据接口,用单轴散点图展示设备运行时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务五:用单轴散点图展示各设备加工每件产品所需时长编写Vue工程代码,根据接口,用单轴散点图展示各设备加工每件产品所需时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:Kafka中的数据如何保证不丢失?在任务D中使用到了Kafka,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请简述HBase的rowkey设计原则。请简要概述HBase的rowkey的重要性并说明在设计rowkey时应遵循哪些原则,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:数据仓库中怎么处理缓慢变化维,有哪几种方式?在任务B的数据仓库的设计过程中,会出现缓慢变化维的问题,缓慢变化维是指一些维度表的数据不是静态的,而是会随着时间而缓慢地变化,在数仓设计中有哪些方式应对这些问题?将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第04套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述工业互联网是工业全要素、全产业链、全价值链的全面连接,是人、机、物、工厂互联互通的新型工业生产制造服务体系,是互联网从消费领域向生产领域、从虚拟经济向实体经济拓展的核心载体,是建设现代化经济体系、实现高质量发展和塑造全球产业竞争力的关键支撑,工业大数据则是工业互联网实现工业要素互联之后的核心价值创造者 随着大数据行业的发展,工业数据收集呈现时间维度不断延长、数据范围不断扩大、数据粒度不断细化的趋势 以上三个维度的变化使得企业所积累的数据量以加速度的方式在增加,最终构成了工业大数据的集合 为完成工业大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hudi、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的root密码均为123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从Master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在Master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看Master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Spark on Yarn安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件spark-3.1.1-bin-hadoop3.2.tgz复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Spark包解压到/opt/module路径中(若路径不存在,则需新建),将完整解压命令复制粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置Spark环境变量并使环境变量生效,在/opt目录下运行命令spark-submit --version,将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成on yarn相关配置,使用spark on yarn 的模式提交$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar 运行的主类为org.apache.spark.examples.SparkPi,将运行结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下(截取Pi结果的前后各5行)。(运行命令为:spark-submit --master yarn --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar)子任务三:Hudi安装配置本任务需要使用root用户完成相关配置,具体要求如下:从宿主机/opt目录下将maven相关安装包复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将maven相关安装包解压到/opt/module/目录下(若路径不存在,则需新建)并配置maven本地库为/opt/software/RepMaven/,配置maven的环境变量,并在/opt/下执行mvn -v,将运行结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;从宿主机/opt目录下将Hudi相关安装包复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Hudi相关安装包解压到/opt/module/目录下(若路径不存在,则需新建),将命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成解压安装及配置后使用maven对Hudi进行构建(spark3.1,scala-2.12),编译完成后与spark集成,集成后使用spark-shell操作hudi,将spark-shell启动使用spark-shell运行下面给到的案例,并将最终查询结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。(提示:编译需要替换以下内容:1.将hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java替换;将packaging/hudi-spark-bundle/pom.xml替换;3.将packaging/hudi-utilities-bundle/pom.xml替换)import org.apache.hudi.QuickstartUtils._import scala.collection.JavaConversions._import org.apache.spark.sql.SaveMode._import org.apache.hudi.DataSourceReadOptions._import org.apache.hudi.DataSourceWriteOptions._import org.apache.hudi.config.HoodieWriteConfig._import org.apache.mon.model.HoodieRecordval tableName = "hudi_trips_cow"val basePath = "file:///tmp/hudi_trips_cow"val dataGen = new DataGeneratorval inserts = convertToStringList(dataGen.generateInserts(10))val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2))df.write.format("hudi").options(getQuickstartWriteConfigs).option(PRECOMBINE_FIELD_OPT_KEY, "ts").option(RECORDKEY_FIELD_OPT_KEY, "uuid").option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").option(TABLE_NAME, tableName).mode(Overwrite).save(basePath)val tripsSnapshotDF = spark.read.format("hudi").load(basePath + "/*/*/*/*")tripsSnapshotDF.createOrReplaceTempView("hudi_trips_snapshot")spark.sql("select fare, begin_lon, begin_lat, ts from hudi_trips_snapshot where fare > 20.0").show()任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。子任务一:数据抽取编写Scala代码,使用Spark将MySQL库中表ChangeRecord,BaseMachine,MachineData, ProduceRecord全量抽取到Hudi的hudi_gy_ods库(路径为/user/hive/warehouse/hudi_gy_ods.db)中对应表changerecord,basemachine, machinedata,producerecord中。抽取MySQL的shtd_industry库中ChangeRecord表的全量数据进入Hudi的hudi_gy_ods库中表changerecord,字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用ChangeEndTime,ChangeID和ChangeMachineID作为联合主键。使用spark-sql的cli执行select count(*) from hudi_gy_ods.changerecord命令,将spark-sql的cli执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中BaseMachine表的全量数据进入Hudi的hudi_gy_ods库中表basemachine,字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用MachineAddDate,BaseMachineID为主键。使用spark-sql的cli执行show partitions hudi_gy_ods.basemachine命令,将cli的执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ProduceRecord表的全量数据进入Hudi的hudi_gy_ods库中表producerecord,剔除ProducePrgCode字段,其余字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用ProduceCodeEndTime,ProduceRecordID和ProduceMachineID为联合主键。使用spark-sql的cli执行show partitions hudi_gy_ods.producerecord命令,将spark-sql的cli的执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中MachineData表的全量数据进入Hudi的hudi_gy_ods库中表machinedata,字段排序、类型不变,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。PRECOMBINE_FIELD使用MachineRecordDate,MachineRecordID为主键。使用spark-sql的cli执行show partitions hudi_gy_ods.machinedata命令,将cli的执行结果分别截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hudi的hudi_gy_dwd库(路径为/user/hive/warehouse/hudi_gy_dwd.db)中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取hudi_gy_ods库中changerecord的全量数据进入Hudi的hudi_gy_dwd库中表fact_change_record,分区字段为etldate且值与hudi_gy_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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照change_machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取hudi_gy_ods库中basemachine的全量数据进入Hudi的hudi_gy_dwd库中表dim_machine。分区字段为etldate且值与hudi_gy_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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照base_machine_id升序排序,查询dim_machine前2条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取hudi_gy_ods库中producerecord的全量数据进入Hudi的hudi_gy_dwd库中表fact_produce_record,分区字段为etldate且值与hudi_gy_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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照produce_machine_id升序排序,查询fact_produce_record前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取hudi_gy_ods库中machinedata的全量数据进入Hudi的hudi_gy_dwd库中表fact_machine_data。分区字段为etldate且值与hudi_gy_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均填写当前操作时间,并进行数据类型转换。使用spark-sql的cli按照machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算本任务基于以下2、3、4小题完成,使用DolphinScheduler完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;编写Scala代码,使用Spark根据dwd_ds_hudi层的fact_change_record表统计每个月(change_start_time的月份)、每个设备、每种状态的时长,若某状态当前未结束(即change_end_time值为空)则该状态不参与计算。计算结果存入ClickHouse数据库shtd_industry的machine_state_time表中(表结构如下),然后在Linux的ClickHouse命令行中根据设备id、状态持续时长均为降序排序,查询出前10条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注machine_id int 设备idchange_record_state varchar 状态duration_time varchar 持续时长(秒) 当月该状态的时长和year int 年 状态产生的年month int 月 状态产生的月编写Scala代码,使用Spark根据dwd_ds_hudi层的fact_change_record表关联dim_machine表统计每个车间中所有设备运行时长(即设备状态为“运行”)的中位数在哪个设备(为偶数时,两条数据原样保留输出),若某个设备运行状态当前未结束(即change_end_time值为空)则该状态不参与计算,计算结果存入ClickHouse数据库shtd_industry的machine_running_median表中(表结构如下),然后在Linux的ClickHouse命令行中根据所属车间、设备id均为降序排序,查询出前5条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注machine_id int 设备idmachine_factory int 所属车间total_running_time int 运行总时长 结果以秒为单位编写Scala代码,使用Spark根据dwd_ds_hudi层的fact_produce_record表,基于全量历史数据计算各设备生产一个产品的平均耗时,produce_code_end_time值为1900-01-01 00:00:00的数据为脏数据,需要剔除(注:fact_produce_record表中,一条数据代表加工一个产品,produce_code_start_time字段为开始加工时间,produce_code_end_time字段为完成加工时间),将设备每个产品的耗时与该设备平均耗时作比较,保留耗时高于平均值的产品数据,将得到的数据写入ClickHouse数据库shtd_industry的machine_produce_per_avgtime表中(表结构如下),然后在Linux的ClickHouse命令行中根据设备id降序排序查询前3条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;machine_produce_per_avgtime:字段 类型 中文含义 备注produce_record_id int 生产记录id 每生产一件产品产生一条数据produce_machine_id int 设备idproducetime int 该产品耗时produce_per_avgtime int 设备生产一个产品平均耗时 单位:秒任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程根据dwd库中fact_machine_data表(或MySQL的shtd_industry库中MachineData表),根据以下要求转换:获取最大分区(MySQL不用考虑)的数据后,首先解析列machine_record_data(MySQL中为MachineRecordData)的数据(数据格式为xml,采用dom4j解析,解析demo在客户端/home/ubuntu/Documents目录下),并获取每条数据的主轴转速,主轴倍率,主轴负载,进给倍率,进给速度,PMC程序号,循环时间,运行时间,有效轴数,总加工个数,已使用内存,未使用内存,可用程序量,注册程序量等相关的值(若该条数据没有相关值,则按下表设置默认值),同时转换machine_record_state字段的值,若值为报警,则填写1,否则填写0,以下为表结构,将数据保存在dwd.fact_machine_learning_data,使用cli按照machine_record_id升序排序,查询dwd.fact_machine_learning_data前1条数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。dwd.fact_machine_learning_data表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_id double 设备idmachine_record_state double 设备状态 默认0.0machine_record_mainshaft_speed double 主轴转速 默认0.0machine_record_mainshaft_multiplerate double 主轴倍率 默认0.0machine_record_mainshaft_load double 主轴负载 默认0.0machine_record_feed_speed double 进给倍率 默认0.0machine_record_feed_multiplerate double 进给速度 默认0.0machine_record_pmc_code double PMC程序号 默认0.0machine_record_circle_time double 循环时间 默认0.0machine_record_run_time double 运行时间 默认0.0machine_record_effective_shaft double 有效轴数 默认0.0machine_record_amount_process double 总加工个数 默认0.0machine_record_use_memory double 已使用内存 默认0.0machine_record_free_memory double 未使用内存 默认0.0machine_record_amount_use_code double 可用程序量 默认0.0machine_record_amount_free_code double 注册程序量 默认0.0machine_record_date timestamp 记录日期dwd_insert_user stringdwd_insert_time timestampdwd_modify_user stringdwd_modify_time timestamp子任务二:报警预测根据子任务一的结果,建立随机森林(随机森林相关参数可自定义,不做限制),使用子任务一的结果训练随机森林模型,然后再将hudi中dwd.fact_machine_learning_data_test(该表字段含义与dwd.fact_machine_learning_data表相同,machine_record_state列值为空,表结构自行查看)转成向量,预测其是否报警将结果输出到MySQL数据库shtd_industry中的ml_result表中(表结构如下)。在Linux的MySQL命令行中查询出machine_record_id为1、8、20、28和36的5条数据,将SQL语句复制并粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。ml_result表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_record_state double 设备状态 报警为1,其他状态则为0任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集/data_log目录下实时日志文件中的数据,将数据存入到Kafka的Topic中(Topic名称分别为ChangeRecord、ProduceRecord和EnvironmentData,分区数为4),将Flume采集ChangeRecord主题的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;编写新的Flume配置文件,将数据备份到HDFS目录/user/test/flumebackup下,要求所有主题的数据使用同一个Flume配置文件完成,将Flume的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用Flink处理Kafka中的数据编写Scala工程代码,使用Flink消费Kafka中的数据并进行相应的数据统计计算。使用Flink消费Kafka中ProduceRecord主题的数据,统计在已经检验的产品中,各设备每5分钟生产产品总数,将结果存入Redis中,key值为“totalproduce”,value值为“设备id,最近五分钟生产总数”。使用redis cli以HGETALL key方式获取totalproduce值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔5分钟以上,第一次截图放前面,第二次截图放后面;注:ProduceRecord主题,生产一个产品产生一条数据;change_handle_state字段为1代表已经检验,0代表未检验;时间语义使用Processing Time。使用Flink消费Kafka中ChangeRecord主题的数据,当某设备30秒状态连续为“预警”,输出预警信息。当前预警信息输出后,最近30秒不再重复预警(即如果连续1分钟状态都为“预警”只输出两次预警信息),将结果存入Redis中,key值为“warning30sMachine”,value值为“设备id,预警信息”。使用redis cli以HGETALL key方式获取warning30sMachine值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;注:时间使用change_start_time字段,忽略数据中的change_end_time不参与任何计算。忽略数据迟到问题。Redis的value示例:115,2022-01-01 09:53:10:设备115 连续30秒为预警状态请尽快处理!(2022-01-01 09:53:10 为change_start_time字段值,中文内容及格式必须为示例所示内容。)使用Flink消费Kafka中ChangeRecord主题的数据,统计每3分钟各设备状态为“预警”且未处理的数据总数,将结果存入MySQL数据库shtd_industry的threemin_warning_state_agg表中(追加写入,表结构如下)。请将任务启动命令复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动且数据进入后按照设备id升序排序查询threemin_warning_state_agg表进行截图,第一次截图后等待3分钟再次查询并截图,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。threemin_warning_state_agg表:字段 类型 中文含义change_machine_id int 设备idtotalwarning int 未被处理预警的数据总数window_end_time varchar 窗口结束时间(yyyy-MM-dd HH:mm:ss)注:时间语义使用Processing Time。任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。 注:所有数据排序按照接口返回数据顺序处理即可,不用特意排序。子任务一:用柱状图展示设备历史各个状态持续时长编写Vue工程代码,根据接口,用柱状图展示接口所有数据中各设备各个状态持续时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用柱状图展示每日所有车间各设备平均运行时长编写Vue工程代码,根据接口,用柱状图展示每日所有车间各设备平均运行时长(秒,四舍五入保留两位小数),每日里的所有设备按照接口返回的数据顺序展示即可,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务三:用折线图展示某设备每日运行时长编写Vue工程代码,根据接口,用折线图展示设备OP160每日的运行时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务四:用条形图展示每日各设备产量编写Vue工程代码,根据接口,用条形图展示每日各设备产量,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务五:用折柱混合图展示设备日均产量和所在车间日均产量编写Vue工程代码,根据接口,用折柱混合图展示设备日均产量(四舍五入保留两位小数)和所在车间日均产量(四舍五入保留两位小数),其中柱状图展示各设备的日均产量,折线图展示该设备所在车间的日均产量,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:请简述ZooKeeper的选举策略,leader和follower的区别。请概述ZooKeeper的选举策略、leader和follower的区别,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请简述MapReduce的Shuffle过程。请简述MapReduce的Shuffle过程,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:请根据可视化图表做以下分析。如果你是工厂技术人员,通过可视化结果你将会对工厂设备优化(不限于该角度,考生自行扩展分析角度)做出哪些建议,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第08套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述工业互联网是工业全要素、全产业链、全价值链的全面连接,是人、机、物、工厂互联互通的新型工业生产制造服务体系,是互联网从消费领域向生产领域、从虚拟经济向实体经济拓展的核心载体,是建设现代化经济体系、实现高质量发展和塑造全球产业竞争力的关键支撑,工业大数据则是工业互联网实现工业要素互联之后的核心价值创造者 随着大数据行业的发展,工业数据收集呈现时间维度不断延长、数据范围不断扩大、数据粒度不断细化的趋势 以上三个维度的变化使得企业所积累的数据量以加速度的方式在增加,最终构成了工业大数据的集合 为完成工业大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的密码均为123456 MySQL已在容器的Master中安装完毕,用户名/密码为root/123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-2.7.7.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Kafka安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件zookeeper-3.4.6.tar.gz、kafka_2.12-2.0.0.tgz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将Master节点Zookeeper,Kafka安装包解压到/opt/module目录下,将Kafka解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;配置好zookeeper,其中zookeeper使用集群模式,分别将master、slave1、slave2作为其节点(若zookpeer已安装配置好,则无需再次配置),配置好Kafka的环境变量,使用kafka-server-start.sh --version查看Kafka的版本内容,并将命令和结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完善其他配置并分发Kafka文件到slave1、slave2中,并在每个节点启动Kafka,创建Topic,其中Topic名称为installtopic,分区数为2,副本数为2,将创建命令和创建成果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务三:Hive安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-hive-2.3.4-bin.tar.gz、mysql-connector-java-5.1.47.jar复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将容器master节点Hive安装包解压到/opt/module目录下,将命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;设置Hive环境变量,并使环境变量生效,执行命令hive --version并将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成相关配置并添加所依赖包,将MySQL数据库作为Hive元数据库。初始化Hive元数据,并通过schematool相关命令执行初始化,将初始化结果截图(范围为命令执行结束的最后10行)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。子任务一:数据抽取编写Scala代码,使用Spark将MySQL库中表EnvironmentData,ChangeRecord,BaseMachine,MachineData,ProduceRecord全量抽取到Hive的ods库中对应表environmentdata,changerecord,basemachine, machinedata, producerecord中。抽取MySQL的shtd_industry库中EnvironmentData表的全量数据进入Hive的ods库中表environmentdata,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.environmentdata命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ChangeRecord表的全量数据进入Hive的ods库中表changerecord,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.changerecord命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中BaseMachine表的全量数据进入Hive的ods库中表basemachine,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.basemachine命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ProduceRecord表的全量数据进入Hive的ods库中表producerecord,剔除ProducePrgCode字段,其余字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.producerecord命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中MachineData表的全量数据进入Hive的ods库中表machinedata,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.machinedata命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Hive SQL代码,将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中environmentdata的全量数据进入Hive的dwd库中表fact_environment_data,分区字段为etldate且值与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按照envoid降序排序,查询前5条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中changerecord的全量数据进入Hive的dwd库中表fact_change_record,抽取数据之前需要对数据根据changeid和changemachineid进行联合去重处理,分区字段为etldate且值与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按照change_machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中basemachine的全量数据进入Hive的dwd库中表dim_machine,抽取数据之前需要对数据根据basemachineid进行去重处理。分区字段为etldate且值与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按照base_machine_id升序排序,查询dim_machine前2条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中producerecord的全量数据进入Hive的dwd库中表fact_produce_record,分区字段为etldate且值与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按照produce_machine_id升序排序,查询fact_produce_record前2条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中machinedata的全量数据进入Hive的dwd库中表fact_machine_data。分区字段为etldate且值与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按照machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算本任务基于以下2、3、4小题完成,使用DolphinScheduler完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;编写Scala代码,使用Spark根据dwd层的fact_environment_data表,统计检测设备(baseid)每月的PM10的检测平均浓度,然后将每个设备的每月平均浓度与厂内所有检测设备每月检测结果的平均浓度做比较(结果值为:高/低/相同),计算结果存入MySQL数据库shtd_industry的machine_runningAVG_compare表中(表结构如下),然后在Linux的MySQL命令行中根据检测设备ID降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注base_id int 检测设备IDmachine_avg varchar 单设备检测平均值factory_avg varchar 厂内所有设备平均值comparison varchar 比较结果 高/低/相同env_date_year varchar 检测年份 如:2021env_date_month varchar 检测月份 如:12编写Scala代码,使用Spark根据dwd层的fact_change_record表统计每个月(change_start_time的月份)、每个设备、每种状态的时长,若某状态当前未结束(即change_end_time值为空)则该状态不参与计算,计算结果存入MySQL数据库shtd_industry的machine_state_time表中(表结构如下),然后在Linux的MySQL命令行中根据设备id、状态持续时长均为降序排序,查询出前10条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注machine_id int 设备idchange_record_state varchar 状态duration_time varchar 持续时长(秒) 当月该状态的时长和year int 年 状态产生的年month int 月 状态产生的月编写Scala代码,使用Spark根据dwd层的fact_change_record表关联dim_machine表统计每个车间中所有设备运行时长(即设备状态为“运行”)的中位数在哪个设备(为偶数时,两条数据原样保留输出),若某个设备运行状态当前未结束(即change_end_time值为空)则该状态不参与计算,计算结果存入MySQL数据库shtd_industry的machine_running_median表中(表结构如下),然后在Linux的MySQL命令行中根据所属车间、设备id均为降序排序,查询出前5条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注machine_id int 设备idmachine_factory int 所属车间total_running_time int 运行总时长 结果以秒为单位任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程根据dwd库中fact_machine_data表(或MySQL的shtd_industry库中MachineData表),根据以下要求转换:获取最大分区(MySQL不用考虑)的数据后,首先解析列machine_record_data(MySQL中为MachineRecordData)的数据(数据格式为xml,采用dom4j解析,解析demo在客户端/home/ubuntu/Documents目录下),并获取每条数据的主轴转速,主轴倍率,主轴负载,进给倍率,进给速度,PMC程序号,循环时间,运行时间,有效轴数,总加工个数,已使用内存,未使用内存,可用程序量,注册程序量等相关的值(若该条数据没有相关值,则按下表设置默认值),同时转换machine_record_state字段的值,若值为报警,则填写1,否则填写0,以下为表结构,将数据保存在dwd.fact_machine_learning_data,使用hive cli按照machine_record_id升序排序,查询dwd.fact_machine_learning_data前1条数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。dwd.fact_machine_learning_data表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_id double 设备idmachine_record_state double 设备状态 默认0.0machine_record_mainshaft_speed double 主轴转速 默认0.0machine_record_mainshaft_multiplerate double 主轴倍率 默认0.0machine_record_mainshaft_load double 主轴负载 默认0.0machine_record_feed_speed double 进给倍率 默认0.0machine_record_feed_multiplerate double 进给速度 默认0.0machine_record_pmc_code double PMC程序号 默认0.0machine_record_circle_time double 循环时间 默认0.0machine_record_run_time double 运行时间 默认0.0machine_record_effective_shaft double 有效轴数 默认0.0machine_record_amount_process double 总加工个数 默认0.0machine_record_use_memory double 已使用内存 默认0.0machine_record_free_memory double 未使用内存 默认0.0machine_record_amount_use_code double 可用程序量 默认0.0machine_record_amount_free_code double 注册程序量 默认0.0machine_record_date timestamp 记录日期dwd_insert_user stringdwd_insert_time timestampdwd_modify_user stringdwd_modify_time timestamp子任务二:报警预测根据子任务一的结果,建立随机森林(随机森林相关参数可自定义,不做限制),使用子任务一的结果训练随机森林模型,然后再将hive中dwd.fact_machine_learning_data_test(该表字段含义与dwd.fact_machine_learning_data表相同,machine_record_state列值为空,表结构自行查看)转成向量,预测其是否报警将结果输出到MySQL数据库shtd_industry的ml_result表中(表结构如下)。在Linux的MySQL命令行中查询出machine_record_id为1、8、20、28和36的5条数据,将SQL语句复制并粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。ml_result表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_record_state double 设备状态 报警为1,其他状态则为0任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集/data_log目录下实时日志文件中的数据,将数据存入到Kafka的Topic中(Topic名称分别为ChangeRecord、ProduceRecord和EnvironmentData,分区数为4),将Flume采集ChangeRecord主题的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;编写新的Flume配置文件,将数据备份到HDFS目录/user/test/flumebackup下,要求所有主题的数据使用同一个Flume配置文件完成,将Flume的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用Flink处理Kafka中的数据编写Scala代码,使用Flink消费Kafka中的数据并进行相应的数据统计计算。使用Flink消费Kafka中EnvironmentData主题的数据,监控各环境检测设备数据,当温度(Temperature字段)持续3分钟高于38度时记录为预警数据。将结果存入Redis中,key值为“env_temperature_monitor”,value值为“设备id-预警信息生成时间,预警信息”(预警信息生成时间格式:yyyy-MM-dd HH:mm:ss)。使用redis cli以HGETALL key方式获取env_temperature_monitor值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需要Flink启动运行6分钟以后再截图;注:时间语义使用Processing Time。value示例:114-2022-01-01 14:12:19,设备114连续三分钟温度高于38度请及时处理!中文内容及格式必须为示例所示内容。同一设备3分钟只预警一次。使用Flink消费Kafka中ChangeRecord主题的数据,每隔1分钟输出最近3分钟的预警次数最多的设备。将结果存入Redis中,key值为“warning_last3min_everymin_out”,value值为“窗口结束时间,设备id”(窗口结束时间格式:yyyy-MM-dd HH:mm:ss)。使用redis cli以HGETALL key方式获取warning_last3min_everymin_out值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;注:时间语义使用Processing Time。使用Flink消费Kafka中ChangeRecord主题的数据,实时统计每个设备从其他状态转变为“运行”状态的总次数。将结果存入MySQL数据库shtd_industry的change_state_other_to_run_agg表中(表结构如下)。请将任务启动命令复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动1分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动2分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并再次截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。注:时间语义使用Processing Time。change_state_other_to_run_agg表:字段 类型 中文含义change_machine_id int 设备idlast_machine_state varchar 上一状态。即触发本次统计的最近一次非运行状态total_change_torun int 从其他状态转为运行的总次数in_time varchar flink计算完成时间(yyyy-MM-dd HH:mm:ss)任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。 注:所有数据排序按照接口返回数据顺序处理即可,不用特意排序。子任务一:用饼状图展示每日各状态总时长编写Vue工程代码,根据接口,用饼状图展示每日各状态总时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用柱状图展示设备历史各个状态持续时长编写Vue工程代码,根据接口,用柱状图展示接口所有数据中各设备各个状态持续时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务三:用单轴散点图展示各设备加工每件产品所需时长编写Vue工程代码,根据接口,用单轴散点图展示各设备加工每件产品所需时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务四:用散点图展示环境湿度变化编写Vue工程代码,根据接口,用基础散点图展示设备所处环境的湿度(Humidity)的变化,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务五:用折柱混合图展示设备日均产量和所在车间日均产量编写Vue工程代码,根据接口,用折柱混合图展示设备日均产量(四舍五入保留两位小数)和所在车间日均产量(四舍五入保留两位小数),其中柱状图展示各设备的日均产量,折线图展示该设备所在车间的日均产量,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:Hadoop有哪些类型的调度器?简要说明其工作方法。简要描述Hadoop有哪些类型的调度器并简要说明其工作方法,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请简述Spark中共享变量的基本原理和用途。请简述Spark中共享变量的基本原理和用途,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:请根据可视化部分设备各状态时长等信息进行以下分析。根据设备各状态运行时长等信息,分析哪些设备使用率高,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第02套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hudi、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的root密码均为123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从Master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在Master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看Master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Flume安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-flume-1.9.0-bin.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点Flume安装包解压到/opt/module目录下,将解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完善相关配置,设置Flume环境变量,并使环境变量生效,执行命令flume-ng version并将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Flume传输Hadoop日志(namenode或datanode日志),查看HDFS中/tmp/flume目录下生成的内容,将查看命令及结果(至少5条结果)截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务三:Flink on Yarn安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件flink-1.14.0-bin-scala_2.12.tgz复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Flink包解压到路径/opt/module中(若路径不存在,则需新建),将完整解压命令复制粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置Flink环境变量并使环境变量生效。在容器中/opt目录下运行命令flink --version,将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;开启Hadoop集群,在yarn上以per job模式(即Job分离模式,不采用Session模式)运行 $FLINK_HOME/examples/batch/WordCount.jar,将运行结果最后10行截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。示例 :flink run -m yarn-cluster -p 2 -yjm 2G -ytm 2G $FLINK_HOME/examples/batch/WordCount.jar任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。子任务一:数据抽取编写Scala代码,使用Spark将MySQL的shtd_store库中表user_info、sku_info、base_province、base_region、order_info、order_detail的数据增量抽取到Hudi的ods_ds_hudi库(路径为/user/hive/warehouse/ods_ds_hudi.db)的user_info、sku_info、base_province、base_region、order_info、order_detail中。抽取shtd_store库中user_info的增量数据进入Hudi的ods_ds_hudi库中表user_info。根据ods_ds_hudi.user_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加分区,若operate_time为空,则用create_time填充,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中sku_info的增量数据进入Hudi的ods_ds_hudi库中表sku_info。根据ods_ds_hudi.sku_info表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.sku_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_province的增量数据进入Hudi的ods_ds_hudi库中表base_province。根据ods_ds_hudi.base_province表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,create_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.base_province命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_region的增量数据进入Hudi的ods_ds_hudi库中表base_region。根据ods_ds_hudi.base_region表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,create_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.base_region命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_info的增量数据进入Hudi的ods_ds_hudi库中表order_info,根据ods_ds_hudi.order_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_detail的增量数据进入Hudi的ods_ds_hudi库中表order_detail,根据ods_ds_hudi.order_detail表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,create_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hudi的dwd_ds_hudi库(路径为路径为/user/hive/warehouse/dwd_ds_hudi.db)中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods_ds_hudi库中user_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_user_info最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_user_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据operate_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions dwd_ds_hudi.dim_user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods_ds_hudi库sku_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_sku_info最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_sku_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell查询表dim_sku_info的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,条件为最新分区的数据,id大于等于15且小于等于20,并且按照id升序排序,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods_ds_hudi库base_province表中昨天的分区(子任务一生成的分区)数据,并结合dim_province最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_province的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell在表dwd.dim_province最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods_ds_hudi库base_region表中昨天的分区(子任务一生成的分区)数据,并结合dim_region最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_region的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell在表dwd.dim_region最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods_ds_hudi库中order_info表昨天的分区(子任务一生成的分区)数据抽取到dwd_ds_hudi库中fact_order_info的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,同时若operate_time为空,则用create_time填充,并添加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均填写当前操作时间,并进行数据类型转换。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions dwd.fact_order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods_ds_hudi库中order_detail表昨天的分区(子任务一中生成的分区)数据抽取到dwd_ds_hudi库中fact_order_detail的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,并添加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均填写当前操作时间,并进行数据类型转换。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell执行show partitions dwd_ds_hudi.fact_order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算编写Scala代码,使用Spark计算相关指标。注:在指标计算中,不考虑订单信息表中order_status字段的值,将所有订单视为有效订单。计算订单金额或订单总金额时只使用final_total_amount字段。需注意dwd所有的维表取最新的分区。本任务基于以下2、3、4小题完成,使用Azkaban完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;根据dwd层表统计每人每天下单的数量和下单的总金额,存入Hudi的dws_ds_hudi层的user_consumption_day_aggr表中(表结构如下),然后使用spark -shell按照客户主键、订单总金额均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注uuid string 随机字符 随机字符,保证不同即可,作为primaryKeyuser_id int 客户主键user_name string 客户名称total_amount double 订单总金额 当天订单总金额。total_count int 订单总数 当天订单总数。同时可作为preCombineField(作为合并字段时,无意义,因为主键为随机生成)year int 年 订单产生的年,为动态分区字段month int 月 订单产生的月,为动态分区字段day int 日 订单产生的日,为动态分区字段根据dwd_ds_hudi库中的表统计每个省每月下单的数量和下单的总金额,并按照year,month,region_id进行分组,按照total_amount逆序排序,形成sequence值,将计算结果存入Hudi的dws_ds_hudi数据库province_consumption_day_aggr表中(表结构如下),然后使用spark-shell根据订单总数、订单总金额、省份表主键均为降序排序,查询出前5条,在查询时对于订单总金额字段将其转为bigint类型(避免用科学计数法展示),将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注uuid string 随机字符 随机字符,保证不同即可,作为primaryKeyprovince_id int 省份表主键province_name string 省份名称region_id int 地区主键region_name string 地区名称total_amount double 订单总金额 当月订单总金额total_count int 订单总数 当月订单总数。同时可作为preCombineField(作为合并字段时,无意义,因为主键为随机生成)sequence int 次序year int 年 订单产生的年,为动态分区字段month int 月 订单产生的月,为动态分区字段请根据dws_ds_hudi库中的表计算出每个省份2020年4月的平均订单金额和该省所在地区平均订单金额相比较结果(“高/低/相同”),存入ClickHouse数据库shtd_result的provinceavgcmpregion表中(表结构如下),然后在Linux的ClickHouse命令行中根据省份表主键、省平均订单金额、地区平均订单金额均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注provinceid int 省份表主键provincename text 省份名称provinceavgconsumption double 该省平均订单金额regionid int 地区表主键regionname text 地区名称regionavgconsumption double 地区平均订单金额 该省所在地区平均订单金额comparison text 比较结果 省平均订单金额和该省所在地区平均订单金额比较结果,值为:高/低/相同任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程剔除订单信息表与订单详细信息表中用户id与商品id不存在现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。根据Hudi的dwd库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,输出格式如下,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;结果格式如下:-------------------相同种类前10的id结果展示为:--------------------1,2,901,4,5,21,32,91,14,52根据Hudi的dwd库中相关表或MySQL中shtd_store中相关商品表(sku_info),获取id、spu_id、price、weight、tm_id、category3_id 这六个字段并进行数据预处理,对price、weight进行规范化(StandardScaler)处理,对spu_id、tm_id、category3_id进行one-hot编码处理(若该商品属于该品牌则置为1,否则置为0),并按照id进行升序排序,在集群中输出第一条数据前10列(无需展示字段名),将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。字段 类型 中文含义 备注id double 主键price double 价格weight double 重量spu_id#1 double spu_id 1 若属于该spu_id,则内容为1否则为0spu_id#2 double spu_id 2 若属于该spu_id,则内容为1否则为0..... doubletm_id#1 double 品牌1 若属于该品牌,则内容为1否则为0tm_id#2 double 品牌2 若属于该品牌,则内容为1否则为0…… doublecategory3_id#1 double 分类级别3 1 若属于该分类级别3,则内容为1否则为0category3_id#2 double 分类级别3 2 若属于该分类级别3,则内容为1否则为0……结果格式如下:--------------------第一条数据前10列结果展示为:---------------------1.0,0.892346,1.72568,0.0,0.0,0.0,0.0,1.0,0.0,0.0子任务二:推荐系统根据子任务一的结果,计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户id(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),并根据Hudi的dwd库中相关表或MySQL数据库shtd_store中相关表,获取到这10位用户已购买过的商品,并剔除用户6708已购买的商品,通过计算这10位用户已购买的商品(剔除用户6708已购买的商品)与用户6708已购买的商品数据集中商品的余弦相似度累加再求均值,输出均值前5商品id作为推荐使用,将执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。结果格式如下:------------------------推荐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)任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用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的科学计数法)。使用Flink消费Kafka中的数据,统计商城实时订单数量(需要考虑订单状态,若有取消订单、申请退回、退回完成则不计入订单数量,其他状态则累加),将key设置成totalcount存入Redis中。使用redis cli以get key方式获取totalcount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,统计每分钟申请退回订单的数量,将key设置成refundcountminute存入Redis中。使用redis cli以get key方式获取refundcountminute值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,计算每分钟内状态为取消订单占所有订单的占比,将key设置成cancelrate存入Redis中,value存放取消订单的占比(为百分比,保留百分比后的一位小数,四舍五入,例如12.1%)。使用redis cli以get key方式获取cancelrate值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面。任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。子任务一:用柱状图展示各省份消费额的中位数编写Vue工程代码,根据接口,用柱状图展示2020年部分省份所有订单消费额的中位数(前10省份,降序排列,若有小数则四舍五入保留两位),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用玫瑰图展示各地区消费能力编写Vue工程代码,根据接口,用基础南丁格尔玫瑰图展示2020年各地区的消费总额占比,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务三:用折线图展示每年上架商品数量的变化编写Vue工程代码,根据接口,用折线图展示每年上架商品数量的变化情况,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务四:用条形图展示消费总额最高的省份编写Vue工程代码,根据接口,用条形图展示2020年消费总额最高的10个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务五:用折柱混合图展示省份平均消费额和地区平均消费额编写Vue工程代码,根据接口,用折柱混合图展示2020年各省份平均消费额(四舍五入保留两位小数)和地区平均消费额(四舍五入保留两位小数)的对比情况,柱状图展示平均消费额最高的5个省份,折线图展示这5个省所在的地区的平均消费额变化,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:Kafka中的数据如何保证不丢失?在任务D中使用到了Kafka,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请描述HBase的rowkey设计原则。请简要概述HBase的rowkey的重要性并说明在设计rowkey时应遵循哪些原则,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:Spark的数据本地性有哪几种,分别表示什么?在任务B与任务C中使用到了Spark,其中有些JOB运行较慢,有些较快,一部分原因与数据位置和计算位置相关,其数据本地性可以在SparkUI中查看到。请问Spark的数据本地性有哪几种(英文)?分别表示的含义是什么(中文)?将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第01套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的root密码均为123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从Master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在Master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看Master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Spark on Yarn安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件spark-3.1.1-bin-hadoop3.2.tgz复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Spark包解压到/opt/module路径中(若路径不存在,则需新建),将完整解压命令复制粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置Spark环境变量并使环境变量生效,在/opt目录下运行命令spark-submit --version,将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成on yarn相关配置,使用spark on yarn 的模式提交$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar 运行的主类为org.apache.spark.examples.SparkPi,将运行结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下(截取Pi结果的前后各5行)。(运行命令为:spark-submit --master yarn --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar)子任务三:HBase分布式安装配置本任务需要使用root用户完成相关配置,安装HBase需要配置Hadoop和ZooKeeper等前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件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】中对应的任务序号下;完成ZooKeeper相关部署,用scp命令并使用绝对路径从容器master复制HBase解压后的包分发至slave1、slave2中,并修改相关配置,配置好环境变量,在容器Master节点中运行命令hbase version,将全部复制命令复制并将hbase version命令的结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动HBase后在三个节点分别使用jps命令查看,并将结果分别截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;正常启动后在hbase shell中查看命名空间,将查看命名空间的结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过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中。抽取shtd_store库中user_info的增量数据进入Hive的ods库中表user_info。根据ods.user_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中sku_info的增量数据进入Hive的ods库中表sku_info。根据ods.sku_info表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.sku_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_province的增量数据进入Hive的ods库中表base_province。根据ods.base_province表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_province命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_region的增量数据进入Hive的ods库中表base_region。根据ods.base_region表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_region命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_info的增量数据进入Hive的ods库中表order_info,根据ods.order_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_detail的增量数据进入Hive的ods库中表order_detail,根据ods.order_detail表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中user_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_user_info最新分区现有的数据,根据id合并数据到dwd库中dim_user_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据operate_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,同时若operate_time为空,则用create_time填充,并添加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_user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库sku_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_sku_info最新分区现有的数据,根据id合并数据到dwd库中dim_sku_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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查询表dim_sku_info的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,条件为最新分区的数据,id大于等于15且小于等于20,并且按照id升序排序,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_province表中昨天的分区(子任务一生成的分区)数据,并结合dim_province最新分区现有的数据,根据id合并数据到dwd库中dim_province的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_province最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_region表中昨天的分区(子任务一生成的分区)数据,并结合dim_region最新分区现有的数据,根据id合并数据到dwd库中dim_region的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_region最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_info表昨天的分区(子任务一生成的分区)数据抽取到dwd库中fact_order_info的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,同时若operate_time为空,则用create_time填充,并添加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.fact_order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_detail表昨天的分区(子任务一中生成的分区)数据抽取到dwd库中fact_order_detail的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,并添加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.fact_order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算编写Scala代码,使用Spark计算相关指标。注:在指标计算中,不考虑订单信息表中order_status字段的值,将所有订单视为有效订单。计算订单金额或订单总金额时只使用final_total_amount字段。需注意dwd所有的维表取最新的分区。本任务基于以下2、3、4小题完成,使用Azkaban完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;根据dwd层表统计每个省份、每个地区、每个月下单的数量和下单的总金额,存入MySQL数据库shtd_result的provinceeverymonth表中(表结构如下),然后在Linux的MySQL命令行中根据订单总数、订单总金额、省份表主键均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注provinceid int 省份表主键provincename text 省份名称regionid int 地区表主键regionname text 地区名称totalconsumption double 订单总金额 当月订单总金额totalorder int 订单总数 当月订单总数year int 年 订单产生的年month int 月 订单产生的月请根据dwd层表计算出2020年4月每个省份的平均订单金额和所有省份平均订单金额相比较结果(“高/低/相同”),存入MySQL数据库shtd_result的provinceavgcmp表(表结构如下)中,然后在Linux的MySQL命令行中根据省份表主键、该省平均订单金额均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注provinceid int 省份表主键provincename text 省份名称provinceavgconsumption double 该省平均订单金额allprovinceavgconsumption double 所有省平均订单金额comparison text 比较结果 该省平均订单金额和所有省平均订单金额比较结果,值为:高/低/相同根据dwd层表统计在两天内连续下单并且下单金额保持增长的用户,存入MySQL数据库shtd_result的usercontinueorder表(表结构如下)中,然后在Linux的MySQL命令行中根据订单总数、订单总金额、客户主键均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注userid int 客户主键username text 客户名称day text 日 记录下单日的时间,格式为 yyyyMMdd_yyyyMMdd 例如: 20220101_20220102totalconsumption double 订单总金额 连续两天的订单总金额totalorder int 订单总数 连续两天的订单总数任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程剔除订单信息表与订单详细信息表中用户id与商品id不存在现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。根据Hive的dwd库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,输出格式如下,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;结果格式如下:-------------------相同种类前10的id结果展示为:--------------------1,2,901,4,5,21,32,91,14,52根据Hive的dwd库中相关表或MySQL中shtd_store中相关商品表(sku_info),获取id、spu_id、price、weight、tm_id、category3_id 这六个字段并进行数据预处理,对price、weight进行规范化(StandardScaler)处理,对spu_id、tm_id、category3_id进行one-hot编码处理(若该商品属于该品牌则置为1,否则置为0),并按照id进行升序排序,在集群中输出第一条数据前10列(无需展示字段名),将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。字段 类型 中文含义 备注id double 主键price double 价格weight double 重量spu_id#1 double spu_id 1 若属于该spu_id,则内容为1否则为0spu_id#2 double spu_id 2 若属于该spu_id,则内容为1否则为0..... doubletm_id#1 double 品牌1 若属于该品牌,则内容为1否则为0tm_id#2 double 品牌2 若属于该品牌,则内容为1否则为0…… doublecategory3_id#1 double 分类级别3 1 若属于该分类级别3,则内容为1否则为0category3_id#2 double 分类级别3 2 若属于该分类级别3,则内容为1否则为0……结果格式如下:--------------------第一条数据前10列结果展示为:---------------------1.0,0.892346,1.72568,0.0,0.0,0.0,0.0,1.0,0.0,0.0子任务二:推荐系统根据子任务一的结果,计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户id(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),并根据Hive的dwd库中相关表或MySQL数据库shtd_store中相关表,获取到这10位用户已购买过的商品,并剔除用户6708已购买的商品,通过计算这10位用户已购买的商品(剔除用户6708已购买的商品)与用户6708已购买的商品数据集中商品的余弦相似度累加再求均值,输出均值前5商品id作为推荐使用,将执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。结果格式如下:------------------------推荐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)任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用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,订单状态分别为1001:创建订单、1002:支付订单、1003:取消订单、1004:完成订单、1005:申请退回、1006:退回完成。另外对于数据结果展示时,不要采用例如:1.9786518E7的科学计数法)。使用Flink消费Kafka中的数据,统计商城实时订单实收金额(需要考虑订单状态,若有取消订单、申请退回、退回完成则不计入订单实收金额,其他状态的则累加),将key设置成totalprice存入Redis中。使用redis cli以get key方式获取totalprice值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,监控若发现order_status字段为退回完成, 将key设置成totalrefundordercount存入Redis中,value存放用户退款消费额。使用redis cli以get key方式获取totalrefundordercount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,监控若发现order_status字段为取消订单,将数据存入MySQL数据库shtd_result的order_info表中,然后在Linux的MySQL命令行中根据id降序排序,查询列id、consignee、consignee_tel、final_total_amount、feight_fee,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。子任务一:用柱状图展示消费额最高的省份编写Vue工程代码,根据接口,用柱状图展示2020年消费额最高的5个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用柱状图展示消费额最低的省份编写Vue工程代码,根据接口,用柱状图展示2020年消费额最低的5个省份,同时将用于图表展示的数据结构在浏览器的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】中对应的任务序号下。任务F:综合分析(10分)子任务一:Flink有哪些重启策略?各个重启策略如何配置?在任务D中使用到了Flink,Flink在运行job时可能会出现各种问题,从而会导致其失败或者重启,对于类似于网络波动造成的运行失败可以采取相对应重启策略来重试,请问Flink有几种重启策略(中文)?分别怎么配置这些重启策略?将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:Hadoop有哪些类型的调度器?简要说明其工作方法。简要描述Hadoop有哪些类型的调度器并简要说明其工作方法,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:分析下一年度的建仓目的地。根据任务E的图表,分析各省份的经济现状,公司决定挑选3个省份进行仓储建设,请问应该在哪些省份建设?将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第07套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过Asbru工具或SSH客户端进行SSH访问; 相关软件安装包在容器Master节点的/opt/software目录下,请选择对应的安装包进行安装,用不到的可忽略; 所有任务中应用命令必须采用绝对路径; 进入Master节点的方式为 docker exec -it master /bin/bash 进入Slave1节点的方式为 docker exec -it slave1 /bin/bash 进入Slave2节点的方式为 docker exec -it slave2 /bin/bash 三个容器节点的root密码均为123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Flume安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-flume-1.9.0-bin.tar.gz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将master节点Flume安装包解压到/opt/module目录下,将解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完善相关配置设置,配置Flume环境变量,并使环境变量生效,执行命令flume-ng version并将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Flume传输Hadoop日志(namenode或datanode日志),查看HDFS中/tmp/flume目录下生成的内容,将查看命令及结果(至少5条结果)截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务三:ClickHouse单节点安装配置本任务需要使用root用户完成相关配置,具体要求如下:从宿主机/opt目录下将clickhouse开头的相关文件复制到容器Master中的/opt/module/clickhouse路径中(若路径不存在,则需新建),将全部解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;执行启动各个相关脚本,将全部启动命令复制并将执行结果(截取结果最后倒数15行即可)截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;设置远程访问并移除默认监听文件(listen.xml),同时由于9000端口被Hadoop占用,需要将clickhouse的端口更改为9001,并启动clickhouse,启动后查看clickhouse运行状态,并将启动命令复制、查看运行状态命令复制并将执行结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过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中。抽取shtd_store库中user_info的增量数据进入Hive的ods库中表user_info。根据ods.user_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中sku_info的增量数据进入Hive的ods库中表sku_info。根据ods.sku_info表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.sku_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_province的增量数据进入Hive的ods库中表base_province。根据ods.base_province表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_province命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_region的增量数据进入Hive的ods库中表base_region。根据ods.base_region表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_region命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_info的增量数据进入Hive的ods库中表order_info,根据ods.order_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_detail的增量数据进入Hive的ods库中表order_detail,根据ods.order_detail表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中user_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_user_info最新分区现有的数据,根据id合并数据到dwd库中dim_user_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据operate_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,同时若operate_time为空,则用create_time填充,并添加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_user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库sku_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_sku_info最新分区现有的数据,根据id合并数据到dwd库中dim_sku_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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查询表dim_sku_info的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,条件为最新分区的数据,id大于等于15且小于等于20,并且按照id升序排序,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_province表中昨天的分区(子任务一生成的分区)数据,并结合dim_province最新分区现有的数据,根据id合并数据到dwd库中dim_province的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_province最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_region表中昨天的分区(子任务一生成的分区)数据,并结合dim_region最新分区现有的数据,根据id合并数据到dwd库中dim_region的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_region最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_info表昨天的分区(子任务一生成的分区)数据抽取到dwd库中fact_order_info的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,同时若operate_time为空,则用create_time填充,并添加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.fact_order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_detail表昨天的分区(子任务一中生成的分区)数据抽取到dwd库中fact_order_detail的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,并添加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.fact_order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算编写Scala代码,使用Spark计算相关指标。注:在指标计算中,不考虑订单信息表中order_status字段的值,将所有订单视为有效订单。计算订单金额或订单总金额时只使用final_total_amount字段。需注意dwd所有的维表取最新的分区。本任务基于以下2、3、4小题完成,使用Azkaban完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;根据dwd层表统计每个省每月下单的数量和下单的总金额,并按照year,month,region_id进行分组,按照total_amount降序排序,形成sequence值,将计算结果存入Hive的dws数据库的province_consumption_day_aggr表中(表结构如下),然后使用hive cli根据订单总数、订单总金额、省份表主键均为降序排序,查询出前5条,在查询时对于订单总金额字段将其转为bigint类型(避免用科学计数法展示),将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注province_id int 省份表主键province_name string 省份名称region_id int 地区表主键region_name string 地区名称total_amount double 订单总金额 当月订单总金额total_count int 订单总数 当月订单总数sequence int 次序year int 年 订单产生的年,为动态分区字段month int 月 订单产生的月,为动态分区字段根据dwd层的数据,请计算连续两天下单的用户与已下单用户的占比,将结果存入MySQL数据库shtd_result的userrepurchasedrate表中(表结构如下),然后在Linux的MySQL命令行中查询结果数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注purchaseduser int 下单人数 已下单人数repurchaseduser int 连续下单人数 连续两天下单的人数repurchaserate text 百占比 连续两天下单人数/已下单人数百分比(保留1位小数,四舍五入,不足的补0)例如21.1%,或者32.0%根据dwd层的数据,请计算每个省份累计订单量(订单信息表一条算一个记录),然后根据每个省份订单量从高到低排列,将结果打印到控制台(使用spark中的show算子,同时需要显示列名),将执行结果复制并粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;例如:可以考虑首先生成类似的临时表A:province_name Amount(订单量)A省 10122B省 301C省 2333333然后生成结果类似如下:其中C省销量最高,排在第一列,A省次之,以此类推。C省 A省 B省2333333 10122 301提示:可用str_to_map函数减轻工作量任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程剔除订单信息表与订单详细信息表中用户id与商品id不存在于现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。据Hive的dwd库中相关表或MySQL数据库shtd_store中订单相关表(order_detail、order_info、sku_info),对用户购买过的商品进行去重,将其转换为以下格式:第一列为用户id mapping,第二列为用户购买过的商品id mapping,按照user_id与sku_id进行升序排序,输出前5行,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注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:00:891:11:21:3根据第1小题的结果,对其进行聚合,其中对sku_id进行one-hot转换,将其转换为以下格式矩阵:第一列为用户id,其余列名为商品id,按照用户id进行升序排序,展示矩阵第一行前5列数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。字段 类型 中文含义 备注user_id double 客户keysku_id0 double 用户是否购买过商品1 若用户购买过该商品,则值为1,否则为0sku_id1 double 用户是否购买过商品2 若用户购买过该商品,则值为1,否则为0sku_id2 double 用户是否购买过商品3 若用户购买过该商品,则值为1,否则为0.....结果格式如下:---------------第一行前5列结果展示为---------------0.0,1.0,0.0,0.0,0.0子任务二:推荐系统根据子任务一的结果,对其进行SVD分解,对数据进行降维保留前5个奇异值信息,根据该用户已购买的商品分别与未购买的商品计算余弦相似度再进行累加求均值,将均值最大的5件商品id进行输出作为推荐使用。将输出结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。结果格式如下:------------------------推荐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)任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用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的科学计数法)。使用Flink消费Kafka中的数据,统计商城实时订单数量(需要考虑订单表的状态,若有取消订单、申请退回、退回完成则不计入订单数量,其他状态则累加),将key设置成totalcount存入Redis中。使用redis cli以get key方式获取totalcount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,使用Flink消费Kafka中的订单详细信息数据,实时统计商城中消费额前3的商品(不考虑订单状态,不考虑打折),将key设置成top3itemconsumption存入Redis中(value使用String数据格式,value为前3的商品信息并外层用[]包裹,其中按排序依次存放商品id:销售额,并用逗号分割)。使用redis cli以get key方式获取top3itemconsumption值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;示例如下:top3itemconsumption:[1:10020.2,42:4540.0,12:540]采用双流JOIN的方式(本系统稳定,无需担心数据迟到与丢失的问题,建议使用滚动窗口),结合订单信息和订单详细信息(需要考虑订单状态,若有取消订单、申请退回、退回完成则不进行统计),拼接成如下表所示格式,其中包含订单id、订单总金额、商品数,将数据存入HBase数据库(namespace)shtd_result的的orderpositiveaggr表中(表结构如下),然后在Linux的HBase shell命令行中查询出任意5条数据,查询列orderprice、orderdetailcount,将执行结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。表空间为:shtd_result,表为orderpositiveaggr,列族为:info字段 类型 中文含义 备注rowkey string HBase的主键 值为idid bigint 订单idorderprice string 订单总金额 统计订单信息中 final_total_amount字段orderdetailcount string 商品数量总计 统计订单详细信息中 sku_num字段任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。子任务一:用柱状图展示各地区消费额的中位数编写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年最高10个省份平均消费额(四舍五入保留两位小数),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:Flume采集数据会导致数据丢失吗?请简述其原理。请简述Flume数据采集是否会导致数据丢失以及其原理,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:Flink 任务出现很高的延迟,你会如何入手解决类似问题?Flink 任务出现很高的延迟,你会如何入手解决类似问题,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:分析地区销售状况。在任务E中,根据相关的展示数据,请分析购买力较强的前三个地区,可从该地区的省份维度进行详细说明。将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第09套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述工业互联网是工业全要素、全产业链、全价值链的全面连接,是人、机、物、工厂互联互通的新型工业生产制造服务体系,是互联网从消费领域向生产领域、从虚拟经济向实体经济拓展的核心载体,是建设现代化经济体系、实现高质量发展和塑造全球产业竞争力的关键支撑,工业大数据则是工业互联网实现工业要素互联之后的核心价值创造者 随着大数据行业的发展,工业数据收集呈现时间维度不断延长、数据范围不断扩大、数据粒度不断细化的趋势 以上三个维度的变化使得企业所积累的数据量以加速度的方式在增加,最终构成了工业大数据的集合 为完成工业大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的密码均为123456 MySQL已在容器的Master中安装完毕,用户名/密码为root/123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-2.7.7.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:HBase分布式安装配置本任务需要使用root用户完成相关配置,安装HBase需要配置Hadoop和ZooKeeper等前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件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】中对应的任务序号下;完成zookeeper相关部署,用scp命令并使用绝对路径从容器master复制HBase解压后的包分发至slave1、slave2中,并修改相关配置,配置好环境变量,在容器Master节点中运行命令hbase version,将全部复制命令复制并将hbase version命令的结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动HBase后在三个节点分别使用jps命令查看,并将结果分别截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;正常启动后在hbase shell中查看命名空间,将查看命名空间的结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务三:Hive安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-hive-2.3.4-bin.tar.gz、mysql-connector-java-5.1.47.jar复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将容器master节点Hive安装包解压到/opt/module目录下,将命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;设置Hive环境变量,并使环境变量生效,执行命令hive --version并将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成相关配置并添加所依赖包,将MySQL数据库作为Hive元数据库。初始化Hive元数据,并通过schematool相关命令执行初始化,将初始化结果截图(范围为命令执行结束的最后10行)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。子任务一:数据抽取编写Scala代码,使用Spark将MySQL库中表EnvironmentData,ChangeRecord,BaseMachine,MachineData,ProduceRecord全量抽取到Hive的ods库中对应表environmentdata,changerecord,basemachine, machinedata, producerecord中。抽取MySQL的shtd_industry库中EnvironmentData表的全量数据进入Hive的ods库中表environmentdata,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.environmentdata命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ChangeRecord表的全量数据进入Hive的ods库中表changerecord,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.changerecord命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中BaseMachine表的全量数据进入Hive的ods库中表basemachine,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.basemachine命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ProduceRecord表的全量数据进入Hive的ods库中表producerecord,剔除ProducePrgCode字段,其余字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.producerecord命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中MachineData表的全量数据进入Hive的ods库中表machinedata,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.machinedata命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Hive SQL代码,将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中environmentdata的全量数据进入Hive的dwd库中表fact_environment_data,分区字段为etldate且值与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按照envoid降序排序,查询前5条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中changerecord的全量数据进入Hive的dwd库中表fact_change_record,抽取数据之前需要对数据根据changeid和changemachineid进行联合去重处理,分区字段为etldate且值与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按照change_machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中basemachine的全量数据进入Hive的dwd库中表dim_machine,抽取数据之前需要对数据根据basemachineid进行去重处理。分区字段为etldate且值与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按照base_machine_id升序排序,查询dim_machine前2条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中producerecord的全量数据进入Hive的dwd库中表fact_produce_record,分区字段为etldate且值与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按照produce_machine_id升序排序,查询fact_produce_record前2条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中machinedata的全量数据进入Hive的dwd库中表fact_machine_data。分区字段为etldate且值与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按照machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算本任务基于以下2、3、4小题完成,使用DolphinScheduler完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;编写scala代码,使用Spark根据dwd层的fact_produce_record表,基于全量历史增加设备生产一个产品的平均耗时字段(produce_per_avgtime),produce_code_end_time值为1900-01-01 00:00:00的数据为脏数据,需要剔除,并以produce_record_id和ProduceMachineID为联合主键进行去重(注:fact_produce_record表中,一条数据代表加工一个产品,produce_code_start_time字段为开始加工时间,produce_code_end_time字段为完成加工时间),将得到的数据提取下表所需字段然后写入dws层的表machine_produce_per_avgtime中,然后使用hive cli根据设备id降序排序查询前3条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;dws.machine_produce_per_avgtime:字段 类型 中文含义 备注produce_record_id int 生产记录id 每生产一件产品产生一条数据produce_machine_id int 设备idproducetime int 该产品耗时produce_per_avgtime int 设备生产一个产品平均耗时 单位:秒编写scala代码,使用Spark根据dws层的machine_produce_per_avgtime表,获取各设备生产耗时最长的两个产品的用时,将计算结果存入MySQL数据库shtd_industry的machine_produce_timetop2表中(表结构如下),然后在Linux的MySQL命令行中根据设备id降序排序,查询出前2条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注machine_id int 设备idfirst_time int 耗时最长second_time int 耗时次长编写Hive SQL代码,根据dwd层的fact_environment_data表,统计检测设备(BaseID)每月的平均湿度(Humidity),然后将每个设备的每月平均湿度与厂内所有检测设备每月检测结果的平均湿度做比较(结果值为:高/低/相同)存入MySQL数据库shtd_industry的machine_humidityAVG_compare表中(表结构如下),然后在Linux的MySQL命令行中根据检测设备ID降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注base_id int 检测设备IDmachine_avg varchar 单设备检测平均值factory_avg varchar 厂内所有设备平均值comparison varchar 比较结果 高/低/相同env_date_year varchar 检测年份 如:2021env_date_month varchar 检测月份 如:12任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程根据dwd库中fact_machine_data表(或MySQL的shtd_industry库中MachineData表),根据以下要求转换:获取最大分区(MySQL不用考虑)的数据后,首先解析列machine_record_data(MySQL中为MachineRecordData)的数据(数据格式为xml,采用dom4j解析,解析demo在客户端/home/ubuntu/Documents目录下),并获取每条数据的主轴转速,主轴倍率,主轴负载,进给倍率,进给速度,PMC程序号,循环时间,运行时间,有效轴数,总加工个数,已使用内存,未使用内存,可用程序量,注册程序量等相关的值(若该条数据没有相关值,则按下表设置默认值),同时转换machine_record_state字段的值,若值为报警,则填写1,否则填写0,以下为表结构,将数据保存在dwd.fact_machine_learning_data,使用hive cli按照machine_record_id升序排序,查询dwd.fact_machine_learning_data前1条数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。dwd.fact_machine_learning_data表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_id double 设备idmachine_record_state double 设备状态 默认0.0machine_record_mainshaft_speed double 主轴转速 默认0.0machine_record_mainshaft_multiplerate double 主轴倍率 默认0.0machine_record_mainshaft_load double 主轴负载 默认0.0machine_record_feed_speed double 进给倍率 默认0.0machine_record_feed_multiplerate double 进给速度 默认0.0machine_record_pmc_code double PMC程序号 默认0.0machine_record_circle_time double 循环时间 默认0.0machine_record_run_time double 运行时间 默认0.0machine_record_effective_shaft double 有效轴数 默认0.0machine_record_amount_process double 总加工个数 默认0.0machine_record_use_memory double 已使用内存 默认0.0machine_record_free_memory double 未使用内存 默认0.0machine_record_amount_use_code double 可用程序量 默认0.0machine_record_amount_free_code double 注册程序量 默认0.0machine_record_date timestamp 记录日期dwd_insert_user stringdwd_insert_time timestampdwd_modify_user stringdwd_modify_time timestamp子任务二:报警预测根据子任务一的结果,建立随机森林(随机森林相关参数可自定义,不做限制),使用子任务一的结果训练随机森林模型,然后再将hive中dwd.fact_machine_learning_data_test(该表字段含义与dwd.fact_machine_learning_data表相同,machine_record_state列值为空,表结构自行查看)转成向量,预测其是否报警将结果输出到MySQL数据库shtd_industry的ml_result表中(表结构如下)。在Linux的MySQL命令行中查询出machine_record_id为1、8、20、28和36的5条数据,将SQL语句与执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。ml_result表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_record_state double 设备状态 报警为1,其他状态则为0任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集/data_log目录下实时日志文件中的数据,将数据存入到Kafka的Topic中(Topic名称分别为ChangeRecord、ProduceRecord和EnvironmentData,分区数为4),将Flume采集ChangeRecord主题的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;编写新的Flume配置文件,将数据备份到HDFS目录/user/test/flumebackup下,要求所有主题的数据使用同一个Flume配置文件完成,将Flume的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用Flink处理Kafka中的数据编写Scala代码,使用Flink消费Kafka中的数据并进行相应的数据统计计算。使用Flink消费Kafka中EnvironmentData主题的数据,监控各环境检测设备数据,当温度(Temperature字段)持续3分钟高于38度时记录为预警数据。将结果存入HBase中的gyflinkresult:EnvTemperatureMonitor,key值为“env_temperature_monitor”,rowkey“设备id-系统时间”(如:123-2023-01-01 12:06:06.001),将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需要Flink启动运行6分钟以后再截图;注:时间语义使用Processing Time。中文内容及格式必须为示例所示内容。同一设备3分钟只预警一次。字段 类型 中文含义rowkey String 设备id-系统时间(如:123-2023-01-01 12:06:06.001)machine_id String 设备idout_warning_time String 预警生成时间 预警信息生成时间格式:yyyy-MM-dd HH:mm:ss使用Flink消费Kafka中ChangeRecord主题的数据,统计每3分钟各设备状态为“预警”且未处理的数据总数,将结果存入MySQL数据库shtd_industry的threemin_warning_state_agg表中(追加写入,表结构如下)。请将任务启动命令复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动且数据进入后按照设备id降序排序查询threemin_warning_state_agg表进行截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,第一次截图后等待3分钟再次查询并截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;threemin_warning_state_agg表:字段 类型 中文含义change_machine_id int 设备idtotalwarning int 未被处理预警总数window_end_time varchar 窗口结束时间(yyyy-MM-dd HH:mm:ss)注:时间语义使用Processing Time。使用Flink消费Kafka中ChangeRecord主题的数据,实时统计每个设备从其他状态转变为“运行”状态的总次数,将结果存入MySQL数据库shtd_industry的change_state_other_to_run_agg表中(表结构如下)。请将任务启动命令复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动1分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动2分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并再次截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。注:时间语义使用Processing Time。change_state_other_to_run_agg表:字段 类型 中文含义change_machine_id int 设备idlast_machine_state varchar 上一状态。即触发本次统计的最近一次非运行状态total_change_torun int 从其他状态转为运行的总次数in_time varchar flink计算完成时间(yyyy-MM-dd HH:mm:ss)任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。 注:所有数据排序按照接口返回数据顺序处理即可,不用特意排序。子任务一:用多个饼状图展示设备每天各状态时间编写Vue工程代码,根据接口,用多个饼状图展示OP170B该设备的每天各个状态的持续时长(秒)占比,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用柱状图展示每日各设备产量编写Vue工程代码,根据接口,用柱状图展示每日各设备的产量,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务三:用单轴散点图展示各设备加工每件产品所需时长编写Vue工程代码,根据接口,用单轴散点图展示各设备加工每件产品所需时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务四:用折线图展示PM2.5浓度变化编写Vue工程代码,根据接口,用折线图展示PM2.5浓度变化,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务五:用折柱混合图展示设备日均产量和所在车间日均产量编写Vue工程代码,根据接口,用折柱混合图展示设备日均产量(四舍五入保留两位小数)和所在车间日均产量(四舍五入保留两位小数),其中柱状图展示各设备的日均产量,折线图展示该设备所在车间的日均产量,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:Flink 任务出现很高的延迟,你会如何入手解决类似问题?Flink 任务出现很高的延迟,你会如何入手解决类似问题,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请简述Spark的Job、Stage、Task,如何划分?请简述你对Spark的Job、Stage、Task的理解,它们分别如何划分,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:请根据可视化图表做以下分析。如果你是工厂技术人员,通过可视化结果你将会对工厂设备优化、排班优化(不限于该角度,考生自行扩展分析角度)做出哪些建议,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第06套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hudi、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过Asbru工具或SSH客户端进行SSH访问; 相关软件安装包在容器Master节点的/opt/software目录下,请选择对应的安装包进行安装,用不到的可忽略; 所有任务中应用命令必须采用绝对路径; 进入Master节点的方式为 docker exec -it master /bin/bash 进入Slave1节点的方式为 docker exec -it slave1 /bin/bash 进入Slave2节点的方式为 docker exec -it slave2 /bin/bash 三个容器节点的root密码均为123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从Master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在Master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看Master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Spark on Yarn安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件spark-3.1.1-bin-hadoop3.2.tgz复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Spark包解压到/opt/module路径中(若路径不存在,则需新建),将完整解压命令复制粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置Spark环境变量并使环境变量生效,在/opt目录下运行命令spark-submit --version,将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成on yarn相关配置,使用spark on yarn 的模式提交$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar 运行的主类为org.apache.spark.examples.SparkPi,将运行结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下(截取Pi结果的前后各5行)。(运行命令为:spark-submit --master yarn --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar)子任务三:Hudi安装配置本任务需要使用root用户完成相关配置,具体要求如下:将容器Master节点maven相关安装包解压到/opt/module/目录下(若路径不存在,则需新建)并配置maven本地库为/opt/software/RepMaven/,并配置maven的环境变量,并在/opt/下执行mvn -v,将运行结果截图粘贴至对应报告中;将Master节点Hudi相关安装包解压到/opt/module/目录下(若路径不存在,则需新建),将命令复制并粘贴至对应报告中;完成解压安装及配置后使用maven对hudi进行构建(spark3.1,scala-2.12),编译完成后与spark集成,集成后使用spark-shell操作hudi,将spark-shell启动使用spark-shell运行下面给到的案例,并将最终查询结果截图粘贴至对应报告中。(提示:编译需要替换以下内容:1.将hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java替换;将packaging/hudi-spark-bundle/pom.xml替换;3.将packaging/hudi-utilities-bundle/pom.xml替换)import org.apache.hudi.QuickstartUtils._import scala.collection.JavaConversions._import org.apache.spark.sql.SaveMode._import org.apache.hudi.DataSourceReadOptions._import org.apache.hudi.DataSourceWriteOptions._import org.apache.hudi.config.HoodieWriteConfig._import org.apache.mon.model.HoodieRecordval tableName = "hudi_trips_cow"val basePath = "file:///tmp/hudi_trips_cow"val dataGen = new DataGeneratorval inserts = convertToStringList(dataGen.generateInserts(10))val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2))df.write.format("hudi").options(getQuickstartWriteConfigs).option(PRECOMBINE_FIELD_OPT_KEY, "ts").option(RECORDKEY_FIELD_OPT_KEY, "uuid").option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").option(TABLE_NAME, tableName).mode(Overwrite).save(basePath)val tripsSnapshotDF = spark.read.format("hudi").load(basePath + "/*/*/*/*")tripsSnapshotDF.createOrReplaceTempView("hudi_trips_snapshot")spark.sql("select fare, begin_lon, begin_lat, ts from hudi_trips_snapshot where fare > 20.0").show()任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; bigdata1节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。子任务一:数据抽取编写Scala代码,使用Spark将MySQL的shtd_store库中表user_info、sku_info、base_province、base_region、order_info、order_detail的数据增量抽取到Hudi的ods_ds_hudi库(路径为/user/hive/warehouse/ods_ds_hudi.db)的user_info、sku_info、base_province、base_region、order_info、order_detail中。抽取shtd_store库中user_info的增量数据进入Hudi的ods_ds_hudi库中表user_info。根据ods_ds_hudi.user_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods_ds_hudi里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加分区,若operate_time为空,则用create_time填充,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中sku_info的增量数据进入Hudi的ods_ds_hudi库中表sku_info。根据ods_ds_hudi.sku_info表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.sku_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_province的增量数据进入Hudi的ods_ds_hudi库中表base_province。根据ods_ds_hudi.base_province表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,create_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.base_province命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_region的增量数据进入Hudi的ods_ds_hudi库中表base_region。根据ods_ds_hudi.base_region表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,create_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.base_region命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_info的增量数据进入Hudi的ods_ds_hudi库中表order_info,根据ods_ds_hudi.order_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods_ds_hudi里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_detail的增量数据进入Hudi的ods_ds_hudi库中表order_detail,根据ods_ds_hudi.order_detail表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。id作为primaryKey,create_time作为preCombineField。使用spark-shell执行show partitions ods_ds_hudi.order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods_ds_hudi库中相应表数据全量抽取到Hudi的dwd_ds_hudi库(路径为/user/hive/warehouse/dwd_ds_hudi.db)中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods_ds_hudi库中user_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_user_info最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_user_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据operate_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions dwd_ds_hudi.dim_user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods_ds_hudi库sku_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_sku_info最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_sku_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell查询表dim_sku_info的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,条件为最新分区的数据,id大于等于15且小于等于20,并且按照id升序排序,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods_ds_hudi库base_province表中昨天的分区(子任务一生成的分区)数据,并结合dim_province最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_province的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell在表dwd_ds_hudi.dim_province最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods_ds_hudi库base_region表中昨天的分区(子任务一生成的分区)数据,并结合dim_region最新分区现有的数据,根据id合并数据到dwd_ds_hudi库中dim_region的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_time排序取最新的一条),分区字段为etl_date且值与ods_ds_hudi库的相对应表该值相等,并添加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存当前操作时间,其余列存最新的值。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell在表dwd_ds_hudi.dim_region最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods_ds_hudi库中order_info表昨天的分区(子任务一生成的分区)数据抽取到dwd_ds_hudi库中fact_order_info的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,同时若operate_time为空,则用create_time填充,并添加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均填写当前操作时间,并进行数据类型转换。id作为primaryKey,operate_time作为preCombineField。使用spark-shell执行show partitions dwd_ds_hudi.fact_order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods_ds_hudi库中order_detail表昨天的分区(子任务一中生成的分区)数据抽取到dwd_ds_hudi库中fact_order_detail的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,并添加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均填写当前操作时间,并进行数据类型转换。id作为primaryKey,dwd_modify_time作为preCombineField。使用spark-shell执行show partitions dwd_ds_hudi.fact_order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算编写Scala代码,使用Spark计算相关指标。注:在指标计算中,不考虑订单信息表中order_status字段的值,将所有订单视为有效订单。计算订单金额或订单总金额时只使用final_total_amount字段。需注意dwd_ds_hudi所有的维表取最新的分区。本任务基于以下2、3、4小题完成,使用Azkaban完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;根据dwd_ds_hudi层表统计每个省每月下单的数量和下单的总金额,并按照year,month,region_id进行分组,按照total_amount降序排序,形成sequence值,将计算结果存入Hudi的dws_ds_hudi数据库province_consumption_day_aggr表中(表结构如下),然后使用spark-shell根据订单总数、订单总金额、省份表主键均为降序排序,查询出前5条,在查询时对于订单总金额字段将其转为bigint类型(避免用科学计数法展示),将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注uuid string 随机字符 随机字符,保证不同即可,作为primaryKeyprovince_id int 省份主键province_name string 省份名称region_id int 地区主键region_name string 地区名称total_amount double 订单总金额 当月订单总金额total_count int 订单总数 当月订单总数。同时可作为preCombineField(作为合并字段时,无意义,因为主键为随机生成)sequence int 次序year int 年 订单产生的年,为动态分区字段month int 月 订单产生的月,为动态分区字段请根据dwd_ds_hudi层的相关表,计算2020年销售量前10的商品,销售额前10的商品,存入ClickHouse数据库shtd_result的topten表中(表结构如下),然后在Linux的ClickHouse命令行中根据排名升序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注topquantityid int 商品id 销售量前10的商品topquantityname text 商品名称 销售量前10的商品topquantity int 该商品销售量 销售量前10的商品toppriceid text 商品id 销售额前10的商品toppricename text 商品名称 销售额前10的商品topprice decimal 该商品销售额 销售额前10的商品sequence int 排名 所属排名请根据dwd_ds_hudi层的相关表,计算出2020年每个省份所在地区的订单金额的中位数,存入ClickHouse数据库shtd_result的nationmedian表中(表结构如下),然后在Linux的ClickHouse命令行中根据地区表主键,省份表主键均为升序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;提示:可用percentile函数求取中位数。字段 类型 中文含义 备注provinceid int 省份表主键provincename text 省份名称regionid int 地区表主键regionname text 地区名称provincemedian double 该省份中位数 该省份订单金额中位数regionmedian double 该省所在地区中位数 该省所在地区订单金额中位数任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; bigdata1节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程剔除订单信息表与订单详细信息表中用户id与商品id不存在于现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。据Hudi的dwd_ds_hudi库中相关表或MySQL数据库shtd_store中订单相关表(order_detail、order_info、sku_info),对用户购买过的商品进行去重,将其转换为以下格式:第一列为用户id mapping,第二列为用户购买过的商品id mapping,按照user_id与sku_id进行升序排序,输出前5行,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注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:00:891:11:21:3根据第1小题的结果,对其进行聚合,其中对sku_id进行one-hot转换,将其转换为以下格式矩阵:第一列为用户id,其余列名为商品id,按照用户id进行升序排序,展示矩阵第一行前5列数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。字段 类型 中文含义 备注user_id double 客户keysku_id0 double 用户是否购买过商品1 若用户购买过该商品,则值为1,否则为0sku_id1 double 用户是否购买过商品2 若用户购买过该商品,则值为1,否则为0sku_id2 double 用户是否购买过商品3 若用户购买过该商品,则值为1,否则为0.....结果格式如下:---------------第一行前5列结果展示为---------------0.0,1.0,0.0,0.0,0.0子任务二:推荐系统根据子任务一的结果,对其进行SVD分解,对数据进行降维保留前5个奇异值信息,根据该用户已购买的商品分别与未购买的商品计算余弦相似度再进行累加求均值,将均值最大的5件商品id进行输出作为推荐使用。将输出结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。结果格式如下:------------------------推荐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)任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用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的科学计数法)。使用Flink消费Kafka中的数据,统计商城实时订单数量(需要考虑订单状态,若有取消订单、申请退回、退回完成则不计入订单数量,其他状态则累加),将key设置成totalcount存入Redis中。使用redis cli以get key方式获取totalcount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,使用Flink消费Kafka中的订单详细信息的数据,实时统计商城中销售量前3的商品(不考虑订单状态,不考虑打折),将key设置成top3itemamount存入Redis中(value使用String数据格式,value为前3的商品信息并且外层用[]包裹,其中按排序依次存放商品id:销售量,并用逗号分割)。使用redis cli以get key方式获取top3itemamount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;示例如下:top3itemamount:[1:700,42:500,41:100]在任务1进行的同时,使用侧边流,使用Flink消费Kafka中的订单详细信息的数据,实时统计商城中销售额前3的商品(不考虑订单状态,不考虑打折,销售额为order_price*sku_num),将key设置成top3itemconsumption存入Redis中(value使用String数据格式,value为前3的商品信息并且外层用[]包裹,其中按排序依次存放商品id:销售额,并用逗号分割)。使用redis cli以get key方式获取top3itemconsumption值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面。示例如下:top3itemconsumption:[1:10020.2,42:4540.0,12:540]任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。子任务一:用柱状图展示消费额最高的省份编写Vue工程代码,根据接口,用柱状图展示2020年消费额最高的5个省份,同时将用于图表展示的数据结构在浏览器的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年最高10个省份平均消费额(四舍五入保留两位小数),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:Spark中的HashShuffle的有哪些不足?请简述Spark中HashShuffle有哪些不足,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请简述Flink的Slot和parallelism有什么区别。请简述Flink的Slot和parallelism有什么区别,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:分析下一年度的建仓目的地。根据任务E的图表,分析各省份的经济现状,公司决定挑选3个省份进行仓储建设,请问应该在哪些省份建设?将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。2023年全国职业院校技能大赛赛题第05套赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育组赛项编号: GZ033背景描述工业互联网是工业全要素、全产业链、全价值链的全面连接,是人、机、物、工厂互联互通的新型工业生产制造服务体系,是互联网从消费领域向生产领域、从虚拟经济向实体经济拓展的核心载体,是建设现代化经济体系、实现高质量发展和塑造全球产业竞争力的关键支撑,工业大数据则是工业互联网实现工业要素互联之后的核心价值创造者 随着大数据行业的发展,工业数据收集呈现时间维度不断延长、数据范围不断扩大、数据粒度不断细化的趋势 以上三个维度的变化使得企业所积累的数据量以加速度的方式在增加,最终构成了工业大数据的集合 为完成工业大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用 Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的root密码均为123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-2.7.7.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Flume安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件apache-flume-1.7.0-bin.tar.gz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将Master节点Flume安装包解压到/opt/module目录下,将解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完善相关配置、环境变量,并使环境变量生效,执行命令flume-ng version并将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Flume传输Hadoop日志(namenode或datanode日志),查看HDFS中/tmp/flume目录下生成的内容,将查看命令及结果(至少5条结果)截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务三:Kafka安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件zookeeper-3.4.6.tar.gz、kafka_2.12-2.0.0.tgz复制到容器master中的/opt/software路径中(若路径不存在,则需新建),将Master节点Zookeeper、kafka安装包解压到/opt/module目录下,将kafka解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;配置好zookeeper,其中zookeeper使用集群模式,分别将master、slave1、slave2作为其节点(若zookpeer已安装配置好,则无需再次配置),配置好Kafka的环境变量,使用kafka-server-start.sh --version查看Kafka的版本内容,并将命令和结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完善其他配置并分发Kafka文件到slave1、slave2中,并在每个节点启动Kafka,创建Topic,其中Topic名称为installtopic,分区数为2,副本数为2,将创建命令和创建成果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。子任务一:数据抽取编写Scala代码,使用Spark将MySQL库中表ChangeRecord,BaseMachine,MachineData, ProduceRecord全量抽取到Hive的ods库中对应表changerecord,basemachine, machinedata,producerecord中。抽取MySQL的shtd_industry库中ChangeRecord表的全量数据进入Hive的ods库中表changerecord,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.changerecord命令,将hive cli的执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中BaseMachine表的全量数据进入Hive的ods库中表basemachine,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.basemachine命令,将hive cli的执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中ProduceRecord表的全量数据进入Hive的ods库中表producerecord,剔除ProducePrgCode字段,其余字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.producerecord命令,将hive cli的执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取MySQL的shtd_industry库中MachineData表的全量数据进入Hive的ods库中表machinedata,字段排序、类型不变,同时添加静态分区,分区字段为etldate,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.machinedata命令,将hive cli的执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中changerecord的全量数据进入Hive的dwd库中表fact_change_record,抽取数据之前需要对数据根据changeid和changemachineid进行联合去重处理,分区字段为etldate且值与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按照change_machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中basemachine的全量数据进入Hive的dwd库中表dim_machine,抽取数据之前需要对数据根据basemachineid进行去重处理。分区字段为etldate且值与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按照base_machine_id升序排序,查询dim_machine前2条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中producerecord的全量数据进入Hive的dwd库中表fact_produce_record,分区字段为etldate且值与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按照produce_machine_id升序排序,查询fact_produce_record前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库中machinedata的全量数据进入Hive的dwd库中表fact_machine_data。分区字段为etldate且值与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按照machine_id降序排序,查询前1条数据,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算本任务基于以下2、3、4小题完成,使用DolphinScheduler完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;编写Scala代码,使用Spark根据dwd层的fact_change_record表关联dim_machine表统计每个车间中所有设备运行时长(即设备状态为“运行”)的中位数在哪个设备(为偶数时,两条数据原样保留输出),若某个设备运行状态当前未结束(即change_end_time值为空)则该状态不参与计算,计算结果存入MySQL数据库shtd_industry的machine_running_median表中(表结构如下),然后在Linux的MySQL命令行中根据所属车间、设备id均为降序排序,查询出前5条数据,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注machine_id int 设备idmachine_factory int 所属车间total_running_time int 运行总时长 结果以秒为单位编写Scala代码,使用Spark根据dwd层的fact_change_record表和dim_machine表统计,计算每个车间设备的月平均运行时长与所有设备的月平均运行时长对比结果(即设备状态为“运行”,结果值为:高/低/相同),月份取值使用状态开始时间的月份,若某设备的运行状态当前未结束(即change_end_time值为空)则该状态不参与计算,计算结果存入MySQL数据库shtd_industry的machine_running_compare表中(表结构如下),然后在Linux的MySQL命令行中根据车间号降序排序,查询出前2条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注start_month varchar 月份 如:2021-12machine_factory int 车间号comparison varchar 比较结果 高/低/相同factory_avg varchar 车间平均时长company_avg varchar 所有设备平均时长编写Scala代码,使用Spark根据dwd层的fact_change_record表展示每一个设备最近第二次的状态(倒数第二次),时间字段选用change_start_time,如果设备仅有一种状态,返回该状态(一个设备不会同时拥有两种状态),存入MySQL数据库shtd_industry的recent_state表中(表结构如下),然后在Linux的MySQL命令行中根据设备id降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注machine_id int 设备idrecord_state varchar 状态信息 最近第二次的状态change_start_time varchar 状态开始时间change_end_time varchar 状态结束时间任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程根据dwd库中fact_machine_data表(或MySQL的shtd_industry库中MachineData表),根据以下要求转换:获取最大分区(MySQL不用考虑)的数据后,首先解析列machine_record_data(MySQL中为MachineRecordData)的数据(数据格式为xml,采用dom4j解析,解析demo在客户端/home/ubuntu/Documents目录下),并获取每条数据的主轴转速,主轴倍率,主轴负载,进给倍率,进给速度,PMC程序号,循环时间,运行时间,有效轴数,总加工个数,已使用内存,未使用内存,可用程序量,注册程序量等相关的值(若该条数据没有相关值,则按下表设置默认值),同时转换machine_record_state字段的值,若值为报警,则填写1,否则填写0,以下为表结构,将数据保存在dwd.fact_machine_learning_data,使用hive cli按照machine_record_id升序排序,查询dwd.fact_machine_learning_data前1条数据,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。dwd.fact_machine_learning_data表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_id double 设备idmachine_record_state double 设备状态 默认0.0machine_record_mainshaft_speed double 主轴转速 默认0.0machine_record_mainshaft_multiplerate double 主轴倍率 默认0.0machine_record_mainshaft_load double 主轴负载 默认0.0machine_record_feed_speed double 进给倍率 默认0.0machine_record_feed_multiplerate double 进给速度 默认0.0machine_record_pmc_code double PMC程序号 默认0.0machine_record_circle_time double 循环时间 默认0.0machine_record_run_time double 运行时间 默认0.0machine_record_effective_shaft double 有效轴数 默认0.0machine_record_amount_process double 总加工个数 默认0.0machine_record_use_memory double 已使用内存 默认0.0machine_record_free_memory double 未使用内存 默认0.0machine_record_amount_use_code double 可用程序量 默认0.0machine_record_amount_free_code double 注册程序量 默认0.0machine_record_date timestamp 记录日期dwd_insert_user stringdwd_insert_time timestampdwd_modify_user stringdwd_modify_time timestamp子任务二:报警预测根据子任务一的结果,建立随机森林(随机森林相关参数可自定义,不做限制),使用子任务一的结果训练随机森林模型,然后再将hive中dwd.fact_machine_learning_data_test(该表字段含义与dwd.fact_machine_learning_data表相同,machine_record_state列值为空,表结构自行查看)转成向量,预测其是否报警将结果输出到MySQL数据库shtd_industry中的ml_result表中(表结构如下)。在Linux的MySQL命令行中查询出machine_record_id为1、8、20、28和36的5条数据,将SQL语句与执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。ml_result表结构:字段 类型 中文含义 备注machine_record_id int 主键machine_record_state double 设备状态 报警为1,其他状态则为0任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集/data_log目录下实时日志文件中的数据,将数据存入到Kafka的Topic中(Topic名称分别为ChangeRecord、ProduceRecord和EnvironmentData,分区数为4),将Flume采集ChangeRecord主题的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;编写新的Flume配置文件,将数据备份到HDFS目录/user/test/flumebackup下,要求所有主题的数据使用同一个Flume配置文件完成,将Flume的配置截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用Flink处理Kafka中的数据编写Scala代码,使用Flink消费Kafka中的数据并进行相应的数据统计计算。使用Flink消费Kafka中ProduceRecord主题的数据,统计在已经检验的产品中,各设备每5分钟生产产品总数,将结果存入HBase中的gyflinkresult:Produce5minAgg表,rowkey“设备id-系统时间”(如:123-2023-01-01 12:06:06.001),将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔5分钟以上,第一次截图放前面,第二次截图放后面;注:ProduceRecord主题,每生产一个产品产生一条数据;change_handle_state字段为1代表已经检验,0代表为检验;时间语义使用Processing Time。字段 类型 中文含义rowkey String 设备id-系统时间(如:123-2023-01-01 12:06:06.001)machine_id String 设备idtotal_produce String 最近5分钟生产总数使用Flink消费Kafka中ChangeRecord主题的数据,实时统计每个设备从其他状态转变为“运行”状态的总次数,将结果存入MySQL数据库shtd_industry的change_state_other_to_run_agg表中(表结构如下)。请将任务启动命令复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动1分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,启动2分钟后根据change_machine_id降序查询change_state_other_to_run_agg表并再次截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;注:时间语义使用Processing Time。change_state_other_to_run_agg表:字段 类型 中文含义change_machine_id int 设备idlast_machine_state varchar 上一状态。即触发本次统计的最近一次非运行状态total_change_torun int 从其他状态转为运行的总次数in_time varchar flink计算完成时间(yyyy-MM-dd HH:mm:ss)使用Flink消费Kafka中ChangeRecord主题的数据,每隔1分钟输出最近3分钟的预警次数最多的设备,将结果存入Redis中,key值为“warning_last3min_everymin_out”,value值为“窗口结束时间,设备id”(窗口结束时间格式:yyyy-MM-dd HH:mm:ss)。使用redis cli以HGETALL key方式获取warning_last3min_everymin_out值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面。注:时间语义使用Processing Time。任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。 注:所有数据排序按照接口返回数据顺序处理即可,不用特意排序。子任务一:用多个饼状图展示某设备每天各状态持续时间编写Vue工程代码,根据接口,用多个饼状图展示OP170B该设备的每天各个状态的持续时长(秒)占比,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用散点图展示设备运行时长编写Vue工程代码,根据接口,用基础散点图展示设备运行时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务三:用单轴散点图展示各设备加工每件产品所需时长编写Vue工程代码,根据接口,用单轴散点图展示各设备加工每件产品所需时长(秒),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务四:用折线图展示PM2.5浓度变化编写Vue工程代码,根据接口,用折线图展示设备所处环境的PM2.5浓度的变化,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务五:用条形图展示每日各设备产量编写Vue工程代码,根据接口,用条形图展示每日各设备产量,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。任务F:综合分析(10分)子任务一:请简述维度建模和范式建模区别。请简述你对维度建模和范式建模的理解以及他们的区别,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:请简述Flink资源管理中Task Slot的概念。请简述你对Task Slot的理解,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:Flume采集数据会导致数据丢失吗?请简述其原理。请简述Flume数据采集是否会导致数据丢失以及其原理,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。全国职业院校技能大赛赛项规程赛项名称: 大数据应用开发英文名称: Big Data Application Development赛项组别: 高等职业教育(师生同赛)赛项编号: GZ033一、赛项信息赛项类别 每年赛 隔年赛(单数年/双数年)赛项组别□中等职业教育 高等职业教育□学生赛(□个人/□团体) □教师赛(试点) 师生同赛(试点)涉及专业大类、专业类、专业及核心课程专业大类 专业类 专业名称 核心课程 (对应每个专业,明确涉及的专业核心课程)51电子与信息大类 5102计算机类 510205大数据技术 数据采集技术数据预处理技术大数据分析技术应用数据可视化技术与应用数据挖掘应用大数据平台部署与运维510201计算机应用技术 数据库技术及应用前端设计与开发信息采集技术数据分析方法系统部署与运维510202计算机网络技术 Linux操作系统管理程序设计基础数据库应用技术510203软件技术 程序设计基础数据库技术面向对象程序设计数据结构510206云计算技术应用 Linux操作系统程序设计基础数据库技术Web应用开发510209人工智能技术应用 程序设计基础Linux操作系统数据库技术人工智能数据服务510211工业互联网技术 程序设计基础数据库应用基础工业互联网数据采集技术工业互联网数据分析技术数据采集与处理对接产业行业、对应岗位(群)及核心能力产业行业 岗位(群) 核心能力 (对应每个岗位(群),明确核心能力要求)战略性新兴产业-新一代信息技术 大数据实施与运维 大数据平台搭建部署与基本使用,以及大数据集群运维大数据平台管理、大数据技术服务数据分析处理 分析用户业务需求,制订大数据项目解决方案开发数据采集、抽取、清洗、转换与加载等数据预处理模型基于行业应用与典型工作场景,解决业务需求大数据分析与可视化 安装部署与使用数据分析工具,运用大数据分析平台完成大数据分析任务数据可视化设计,开发应用程序进行数据可视化展示,撰写数据可视化结果分析报告基于行业应用与典型工作场景,解决业务需求程序设计 数据库应用、前端开发等程序设计能力数据采集与分析 数据采集、使用工具进行数据分析信息系统运行维护 信息系统部署与运维二、竞赛目标“十四五”时期,大数据产业对经济社会高质量发展的赋能作用更加突显,大数据已成为催生新业态、激发新模式、促进新发展的技术引擎。习近平总书记指出“大数据是信息化发展的新阶段”,“加快数字化发展,建设数字中国”成为《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的重要篇章。本赛项旨在落实国家“建设数字中国”战略,协同推动大数据相关产业的创新与发展,大力推进大数据技术及相关专业的技术技能型人才培养,全面提升相关专业毕业生的综合能力,展现选手团队合作、工匠精神等职业素养,赋能经济社会高质量发展。竞赛内容结合当前大数据相关产业中的新技术、新要求如数据湖、OLAP数据库应用等,全面检验参赛选手的工程实践能力和创新能力,推进教学过程与生产过程对接、课程内容与职业标准对接、专业设置与产业需求对接,促进职普融通、产教融合、科教融汇,引领专业建设和教学改革。竞赛内容围绕大数据相关产业岗位的实际技能要求进行设计,通过竞赛搭建校企合作的平台,强化竞赛成果转化,促进相关教材、资源、师资、认证、实习就业等方面的全方位建设,满足产教协同育人目标,为国家战略规划提供大数据领域高素质技能型人才。三、竞赛内容本赛项涉及的典型工作任务包括大数据平台搭建(容器环境)、离线数据处理、数据挖掘、数据采集与实时计算、数据可视化、综合分析、职业素养,引入行业内较为前沿的数据湖架构作为创新、创意的范围与方向,考查的技术技能如下:(一)大数据平台搭建(容器环境):Docker容器基础操作、Hadoop完全分布式安装配置、Hadoop HA安装配置、Spark on Yarn安装配置、Flink on Yarn安装配置、Hive安装配置、Flume安装配置、ZooKeeper安装配置、Kafka安装配置、HBase分布式安装配置、ClickHouse单节点安装配置、Hudi安装配置。(二)离线数据处理:Scala应用开发、Pom文件配置、Maven本地仓库配置使用、基于Spark的数据清洗处理方法、基于Hive的数据清洗处理方法、基于Hudi的数据清洗处理方法、数据仓库基本架构及概念、数据湖基本架构及概念、MySQL基本操作、ClickHouse基本操作、Azkaban基本操作、DolphinScheduler基本操作。(三)数据挖掘:特征工程应用、Spark ML机器学习库应用开发、推荐算法的召回和排序、回归模型、聚类模型、决策树模型、随机森林模型应用。(四)数据采集与实时计算:Scala应用开发、Pom文件配置、Maven本地仓库配置使用、基于Flume及Kafka的数据采集方法、基于Flink的实时数据处理方法、HBase基本操作、Redis基本操作、MySQL基本操作。(五)数据可视化:Vue.js框架应用开发、ECharts组件应用开发,会使用ECharts绘制柱状图、折线图、折柱混合图、玫瑰图、气泡图、饼状图、条形图、雷达图、散点图等图表。(六)综合分析:依据整体项目过程,在综合理解业务的基础上,根据题目要求进行综合分析。(七)职业素养:团队分工明确合理、操作规范、文明竞赛。1、竞赛内容结构、成绩比例如下:表3-1 竞赛内容结构和成绩比例序号 竞赛任务 成绩比例 考核内容1 大数据平台搭建 (容器环境) 15% 选手在容器环境下对大数据平台及相关组件的安装、配置、可用性验证等内容。2 离线数据处理 25% 选手对Hadoop平台、Spark平台、Hive数据仓库、Hudi数据湖、任务调度工具等的综合应用能力,使用Scala开发语言,完成离线数据抽取、数据清洗、数据指标统计等操作,并存入MySQL、ClickHouse中。3 数据挖掘 10% 选手运用常用的机器学习方法对数据进行数据挖掘分析。4 数据采集与实时计算 20% 选手对Flink平台、Flume组件、Kafka组件等的综合应用能力,基于Flume和Kafka进行实时数据采集,使用Scala开发语言,完成实时数据流相关数据指标的分析、计算等操作,并存入HBase、Redis、MySQL中。5 数据可视化 15% 选手基于前端框架Vue.js和后端REST风格的数据接口,使用JavaScript语言将数据分析结果以图表的形式进行呈现、统计6 综合分析 10% 选手对大数据技术的业务分析、技术分析及报告撰写能力。7 职业素养 5% 团队分工明确合理、操作规范、文明竞赛。2、赛项模块、比赛时长及分值配比如下:表3-2 赛项模块比赛时长及分值配比模块 主要内容 比赛时长 分值模块一 大数据应用开发 竞赛以电商大数据及工业大数据为业务背景,主要设置以下竞赛任务: 任务A:大数据平台搭建(容器环境) 在容器环境下对大数据平台及相关组件的安装、配置、可用性验证等内容。 任务B:离线数据处理 对Hadoop平台、Spark平台、Hive数据仓库、Hudi数据湖、任务调度工具等的综合应用能力,使用Scala开发语言,完成离线数据抽取、数据清洗、数据指标统计等操作,并存入MySQL、ClickHouse中。 任务C:数据挖掘 运用常用的机器学习方法对数据进行数据挖掘分析。 任务D:数据采集与实时计算 对Flink平台、Flume组件、Kafka组件等的综合应用能力,基于Flume和Kafka进行实时数据采集,使用Scala开发语言,完成实时数据流相关数据指标的分析、计算等操作,并存入HBase、Redis、MySQL中。 任务E:数据可视化 基于前端框架Vue.js和后端REST风格的数据接口,使用JavaScript语言将数据分析结果以图表的形式进行呈现、统计。 任务F:综合分析 对大数据技术的业务分析、技术分析及报告撰写能力。 任务G:职业素养 综合职业素养,包括团队分工明确合理、操作规范、文明竞赛等内容。 8小时 100分四、竞赛方式本竞赛为线下比赛,组队方式为师生同赛,具体要求如下:(一)参赛学生须为高等职业学校专科、高等职业学校本科全日制在籍学生,五年制高职四、五年级学生也可报名参赛;参赛教师须为校内专任教师,并提供近半年的社保或纳税证明。凡在往届全国职业院校技能大赛中获一等奖的选手,不能再参加同一项目同一组别的比赛。(二)每支参赛队由4名选手组成,其中1名教师,3名学生。本赛项为师生同赛不设指导教师,报名获得确认后不得随意更换。(三)本赛项为单一场次,所有参赛队在现场根据给定的任务说明,在8小时内相互配合,采用小组合作的形式完成任务,最后以提交的结果文档作为最终评分依据。五、竞赛流程(一)竞赛时间表表 5-1 竞赛时间日期 时间 内容竞赛前两日 18:00之前 裁判报到19:00—20:00 裁判工作会议竞赛前一日 12:00之前 各参赛队报到10:00—11:00 工作人员(含监考)培训会15:30—16:00 赛前领队会16:00—16:30 参赛队熟悉比赛场地17:00—18:00 现场裁判赛前检查,封闭赛场竞赛当日 07:00—08:00 参赛队集合前往比赛现场08:00—08:10 赛场检录08:10—08:30 一次加密:参赛队抽取参赛编号08:30—08:45 二次加密:参赛队抽取赛位号08:45—09:00 参赛队进入比赛赛位,进行赛前软、硬件检查、题目发放09:00—17:00 竞赛进行17:00—17:20 收取各参赛队赛题及比赛结果文档17:00—19:00 申诉受理19:00—19:30 三次加密:竞赛结果等文件加密19:30—23:00 成绩评定与复核23:00—23:30 加密信息解密23:30—24:00 成绩汇总及报送竞赛后一日 08:00—11:00 成绩公布11:00—12:00 闭赛式(二)竞赛流程图图5-1 竞赛流程六、竞赛规则(一)选手报名:参赛学生须为高等职业学校专科、高等职业学校本科全日制在籍学生,五年制高职四、五年级学生也可报名参赛。参赛教师须为校内专任教师,并提供近半年的社保或纳税证明。凡在往届全国职业院校技能大赛中获一等奖的选手,不能再参加同一项目同一组别的比赛。(二)熟悉场地:竞赛前1日安排各参赛队领队、参赛选手熟悉赛场。(三)入场规则:参赛选手按规定时间到达指定地点,必须携带参赛证件,进行检录、一次加密、二次加密等流程,最终确定工位,选手迟到10分钟取消比赛资格。严禁参赛选手、赛项裁判、工作人员私自携带通讯、摄录设备进入比赛场地。参赛选手所需的硬件、软件和辅助工具统一提供,参赛队不得使用自带的任何有存储功能的设备,如手机、U盘、移动硬盘等。参赛队在赛前领取比赛任务并进入比赛工位,比赛正式开始后方可进行相关操作。(四)赛场规则:在比赛过程中,参赛选手如有疑问,应举手示意,现场裁判应按要求及时予以答疑。如遇设备或软件等故障,参赛选手应举手示意,现场裁判、技术人员等应及时予以解决。确因计算机软件或硬件故障,致使操作无法继续,经裁判长确认,予以启用备用设备。参赛选手不得因各种原因提前结束比赛。如确因不可抗因素需要离开赛场的,须向现场裁判员举手示意,经裁判员许可并完成记录后,方可离开。凡在竞赛期间内提前离开的选手,不得返回赛场。(五)离场规则:比赛时间结束,选手应全体起立,结束操作。参赛选手要确认已成功提交竞赛要求的文档,裁判员与参赛选手一起签字确认,经工作人员查收清点所有文档后方可离开赛场,离开赛场时不得带走任何资料。(六)成绩评定与结果公布:比赛结束,经加密裁判对各参赛选手提交的竞赛结果进行第三次加密后,评分裁判方可入场进行成绩评判。最终竞赛成绩经复核无误,由裁判长、监督仲裁长签字确认后,以纸质形式向全体参赛队进行公布,并在闭赛式上予以宣布。(七)其它未尽事宜,将在赛前向各领队做详细说明。七、技术规范本赛项引用的国际、国家、行业技术、职业资格标准与规范如下:表7-1 基础标准标准号/规范简称 名称GB/T 11457-2006 信息技术 软件工程术语GB8566-88 计算机软件开发规范GB/T 12991.1-2008 信息技术 数据库语言 SQL第1部分:框架GB/Z 21025-2007 XML使用指南GB/T 28821-2012 关系数据管理系统技术要求LD/T 81.1-2006 职业技能实训和鉴定设备通用技术规范表7-2 大数据技术相关标准标准号/规范简称 名称GB/T 35295-2017 信息技术 大数据 术语GB/T 37721-2019 信息技术 大数据分析系统功能要求GB/T 37722-2019 信息技术 大数据存储与处理系统功能要求GB/T 38672-2020 信息技术 大数据 接口基本要求GB/T 38673-2020 信息技术 大数据 大数据系统基本要求GB/T 38675-2020 信息技术 大数据计算系统通用要求GB/T 38633-2020 信息技术 大数据 系统运维和管理功能要求GB/T 41778-2022 信息技术 工业大数据 术语GB/T 41818-2022 信息技术 大数据 面向分析的数据存储与检索技术要求表7-3 软件开发与软件工程相关标准标准号/规范简称 名称GB/T 14079-1993 软件维护指南GB/T 15853-1995 软件支持环境GB/T 17544-1998 信息技术软件包质量要求和测试GB/T 8566-2007 信息技术 软件生存周期过程GB/T 22032-2021 系统与软件工程 系统生存周期过程八、技术环境(一)竞赛场地竞赛现场设置竞赛区、裁判区、技术支持区、服务区等。1. 竞赛区域:每个竞赛工位设工位编号,面积在9㎡左右,工位之间由隔板隔开,确保互不干扰。2. 裁判区:供裁判工作及休息,配备满足需要的办公设备。3. 技术支持区:供技术支持人员工作及休息,为竞赛提供技术支持。4. 服务区:提供医疗等服务保障。(二)技术平台1. 竞赛设备表8-1 竞赛设备序号 设备名称 数量 备注1 服务器 每组1台 CPU:Intel至强银牌4210及以上 内存:不少于128GB 硬盘:不少于1TB 网卡:千兆2 大数据实训管理系统 每组1套 1.系统基于K8S、Docker引擎,支持镜像上传存储、镜像复制、私有镜像仓库管理等;支持K8S集群的导入并进行权限控制;支持在名称空间中以微服务方式将工作负载划分到不同层;支持图形化的工作负载编辑,快速完成对容器的编排;在工作负载中可将部署的历史版本、Pod列表、Pod关联事件、容器信息进行有效组织及展示;可对接NFS、CephFS等常用存储类型,支持对CephFS类型存储卷声明执行扩容和快照;支持从容器中进行文件的上传和下载。 2.系统基于Linux部署,支持多角色(管理员、教师、学生)管理、专业管理、班级管理、用户管理、镜像环境、环境配置、资源监控、实训管理、课程管理、实践项目、实训监控、个人实验环境、讨论区、个人中心等功能;支持通过VNC、SSH等模式访问。 3.支持模拟竞赛全业务流程,提供大数据竞赛操作环境。3 PC机 每组4台 CPU:i5及以上 内存:不少于16GB 硬盘:不少于500GB 显示器:1920*1080及以上4 交换机 每组1台 8口及以上千兆交换机2.软件环境表8-2 软件环境设备类型 软件类别 软件名称、版本号服务器 大数据集群操作系统 CentOS 7容器环境 Docker-CE 20.10大数据平台组件 Hadoop 3.1.3Yarn 3.1.3ZooKeeper 3.5.7Hive 3.1.2Hudi 0.12.0ClickHouse 21.9.4JDK 1.8Flume 1.9.0Kafka 2.4.1Spark 3.1.1Flink 1.14.0Redis 6.2.6HBase 2.2.3Azkaban 3.84.4DolphinScheduler 3.1.4关系型数据库 MySQL 5.7PC机 PC操作系统 Ubuntu18.04 64位浏览器 Chrome开发语言 Scala 2.12JavaScript开发工具 IDEA 2022 (Community Edition)Visual Studio Code 1.69SSH工具 Asbru-cm或Ubuntu SSH客户端数据库工具 MySQL Workbench接口测试工具 Postman数据可视化框架及组件 Vue.js 3.2ECharts 5.1截图工具 Ubuntu系统自带文档编辑器 WPS Linux版输入法 搜狗拼音输入法 Linux版九、竞赛样题背景描述大数据时代背景下,电商经营模式发生很大改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。商家可以对客户的消费行为信息数据进行收集和整理,比如消费者购买产品的花费、选择产品的渠道、偏好产品的类型、产品回购周期、购买产品的目的、消费者家庭背景、工作和生活环境、个人消费观和价值观等。通过数据追踪,知道顾客从哪儿来,是看了某网站投放的广告还是通过朋友推荐链接,是新访客还是老用户,喜欢浏览什么产品,购物车有无商品,是否清空,还有每一笔交易记录,精准锁定一定年龄、收入、对产品有兴趣的顾客,对顾客进行分组、标签化,通过不同标签组合运用,获得不同目标群体,以此开展精准推送。因数据驱动的零售新时代已经到来,没有大数据,我们无法为消费者提供这些体验,为完成电商的大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综合利用Hive、Spark、Flink、Vue.js等技术,对数据进行处理、分析及可视化呈现,你们作为该小组的技术人员,请按照下面任务完成本次工作。任务A:大数据平台搭建(容器环境)(15分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:宿主机可通过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 三个容器节点的root密码均为123456子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在Master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从Master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部scp复制JDK的命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;在容器Master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果日志最后20行即可)粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动Hadoop集群(包括hdfs和yarn),使用jps命令查看Master节点与slave1节点的Java进程,将jps命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。子任务二:Spark on Yarn安装配置本任务需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:从宿主机/opt目录下将文件spark-3.1.1-bin-hadoop3.2.tgz复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Spark包解压到/opt/module路径中(若路径不存在,则需新建),将完整解压命令复制粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;修改容器中/etc/profile文件,设置Spark环境变量并使环境变量生效,在/opt目录下运行命令spark-submit --version,将命令与结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;完成on yarn相关配置,使用spark on yarn 的模式提交$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar 运行的主类为org.apache.spark.examples.SparkPi,将运行结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下(截取Pi结果的前后各5行)。(运行命令为:spark-submit --master yarn --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar)子任务三:HBase分布式安装配置本任务需要使用root用户完成相关配置,安装HBase需要配置Hadoop和ZooKeeper等前置环境。命令中要求使用绝对路径,具体要求如下:从宿主机/opt目录下将文件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】中对应的任务序号下;完成ZooKeeper相关部署,用scp命令并使用绝对路径从容器master复制HBase解压后的包分发至slave1、slave2中,并修改相关配置,配置好环境变量,在容器Master节点中运行命令hbase version,将全部复制命令复制并将hbase version命令的结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;启动HBase后在三个节点分别使用jps命令查看,并将结果分别截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;正常启动后在hbase shell中查看命名空间,将查看命名空间的结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。任务B:离线数据处理(25分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过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中。抽取shtd_store库中user_info的增量数据进入Hive的ods库中表user_info。根据ods.user_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中sku_info的增量数据进入Hive的ods库中表sku_info。根据ods.sku_info表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.sku_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_province的增量数据进入Hive的ods库中表base_province。根据ods.base_province表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_province命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中base_region的增量数据进入Hive的ods库中表base_region。根据ods.base_region表中id作为增量字段,只将新增的数据抽入,字段名称、类型不变并添加字段create_time取当前时间,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.base_region命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_info的增量数据进入Hive的ods库中表order_info,根据ods.order_info表中operate_time或create_time作为增量字段(即MySQL中每条数据取这两个时间中较大的那个时间作为增量字段去和ods里的这两个字段中较大的时间进行比较),只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取shtd_store库中order_detail的增量数据进入Hive的ods库中表order_detail,根据ods.order_detail表中create_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务二:数据清洗编写Scala代码,使用Spark将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。抽取ods库中user_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_user_info最新分区现有的数据,根据id合并数据到dwd库中dim_user_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据operate_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,同时若operate_time为空,则用create_time填充,并添加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_user_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库sku_info表中昨天的分区(子任务一生成的分区)数据,并结合dim_sku_info最新分区现有的数据,根据id合并数据到dwd库中dim_sku_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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查询表dim_sku_info的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,条件为最新分区的数据,id大于等于15且小于等于20,并且按照id升序排序,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_province表中昨天的分区(子任务一生成的分区)数据,并结合dim_province最新分区现有的数据,根据id合并数据到dwd库中dim_province的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_province最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;抽取ods库base_region表中昨天的分区(子任务一生成的分区)数据,并结合dim_region最新分区现有的数据,根据id合并数据到dwd库中dim_region的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以id为合并字段,根据create_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在表dwd.dim_region最新分区中,查询该分区中数据的条数,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_info表昨天的分区(子任务一生成的分区)数据抽取到dwd库中fact_order_info的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,同时若operate_time为空,则用create_time填充,并添加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.fact_order_info命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;将ods库中order_detail表昨天的分区(子任务一中生成的分区)数据抽取到dwd库中fact_order_detail的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd,并添加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.fact_order_detail命令,将结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。子任务三:指标计算编写Scala代码,使用Spark计算相关指标。本任务基于以下2、3、4小题完成,使用Azkaban完成第2、3、4题任务代码的调度。工作流要求,使用shell输出“开始”作为工作流的第一个job(job1),2、3、4题任务为并行任务且它们依赖job1的完成(命名为job2、job3、job4),job2、job3、job4完成之后使用shell输出“结束”作为工作流的最后一个job(endjob),endjob依赖job2、job3、job4,并将最终任务调度完成后的工作流截图,将截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注provinceid int 省份表主键provincename text 省份名称regionid int 地区表主键regionname text 地区名称totalconsumption double 订单总金额 当月订单总金额totalorder int 订单总数 当月订单总数year int 年 订单产生的年month int 月 订单产生的月根据dwd层表统计每个省份、每个地区、每个月下单的数量和下单的总金额,存入MySQL数据库shtd_result的provinceeverymonth表中(表结构如下),然后在Linux的MySQL命令行中根据订单总数、订单总金额、省份表主键均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;3、请根据dwd层表计算出2020年4月每个省份的平均订单金额和所有省份平均订单金额相比较结果(“高/低/相同”),存入MySQL数据库shtd_result的provinceavgcmp表(表结构如下)中,然后在Linux的MySQL命令行中根据省份表主键、该省平均订单金额均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下;字段 类型 中文含义 备注provinceid int 省份表主键provincename text 省份名称provinceavgconsumption double 该省平均订单金额allprovinceavgconsumption double 所有省平均订单金额comparison text 比较结果 该省平均订单金额和所有省平均订单金额比较结果,值为:高/低/相同根据dwd层表统计在两天内连续下单并且下单金额保持增长的用户,存入MySQL数据库shtd_result的usercontinueorder表(表结构如下)中,然后在Linux的MySQL命令行中根据订单总数、订单总金额、客户主键均为降序排序,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务B提交结果.docx】中对应的任务序号下。字段 类型 中文含义 备注userid int 客户主键username text 客户名称day text 日 记录下单日的时间,格式为 yyyyMMdd_yyyyMMdd 例如: 20220101_20220102totalconsumption double 订单总金额 连续两天的订单总金额totalorder int 订单总数 连续两天的订单总数任务C:数据挖掘(10分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; 主节点MySQL数据库用户名/密码:root/123456(已配置远程连接); Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/ Spark任务在Yarn上用Client运行,方便观察日志。 该任务均使用Scala编写,利用Spark相关库完成。子任务一:特征工程根据Hive的dwd库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,输出格式如下,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;结果格式如下:-------------------相同种类前10的id结果展示为:--------------------1,2,901,4,5,21,32,91,14,52根据Hive的dwd库中相关表或MySQL中shtd_store中相关商品表(sku_info),获取id、spu_id、price、weight、tm_id、category3_id 这六个字段并进行数据预处理,对price、weight进行规范化(StandardScaler)处理,对spu_id、tm_id、category3_id进行one-hot编码处理(若该商品属于该品牌则置为1,否则置为0),并按照id进行升序排序,在集群中输出第一条数据前10列(无需展示字段名),将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。字段 类型 中文含义 备注id double 主键price double 价格weight double 重量spu_id#1 double spu_id 1 若属于该spu_id,则内容为1否则为0spu_id#2 double spu_id 2 若属于该spu_id,则内容为1否则为0..... doubletm_id#1 double 品牌1 若属于该品牌,则内容为1否则为0tm_id#2 double 品牌2 若属于该品牌,则内容为1否则为0…… doublecategory3_id#1 double 分类级别3 1 若属于该分类级别3,则内容为1否则为0category3_id#2 double 分类级别3 2 若属于该分类级别3,则内容为1否则为0……结果格式如下:--------------------第一条数据前10列结果展示为:---------------------1.0,0.892346,1.72568,0.0,0.0,0.0,0.0,1.0,0.0,0.0子任务二:推荐系统根据子任务一的结果,计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户id(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),并根据Hive的dwd库中相关表或MySQL数据库shtd_store中相关表,获取到这10位用户已购买过的商品,并剔除用户6708已购买的商品,通过计算这10位用户已购买的商品(剔除用户6708已购买的商品)与用户6708已购买的商品数据集中商品的余弦相似度累加再求均值,输出均值前5商品id作为推荐使用,将执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。结果格式如下:------------------------推荐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)任务D:数据采集与实时计算(20分)环境说明:服务端登录地址详见各任务服务端说明。 补充说明:各主机可通过Asbru工具或SSH客户端进行SSH访问; Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。子任务一:实时数据采集在主节点使用Flume采集实时数据生成器10050端口的socket数据,将数据存入到Kafka的Topic中(Topic名称为order,分区数为4),使用Kafka自带的消费者消费order(Topic)中的数据,将前2条数据的结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下;采用多路复用模式,Flume接收数据注入kafka 的同时,将数据备份到HDFS目录/user/test/flumebackup下,将查看备份目录下的第一个文件的前2条数据的命令与结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。子任务二:使用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)。使用Flink消费Kafka中的数据,统计商城实时订单实收金额,将key设置成totalprice存入Redis中。使用redis cli以get key方式获取totalprice值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,监控若发现order_status字段为退回完成, 将key设置成totalrefundordercount存入Redis中,value存放用户退款消费额。使用redis cli以get key方式获取totalrefundordercount值,将结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,需两次截图,第一次截图和第二次截图间隔1分钟以上,第一次截图放前面,第二次截图放后面;在任务1进行的同时,使用侧边流,监控若发现order_status字段为取消订单,将数据存入MySQL数据库shtd_result的order_info表中,然后在Linux的MySQL命令行中根据id降序排序,查询列id、consignee、consignee_tel、final_total_amount、feight_fee,查询出前5条,将SQL语句复制粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下,将执行结果截图粘贴至客户端桌面【Release\任务D提交结果.docx】中对应的任务序号下。任务E:数据可视化(15分)环境说明:数据接口地址及接口描述详见各任务服务端说明。子任务一:用柱状图展示消费额最高的省份编写Vue工程代码,根据接口,用柱状图展示2020年消费额最高的5个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\任务E提交结果.docx】中对应的任务序号下。子任务二:用柱状图展示消费额最低的省份编写Vue工程代码,根据接口,用柱状图展示2020年消费额最低的5个省份,同时将用于图表展示的数据结构在浏览器的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】中对应的任务序号下。任务F:综合分析(10分)子任务一:Flink有哪些重启策略?各个重启策略如何配置?在任务D中使用到了Flink,Flink在运行job时可能会出现各种问题,从而会导致其失败或者重启,对于类似于网络波动造成的运行失败可以采取相对应重启策略来重试,请问Flink有几种重启策略(中文)?分别怎么配置这些重启策略?将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务二:Hadoop有哪些类型的调度器?简要说明其工作方法。简要描述Hadoop有哪些类型的调度器并简要说明其工作方法,将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。子任务三:分析下一年度的建仓目的地。根据任务E的图表,分析各省份的经济现状,公司决定挑选3个省份进行仓储建设,请问应该在哪些省份建设?将内容编写至客户端桌面【Release\任务F提交结果.docx】中对应的任务序号下。十、赛项安全(一)比赛环境1. 赛场的布置,赛场内的器材、设备,应符合国家有关安全规定。2. 赛场周围要设立警戒线,防止无关人员进入和发生意外事件。3. 承办院校应提供保障应急预案实施的条件,明确制度和预案。4. 赛项执委会须会同承办院校制定开放赛场和体验区的人员疏导方案。5. 大赛期间,赛项承办院校须在赛场设置医疗医护工作站。6. 参赛选手、赛项裁判、工作人员严禁携带通讯、摄录设备和未经许可的记录用具进入比赛区域。(二)生活环境1. 比赛期间,原则上由赛项承办院校统一安排参赛选手食宿。承办院校须尊重少数民族参赛人员的宗教信仰及文化习俗。2. 比赛期间安排的住宿场所应具有旅游业经营许可资质。3. 大赛期间组织的参观和观摩活动的交通安全由赛区组委会负责。(三)组队责任1. 各省、自治区、直辖市在组织参赛队时,须安排为参赛选手购买大赛期间的人身意外伤害保险。2. 各学校代表队组成后,须制定相关管理制度,并对所有选手进行安全教育。3. 各参赛队伍须加强对参与比赛人员的安全管理,实现与赛场安全管理的对接。(四)应急处理比赛期间发生意外事故,发现者应第一时间报告赛项执委会,同时采取措施避免事态扩大。赛项执委会应立即启动预案予以解决并报告赛区执委会。十一、成绩评定(一)评分标准表11-1 评分标准任务 子任务 主要知识与技能点 分值任务A:大数据平台搭建(容器环境) 子任务一:Hadoop完全分布式安装配置 Hadoop完全分布式下的JDK的解压安装、JDK环境变量配置、节点配置、Hadoop配置文件修改、运行测试等 7子任务二:Spark on Yarn安装配置 Spark的解压安装、环境变量配置、on Yarn配置、运行测试等 4子任务三:HBase分布式安装配置 HBase的解压安装、环境变量配置、运行测试等 4小计 15任务B:离线数据处理 子任务一:数据抽取 从MySQL中进行离线数据抽取到Hive、Hudi的相关操作 6子任务二:数据清洗 从ods到dwd的数据清洗,包括全量数据抽取、数据合并、数据排序、去重、数据类型转换等操作 6子任务三:指标计算 在dwd、dws层进行任务调度,对数据进行相关数据指标的统计、计算等操作,将结果存入MySQL、ClickHouse中 13小计 25任务C:数据挖掘 子任务一:特征工程 对推荐系统的数据集进行特征提取及数据预处理等操作 5子任务二:推荐系统 基于用户的推荐系统设计开发操作 5小计 10任务D:数据采集与实时计算 子任务一:实时数据采集 基于Flume和Kafka的实时数据采集,包括Flume采集配置、数据注入Kafka等操作 8子任务二:使用Flink处理Kafka中的数据 使用Flink消费Kafka中的数据进行实时计算,包括Kafka基本操作、实时数据统计计算、HBase基本操作、Redis基本操作、MySQL基本操作等 12小计 20任务E:数据可视化 子任务一:用柱状图展示消费额最高的省份 正确使用Vue.js框架,结合ECharts绘制柱状图 3子任务二:用柱状图展示消费额最低的省份 正确使用Vue.js框架,结合ECharts绘制柱状图 3子任务三:用折线图展示每年上架商品数量变化 正确使用Vue.js框架,结合ECharts绘制折线图 2子任务四:用条形图展示平均消费额最高的省份 正确使用Vue.js框架,结合ECharts绘制条形图 3子任务五:用折柱混合图展示省份平均消费额和地区平均消费额 正确使用Vue.js框架,结合ECharts绘制折柱混合图 4小计 15任务F:综合分析 子任务一:Flink有哪些重启策略?各个重启策略如何配置? 正确分析Flink的重启策略 4子任务二:Hadoop有哪些类型的调度器?简要说明其工作方法。 正确分析Hadoop的调度器 3子任务三:分析下一年度的建仓目的地。 根据可视化图表,合理分析下一年度的建仓目的地 3小计 10任务G:职业素养 考察职业素养 竞赛团队分工明确合理、操作规范、文明竞赛 5小计 5总分 100(二)评分方式1. 裁判人数和组成条件要求本竞赛参与赛项成绩管理的组织机构包括裁判组、监督仲裁组。裁判组实行“裁判长负责制”,设裁判长1名、加密裁判3名、现场裁判12名、评分裁判20名,共计36人,要求如下:表11-2 裁判要求职责 专业技术方向 知识能力要求 执裁、教学、工作经历 专业技术职称 (职业资格等级) 人数裁判长 电子与信息 信息技术 执裁过全国职业院校技能大赛,教授过信息技术相关课程 高级职称 1现场裁判 电子与信息 信息技术 执裁过省级竞赛,教授过信息技术相关课程 高级职称 12评分裁判 电子与信息 信息技术 执裁过省级竞赛,教授过信息技术相关课程 高级职称 20加密裁判 无 无 无 高级职称 3监督仲裁组对裁判组的工作进行全程监督,并对竞赛成绩抽检复核。监督仲裁组负责接受由参赛队领队提出的对裁判结果的书面申诉,组织复议并及时反馈复议结果。竞赛将制定裁判遴选管理办法、赛事保密细则和预案、命题管理办法等制度,保证竞赛的公平公正。2. 裁判评分方法本赛项采取三次加密,第一次加密裁判组织参赛选手第一次抽签,抽取参赛编号,替代选手参赛证等个人信息;第二次加密裁判组织参赛选手进行第二次抽签,确定赛位号,替换选手参赛编号;第三次加密裁判对各参赛队竞赛结果进行加密,替换赛位号。每个环节结束后,数据立即封存于承办校保密室保险柜内,加密裁判直接隔离,在评分结束后进行解密并统计成绩。本赛项采用结果评分,所有任务均为客观评分。根据评分标准设计评分表,对照参考答案和选手提交结果进行评分,并在评分表中进行统计汇总。裁判需进行随机抽签分组,各裁判小组采取随机抽签针对不同任务独立评分,确保成绩评定严谨、客观、准确。3. 成绩产生方法各裁判小组完成本组评分后汇总本组评分表,核对成绩,本组裁判成员签字确认后交予裁判长,裁判长汇总各小组的各任务评分表,核对成绩,最终得出竞赛成绩。4. 成绩审核方法为保障成绩评判的准确性,监督仲裁组将对赛项总成绩排名前30%的所有参赛队的成绩进行复核;对其余成绩进行抽检复核,抽检覆盖率不得低于15%。如发现成绩错误以书面方式及时告知裁判长,由裁判长更正成绩并签字确认。复核、抽检错误率超过5%的,裁判组将对所有成绩进行复核。5. 成绩公布方法最终竞赛成绩经复核无误,加密裁判在监督人员监督下进行三次解密,解密后由裁判长、监督仲裁长签字确认,以纸质形式向全体参赛队进行公布,并在闭赛式上予以宣布。十二、奖项设置本赛项奖项设团体奖。设奖比例为:以赛项实际参赛队总数为基数,一、二、三等奖获奖比例分别为10、20、30(小数点后四舍五入)。如出现参赛队总分相同情况,按照任务分值权重顺序的得分高低排序,即总成绩相同的情况下比较任务C的成绩,任务C成绩高的排名优先,如果任务C成绩也相同,则按任务D、任务B、任务A、任务E、任务F的成绩进行排名,以此类推完成相同成绩的排序。如果所有任务分值相同,则查看文档撰写规范、职业素养的分值进行排序。十三、赛项预案赛场备用工位:赛场提供占总参赛队伍10%的备用工位。竞赛系统可靠性:竞赛系统使用的服务器应进行冗余,数据库、存储应使用高可用架构。提前开始运行,经过多次压力测试,由学校组织的真实竞赛环境测试。竞赛备用服务器、客户机:现场提供占总参赛队伍10%的备用服务器、客户机。现场应急预案详情,如下:(1)服务器问题预案若服务器在比赛过程中出现卡顿、死机等情况,参赛选手举手示意裁判,在裁判与技术支持人员确定情况后,可更换服务器。更换服务器的等待时间,可在比赛结束后延时。(2)交换机问题预案若交换机在比赛过程中出现传输速度慢或无故中断等情况,参赛选手举手示意裁判,在裁判与技术支持人员确定情况后,可更换交换机。更换交换机的等待时间,可在比赛结束后延时。(3)PC机问题预案若PC机在比赛过程中出现死机、蓝屏等现象(重启后无法解决),参赛选手举手示意裁判,在裁判与技术支持人员确定情况后,可更换备用工位或更换PC机进行答题。十四、竞赛须知(一)参赛队须知1. 参赛队应该参加赛项承办单位组织的闭赛式等各项赛事活动。2. 在赛事期间,领队及参赛队其他成员不得私自接触裁判,凡发现有弄虚作假者,取消其参赛资格,成绩无效。3. 所有参赛人员须按照赛项规程要求按照完成赛项评价工作。4. 对于有碍比赛公正和比赛正常进行的参赛队,视其情节轻重,按照《全国职业院校技能大赛奖惩办法》给予警告、取消比赛成绩、通报批评等处理。其中,对于比赛过程及有关活动造成重大影响的,以适当方式通告参赛院校或其所属地区的教育行政主管部门依据有关规定给予行政或纪律处分,同时停止该院校参加全国职业院校技能大赛1年(届)。涉及刑事犯罪的移交司法机关处理。5. 各省、自治区、直辖市在组织参赛队时,须安排为参赛队购买大赛期间的人身意外伤害保险。(二)领队须知1. 各参赛代表队要发扬良好道德风尚,听从指挥,服从裁判,不弄虚作假。如发现弄虚作假者,取消参赛资格,名次无效。2. 各代表队领队要坚决执行竞赛的各项规定,加强对参赛人员的管理,做好赛前准备工作,督促选手带好证件等竞赛相关材料。3. 竞赛过程中,除参加竞赛的选手、执行裁判员、现场工作人员和经批准的人员外,领队、其他人员一律不得进入竞赛现场。4. 参赛代表队若对竞赛过程有异议,在规定的时间内由领队向赛项仲裁工作组提出书面报告。5. 对申诉的仲裁结果,领队要带头服从和执行,并做好选手工作。参赛选手不得因申诉或对处理意见不服而停止竞赛,否则以弃权处理。6. 领队应及时查看大赛专用网页有关赛项的通知和内容,认真研究和掌握本赛项竞赛的规程、技术规范和赛场要求,指导选手做好赛前的一切技术准备和竞赛准备。(三)参赛选手须知1. 参赛选手在报名获得确认后,原则上不再更换。如在筹备过程中,选手因故不能参赛,需出具书面说明并按相关参赛选手资格要求补充人员并接受审核;竞赛开始后,参赛队不得更换参赛选手,允许队员缺席。2. 参赛选手严格遵守赛场规章、操作规程和工艺准则,保证人身及设备安全,接受裁判员的监督和警示,文明竞赛。3. 参赛选手凭证进入赛场,在赛场内操作期间应当始终佩戴参赛凭证以备检查。4. 参赛选手进入赛场,不允许携带任何书籍和其他纸质资料(相关技术资料的电子文档工作人员提供),不允许携带通讯工具和存储设备(如U盘)。竞赛统一提供计算机以及应用软件。5. 各参赛队应在竞赛开始前一天规定的时间段进入赛场熟悉环境。入场后,赛场工作人员与参赛选手共同确认操作条件及设备状况,参赛队员必须确认材料、工具等。6. 竞赛时,在收到开赛信号前不得启动操作设备。在指定赛位上完成竞赛项目,严禁作弊行为。7. 竞赛过程中,因严重操作失误或安全事故不能进行比赛的,现场裁判员有权中止该队比赛。8. 选手在比赛期间不能离场,食品、饮水等由赛场统一提供。选手休息、饮食或入厕时间均计算在比赛时间内。9. 凡在竞赛期间提前离开的选手,当天不得返回赛场。10. 为培养技术技能人才的工作风格,在参赛期间,选手应当注意保持工作环境及设备摆放符合企业生产“5S”(即整理、整顿、清扫、清洁和素养)的原则,如果过于脏乱,裁判员有权酌情扣分。11. 在竞赛中如遇非人为因素造成的设备故障,经裁判员确认后,可向裁判长申请补足排除故障的时间。12. 参赛选手欲提前结束比赛,应向裁判员举手示意,由裁判员记录竞赛终止时间。竞赛终止后,不得再进行任何与竞赛有关的操作。13. 各竞赛队按照大赛要求和赛题要求提交竞赛结果,禁止在竞赛结果上做任何与竞赛无关的记号。14. 竞赛操作结束后,参赛队要确认成功提交竞赛要求的文件,裁判员在比赛结果的规定位置做标记,并与参赛队一起签字确认。15. 仪容仪表:参赛选手需以端庄的仪容仪表,优雅的行为举止,标准规范的操作进行竞赛。(四)工作人员须知1. 赛项全体工作人员必须服从统一指挥,要以高度负责的态度做好比赛服务工作。2. 全体工作人员要按照工作分区准时到岗,尽职尽责,做好职责工作并做好临时性工作,保证比赛顺利进行。3. 全体工作人员必须佩戴标志,认真检查证件,经核对无误后方可允许相关人员进入指定地点。4. 如遇突发事件要及时报告,同时做好疏导工作,避免重大事故发生,确保大赛圆满成功。5. 各工作组负责人,要坚守岗位,组织落实本组成员高效率完成各自工作任务,做好监督协调工作。6. 全体工作人员不得在比赛场内接打电话,以保证赛场设施的正常工作。十五、申诉与仲裁(一)各参赛队对不符合大赛和赛项规程规定的仪器、设备、工装、材料、物件、计算机软硬件、竞赛使用工具、用品,竞赛执裁、赛场管理,以及工作人员的不规范行为等,可向赛项监督仲裁组提出申诉。申诉主体为参赛队领队。参赛队领队可在比赛结束后(选手赛场比赛内容全部完成)2小时之内向监督仲裁组提出书面申诉。(二)书面申诉应对申诉事件的现象、发生时间、涉及人员、申诉依据等进行充分、实事求是的叙述,并由领队亲笔签名。非书面申诉不予受理。(三)赛项仲裁工作组在接到申诉报告后的2小时内组织复议,并及时将复议结果以书面形式告知申诉方。申诉方对复议结果仍有异议,可由领队向赛区仲裁委员会提出申诉。赛区仲裁委员会的仲裁结果为最终结果。(四)仲裁结果由申诉人签收,不能代收,如在约定时间和地点申诉人离开,视为自行放弃申诉。(五)申诉方可随时提出放弃申诉。(六)申诉方不得以任何理由采取过激行为扰乱赛场秩序。十六、竞赛观摩本赛项应须提供公开观摩区。竞赛环境依据竞赛需求和职业特点设计,在竞赛不被干扰的前提下安全开放部分赛场。现场观摩应遵守如下纪律:(一)观摩人员需由赛项执委会批准,佩戴观摩证件在工作人员带领下沿指定路线、在指定区域内到现场观赛。(二)文明观赛,不得大声喧哗,服从赛场工作人员的指挥,杜绝各种违反赛场秩序的不文明行为。(三)观摩人员不得进入比赛区域,不可接触设备,同参赛选手、裁判交流,不得传递信息,不得采录竞赛现场数据资料,不得影响比赛的正常进行。(四)观摩者不可携带手机、平板电脑、智能手表等通讯工具进入赛场,对于各种违反赛场秩序的不文明行为,工作人员有权予以提醒、制止。十七、竞赛直播本赛项使用大屏幕实时转播现场实况。(一)直播方式1. 赛场内部署无盲点录像设备,能实时录制并播送赛场情况。2. 赛场外有大屏幕或投影,同步显示赛场内竞赛状况。(二)直播安排1. 对赛项赛场准备、开赛式和闭赛式、比赛期间进行录像。2. 从竞赛正式开始后,全程进行赛场实时录像直播。(三)直播内容1. 赛项执行委员会安排专人对赛项开闭赛式、比赛过程进行全程直播和录像。2. 制作参赛选手、领队采访实录,裁判专家点评和企业人士采访视频资料,突出赛项的技能重点与优势特色。为宣传、仲裁、资源转化提供全面的信息资料。以上内容通过赛项网站进行公开,提交技能大赛官网。十八、赛项成果赛项资源转化工作以提升职业院校学生技能水平、引领职业学校专业建设和教学改革为宗旨,形成满足职业教育教学需求、体现先进教学模式、反映职业教育先进水平的共享性资源成果。(一)成果形式资源转化成果包括基本资源和拓展资源。1. 基本资源包括:风采展示、技能概要、教学资源等。2. 拓展资源包括:理论试题库、项目案例库、技能素材库等。(二)主要内容1. 基本资源风采展示:制作赛项宣传片、获奖代表队(选手)风采展示片。技能概要:制作赛项技能介绍、技能操作要点、评价指标等材料。教学资源:制作赛课融通教材、在线课程资源、学术交流资料、教学改革模式成果等资源。2. 拓展资源理论试题库:制作相关理论知识的试题库。项目案例库:制作以企业真实项目为载体的案例库。技能素材库:制作相关实操技术技能的素材库。(三)方法途径1. 基本资源风采展示:对赛项整体流程进行摄影摄像,对获奖代表队(选手)进行采访,最终形成可供专业媒体宣传播放的风采展示。技能概要:参考《职业教育专业简介》、赛项所属产业或覆盖行业中的标准与规范,制作技能介绍、技能操作要点、评价指标等材料,对接院校人才培养方案及企业岗位人才需求。教学资源:以活页式教材、一体化教材模式,开发以学生为中心、以项目为纽带、以任务为载体、以工作过程为导向的赛课融通教材;以文本、视频、演示文稿等形式,开发以教授学生能力为目标的在线课程资源;组织参赛队开展学术交流,针对课程体系设计、教学模式改革、备赛训练经验等内容进行分享交流;组织职业院校开展教学改革研讨,分享各院校在人才培养模式、师资团队建设、产教融合实践等方面的教学改革模式成果。2. 拓展资源理论试题库:针对赛项理论知识进行细分并完成试题库设计,最终以选择、判断、填空等形式表现。项目案例库:选取多个企业真实项目进行案例库设计,最终以项目化实训指导文档、实际操作视频等形式表现。技能素材库:针对赛项技术技能进行细分并完成素材库设计,最终以知识点讲义文档、实训指导文档、教学演示文稿、实际操作视频等形式表现。(四)目标数量和完成时间资源转化及开发计划如下所示:表 18-1 资源转化表资源名称 表现形式 资源数量 资源要求 完成时间基本资源 风采展示 赛项宣传片 视频 1个 15分钟以上 赛后30天内完成风采展示片 视频 1个 10分钟以上 赛后30天内完成技能概要 技能介绍 文本文档 1份 约10千字 赛后90天内完成技能要点 文本文档 1份 赛后90天内完成评价指标 文本文档 1份 赛后90天内完成教学资源 赛课融通教材 文本文档 1项 约50千字 赛后90天内完成在线课程资源 文本文档 40个 约20千字 赛后90天内完成演示文稿 40个 配套使用演示文稿 赛后90天内完成教学视频 40个 配套使用教学视频 赛后90天内完成学术交流资料 视频 1个 10分钟以上 赛后90天内完成教学改革模式成果 视频 1个 10分钟以上 赛后90天内完成拓展资源 理论试题库 文本文档 7份 约10千字 赛后90天内完成项目案例库 文本文档 7份 约10千字 赛后90天内完成素材资源库 文本文档 40个 约20千字 赛后90天内完成演示文稿 40个 配套使用演示文稿 赛后90天内完成教学视频 40个 配套使用教学视频 赛后90天内完成 展开更多...... 收起↑ 资源列表 GZ033 大数据应用开发赛题第01套.docx GZ033 大数据应用开发赛题第02套.docx GZ033 大数据应用开发赛题第03套.docx GZ033 大数据应用开发赛题第04套.docx GZ033 大数据应用开发赛题第05套.docx GZ033 大数据应用开发赛题第06套.docx GZ033 大数据应用开发赛题第07套.docx GZ033 大数据应用开发赛题第08套.docx GZ033 大数据应用开发赛题第09套.docx GZ033 大数据应用开发赛题第10套.docx GZ033大数据应用开发赛项规程(师生同赛).docx