高职 大数据技术与应用 任务书1赛项赛题Word格式.docx
《高职 大数据技术与应用 任务书1赛项赛题Word格式.docx》由会员分享,可在线阅读,更多相关《高职 大数据技术与应用 任务书1赛项赛题Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
服务端登录地址详见各模块服务端说明。
补充说明:
宿主机可通过Asbru工具或SSH客户端进行SSH访问;
相关软件安装包在宿主机的/opt目录下,请选择对应的安装包进行安装,用不到的可忽略;
所有模块中应用命令必须采用绝对路径;
从本地仓库中拉取镜像,并启动3个容器
进入Master节点的方式为
dockerexec–itmaster/bin/bash
进入Slave1节点的方式为
dockerexec–itslave1/bin/bash
进入Slave2节点的方式为
dockerexec–itslave2/bin/bash
同时将/opt目录下的所有安装包移动到3个容器节点中。
任务一:
Hadoop完全分布式安装配置
本环节需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。
命令中要求使用绝对路径,具体要求如下:
1、将Master节点JDK安装包解压并移动到/usr/java路径(若路径不存在,则需新建),将命令复制并粘贴至对应报告中;
2、修改/root/profile文件,设置JDK环境变量,配置完毕后在Master节点分别执行“java”和“javac”命令,将命令行执行结果分别截图并粘贴至对应报告中;
3、请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,使用绝对路径从Master节点复制JDK解压后的安装文件到Slave1、Slave2节点,并配置相关环境变量,将全部复制命令复制并粘贴至对应报告中;
4、在Master节点将Hadoop解压到/opt目录下,并将解压包分发至Slave1、Slave2节点中,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果复制粘贴至对应报告中;
5、启动Hadoop集群,查看Master节点jps进程,将查看结果复制粘贴至对应报告中。
任务二:
SparkonYarn安装配置
本环节需要使用root用户完成相关配置,已安装Hadoop及需要配置前置环境,具体要求如下:
1、将scala包解压到/usr/路径,配置环境变量使其生效,将完整命令复制粘贴至对应报告中(若已安装,则可跳过);
2、配置/root/profile文件,设置Spark环境变量,并使环境变量生效将环境变量配置内容复制粘贴至对应报告中;
3、完成onyarn相关配置,使用sparkonyarn的模式提交$SPARK_HOME/examples/jars/spark-examples_2.11-2.1.1.jar运行的主类为org.apache.spark.examples.SparkPi,将运行结果粘贴至对应报告中。
任务三:
FlinkonYarn安装配置
1、将Flink包解压到路径/opt目录下,将完整命令复制粘贴至对应报告中;
2、修改/root/profile文件,设置Flink环境变量,并使环境变量生效将环境变量配置内容复制粘贴至对应报告中;
3、开启Hadoop集群,在yarn上以perjob模式(即Job分离模式,不采用Session模式)运行$FLINK_HOME/examples/batch/WordCount.jar,将运行结果最后10行复制粘贴至对应报告中。
示例:
flinkrun-myarn-cluster-p2-yjm2G-ytm2G$FLINK_HOME/examples/batch/WordCount.jar
模块B:
离线数据处理(25分)
各主机可通过Asbru工具或SSH客户端进行SSH访问;
Master节点MySQL数据库用户名/密码:
root/123456(已配置远程连接);
Hive的元数据启动命令为:
nohuphive--servicemetastore&
Hive的配置文件位于/opt/apache-hive-2.3.4-bin/conf/
Spark任务在Yarn上用Client运行,方便观察日志。
数据抽取
编写Scala工程代码,将MySQL的shtd_store库中表CUSTOMER、NATION、PART、PARTSUPP、REGION、SUPPLIER的数据全量抽取到Hive的ods库中对应表customer,nation,part,partsupp,region,supplier中,将表ORDERS、LINEITEM的数据增量抽取到Hive的ods库中对应表ORDERS,LINEITEM中。
1、抽取shtd_store库中CUSTOMER的全量数据进入Hive的ods库中表customer。
字段排序、类型不变,同时添加静态分区,分区字段类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。
并在hivecli执行showpartitionsods.customer命令,将结果截图复制粘贴至对应报告中;
2、抽取shtd_store库中NATION的全量数据进入Hive的ods库中表nation。
并在hivecli执行showpartitionsods.nation命令,将结果截图复制粘贴至对应报告中;
3、抽取shtd_store库中PART的全量数据进入Hive的ods库中表part。
并在hivecli执行showpartitionsods.part命令,将结果截图复制粘贴至对应报告中;
4、抽取shtd_store库中PARTSUPP的全量数据进入Hive的ods库中表partsupp。
并在hivecli执行showpartitionsods.partsupp命令,将结果截图复制粘贴至对应报告中;
5、抽取shtd_store库中REGION的全量数据进入Hive的ods库中表region,字段排序、类型不变,同时添加静态分区,分区字段类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。
并在hivecli执行showpartitionsods.region命令,将结果截图复制粘贴至对应报告中;
6、抽取shtd_store库中SUPPLIER的全量数据进入Hive的ods库中表supplier,字段排序、类型不变,同时添加静态分区,分区字段类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。
并在hivecli执行showpartitionsods.supplier命令,将结果截图复制粘贴至对应报告中;
7、抽取shtd_store库中ORDERS的增量数据进入Hive的ods库中表orders,要求只取某年某月某日及之后的数据(包括某年某月某日),根据ORDERS表中ORDERKEY作为增量字段(提示:
对比MySQL和Hive中的表的ORDERKEY大小),只将新增的数据抽入,字段类型不变,同时添加动态分区,分区字段类型为String,且值为ORDERDATE字段的内容(ORDERDATE的格式为yyyy-MM-dd,分区字段格式为yyyyMMdd),。
并在hivecli执行selectcount(distinct(dealdate))fromods.orders命令,将结果截图复制粘贴至对应报告中;
8、抽取shtd_store库中LINEITEM的增量数据进入Hive的ods库中表lineitem,根据LINEITEM表中orderkey作为增量字段,只将新增的数据抽入,字段类型不变,同时添加静态分区,分区字段类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。
并在hivecli执行showpartitionsods.lineitem命令,将结果截图复制粘贴至对应报告中。
数据清洗
编写Scala工程代码,将ods库中相应表数据全量抽取到Hive的dwd库中对应表中。
表中有涉及到timestamp类型的,均要求按照yyyy-MM-ddHH:
mm:
ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:
00:
00,添加之后使其符合yyyy-MM-ddHH:
ss。
1、将ods库中customer表数据抽取到dwd库中dim_customer的分区表,分区字段为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均填写操作时间,并进行数据类型转换。
在hivecli中按照cust_key顺序排序,查询dim_customer前1条数据,将结果内容复制粘贴至对应报告中;
2、将ods库中part表数据抽取到dwd库中dim_part的分区表,分区字段为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均填写操作时间,并进行数据类型转换。
在hivecli中按照part_key顺序排序,查询dim_part前1条数据,将结果内容复制粘贴至对应报告中;
3、将ods库中nation表数据抽取到dwd库中dim_nation的分区表,分区字段为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均填写操作时间,并进行数据类型转换。
在hivecli中按照nation_key顺序排序,查询dim_nation前1条数据,将结果内容复制粘贴至对应报告中;
4、将ods库中region表数据抽取到dwd库中dim_region的分区表,分区字段为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均填写操作时间,并进行数据类型转换。
在hivecli中按照region_key顺序排序,查询dim_region表前1条数据,将结果内容复制粘贴至对应报告中;
5、将ods库中orders表数据抽取到dwd库中fact_orders的分区表,分区字段为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均填写操作时间,并进行数据类型转换。
在执行hivecli执行selectcount(distinct(dealdate))fromdwd.fact_orders命令,将结果内容复制粘贴至对应报告中;
6、待任务5完成以后,需删除ods.orders中的分区,仅保留最近的三个分区。
并在hivecli执行showpartitionsods.orders命令,将结果截图粘贴至对应报告中;
7、将ods库中lineitem表数据抽取到dwd库中fact_lineitem的分区表,分区字段为etldate且值与ods库的相对应表该值相等,抽取的条件为根据orderkey和partkey进行去重,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写操作时间,并进行数据类型转换。
在hivecli执行showpartitionsdwd.fact_lineitem命令,将结果截图粘贴至对应报告中。
指标计算
1、编写Scala工程代码,根据dwd层表统计每个地区、每个国家、每个月下单的数量和下单的总金额,存入MySQL数据库shtd_store的nationeverymonth表(表结构如下)中,然后在Linux的MySQL命令行中根据订单总数、消费总额、国家表主键三列均逆序排序的方式,查询出前5条,将SQL语句与执行结果截图粘贴至对应报告中;
字段
类型
中文含义
备注
nationkey
int
国家表主键
nationname
text
国家名称
regionkey
地区表主键
regionname
地区名称
totalconsumption
double
消费总额
当月消费订单总额
totalorder
订单总数
当月订单总额
year
年
订单产生的年
month
月
订单产生的月
2、请根据dwd层表计算出某年每个国家的平均消费额和所有国家平均消费额相比较结果(“高/低/相同”),存入MySQL数据库shtd_store的nationavgcmp表(表结构如下)中,然后在Linux的MySQL命令行中根据订单总数、消费总额、国家表主键三列均逆序排序的方式,查询出前5条,将SQL语句与执行结果截图粘贴至对应报告中;
nationavgconsumption
该国家内客单价
该国家已购买产品的人均消费额
allnationavgconsumption
所有国家内客单价
所有国家已购买的产品的人均消费额
comparison
string
比较结果
国家内人均和所有国家人均相比
结果有:
高/低/相同
3、编写Scala工程代码,根据dwd层表统计连续两个月下单并且下单金额保持增长的用户,订单发生时间限制为大于等于某年,存入MySQL数据库shtd_store的usercontinueorder表(表结构如下)中。
然后在Linux的MySQL命令行中根据订单总数、消费总额、客户主键三列均逆序排序的方式,查询出前5条,将SQL语句与执行结果截图粘贴至对应报告中。
custkey
客户主键
custname
客户名称
记录当前月和下月,用下划线‘_’相连
例如:
202201_202202
表示2022年1月到2月用户连续下单。
连续两月的订单总额
连续两月的订单总数
模块C:
数据挖掘(10分)
该模块均使用Scala编写,利用Spark相关库完成。
特征工程
1、根据dwd库中fact_orders表,将其转换为以下类型矩阵:
其中A表示用户A,B表示用户B,矩阵中的【0,1】值为1表示A用户与B用户之间购买了1个相同的零件,0表示A用户与B用户之间没有购买过相同的零件。
将矩阵保存为txt文件格式并存储在HDFS上,使用命令查看文件前2行,将执行结果截图粘贴至对应报告中;
2、对dwd库中dim_part获取partkey、mfgr、brand、size、retailprice五个字段并进行数据预处理,再进行归一化并保存至dwd.fact_part_machine_data中,对制造商与品牌字段进行one-hot编码处理(将制造商与品牌的值转换成列名添加至表尾部,若该零部件属于该品牌则置为1,否则置为0),并按照partkey,size进行顺序排序,然后在Hivecli中执行命令descdwd.fact_part_machine_data中查询出结果,将SQL语句与执行结果截图粘贴至对应报告中。
partkey
零件key
mfgr
制造商
brand
品牌
size
型号
retailprice
价格
Manufacturer#1
制造商1
若属于该制造商,则内容为1否则为0
Manufacturer#2
制造商2
.....
Brand#1
品牌1
若属于该品牌,则内容为1否则为0
Brand#2
品牌2
……
推荐系统
1、根据任务一的结果,获取与该用户相似度(矩阵内的值最高)最高的前10个用户,并结合hive中dwd层的fact_orders表、fact_lineitem表、fact_part_machine_data表,获取到这10位用户已购买过的零部件,并剔除该用户已购买的零部件,并通过计算用户已购买产品与该数据集中余弦相似度累加,输出前5零部件key作为推荐使用。
将输出结果保存至MySQL的part_machine表中。
然后在Linux的MySQL命令行中查询出前5条数据,将SQL语句与执行结果截图粘贴至对应报告中。
模块D:
数据采集与实时计算(20分)
请先检查ZooKeeper、Kafka、Redis端口看是否已启动,若未启动则各启动命令如下:
ZK启动(netstat-ntlp查看2181端口是否打开)
/usr/zk/zookeeper-3.4.6/bin/zkServer.shstart
Redis启动(netstat-ntlp查看6379端口是否打开)
/usr/redis/bin/redis-server/usr/redis/bin/redis.conf
Kafka启动(netstat-ntlp查看9092端口是否打开)
/opt/kafka/kafka_2.11-2.0.0/bin/kafka-server-start.sh-daemon(空格连接下一行)/opt/kafka/kafka_2.11-2.0.0/config/server.properties
Flink任务在Yarn上用perjob模式(即Job分离模式,不采用Session模式),方便Yarn回收资源。
实时数据采集
1、在Master节点使用Flume采集实时数据生成器26001端口的socket数据,将数据存入到Kafka的Topic中(topic名称为order,分区数为4),将Flume的配置截图粘贴至对应报告中;
2、Flume接收数据注入kafka的同时,将数据备份到HDFS目录/user/test/flumebackup下,将备份结果截图粘贴至对应报告中。
使用Flink处理Kafka中的数据
编写Scala工程代码,使用Flink消费Kafka中Topic为order的数据并进行相应的数据统计计算。
1、使用Flink消费Kafka中的数据,统计个人实时订单总额,将key设置成totalprice存入Redis中(再使用hash数据格式,key存放为用户id,value存放为该用户消费总额),使用rediscli以getkey方式获取totalprice值,将结果截图粘贴至对应报告中,需两次截图,第一次截图和第二次截图间隔一分钟以上,第一次截图放前面,第二次放后面。
2、在任务1进行的同时需监控若发现ORDERSTATUS字段为F,将数据存入MySQL表alarmdata中(可考虑侧边流的实现),然后在Linux的MySQL命令行中根据ORDER