大数据赛题

news/2024/4/28 8:31:29

模块A:大数据平台搭建(容器环境)

环境说明:

服务端登录地址详见各模块服务端说明。

补充说明:宿主机可通过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需要配置前置环境。命令中要求使用绝对路径,具体部署要求如下:

  1. 将容器Master节点JDK安装包解压并移动到/opt/module路径中(若路径不存在,则需新建),将命令复制并粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  2. 修改/etc/profile文件,设置JDK环境变量,配置完毕后在master节点分别执行“java -version”和“javac”命令,将命令行执行结果分别截图并粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  3. 请完成host相关配置,将三个节点分别命名为master、slave1、slave2,并做免密登录,用scp命令并使用绝对路径从master复制JDK解压后的安装文件到slave1、slave2节点(若路径不存在,则需新建),并配置slave1、slave2相关环境变量,将全部复制命令复制并粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  4. 在容器Master将Hadoop解压到/opt/module(若路径不存在,则需新建)目录下,并将解压包分发至slave1、slave2中,其中master、slave1、slave2节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode,将初始化命令及初始化结果截图(截取初始化结果结束倒数20行即可)复制粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  5. 启动Hadoop集群(包括hdfs和yarn),使用jps命令查看master节点与slave1节点的java进程,将jps命令与结果截图复制粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下。

任务二:HBase分布式部署

本环节需要使用root用户完成相关配置,安装HBase需要配置Hadoop和ZooKeeper等前置环境。命令中要求使用绝对路径,具体要求如下:

  1. 确认是否完成Hadoop和ZooKeeper的分布式安装部署,若没有请进行安装部署并启动。完成部署后在三个节点分别使用jps命令,并将结果分别截图粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  2. 将容器Master节点HBase安装包解压到/opt/module目录下,将解压命令复制并粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  3. 用scp命令并使用绝对路径从master复制HBase解压后的包分发至slave1、slave2中,并修改相关配置,配置好环境变量,在容器Master节点中运行命令hbase version,将全部复制命令复制并将hbase version命令的结果截图粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  4. 启动HBase后在三个节点分别使用jps命令查看,并将结果分别截图粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;正常启动后在hbase shell中查看命名空间,将查看命名空间的结果截图粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下。

任务三:ClickHouse单机部署

本环节需要使用root用户完成相关配置,具体要求如下:

  1. 将容器Master节点ClickHouse相关安装包解压到/opt/module/clickhouse目录下(若路径不存在,则需新建),将全部解压命令复制并粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  2. 执行启动各个相关脚本,将全部启动命令复制并将执行结果(截取结果最后倒数15行即可)截图粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  3. 设置远程访问并移除默认监听文件(listen.xml),同时由于9000端口被Hadoop占用,需要将clickhouse的端口更改为9001,将上述要求的设置远程访问配置文件配置截图、端口更改后配置文件配置复制并粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下;
  4. 启动clickhouse,启动后查看clickhouse运行状态,并将启动命令复制、查看运行状态命令复制并将执行结果截图粘贴至客户端桌面【Release\模块A提交结果.docx】中对应的任务序号下。

模块B:数据采集

环境说明:

服务端登录地址详见各模块服务端说明。

补充说明:各节点可通过Asbru工具或SSH客户端进行SSH访问;

主节点MySQL数据库用户名/密码:root/123456(已配置远程连接);

Hive的配置文件位于主节点/opt/module/hive-3.1.2/conf/

Spark任务在Yarn上用Client运行,方便观察日志;

建议使用gson解析json数据。

任务一:离线数据采集

编写Scala工程代码,将MySQL的ds_db01库中表order_master、order_detail、coupon_info、coupon_use、product_browse、product_info、customer_inf、customer_login_log、order_cart、customer_level_inf、customer_addr的数据增量抽取到Hive的ods库中对应表order_master、order_detail、coupon_info、coupon_use、product_browse、product_info、customer_inf、customer_login_log、order_cart、customer_level_inf、customer_addr中(ods库中部分表没有数据,正常抽取即可)。 

  1. 抽取ds_db01库中order_master的增量数据进入Hive的ods库中表order_master。根据ods.order_master表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_master命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中order_detail的增量数据进入Hive的ods库中表order_detail。根据ods.order_detail表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_detail命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中coupon_info的增量数据进入Hive的ods库中表coupon_info,根据ods.coupon_info表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.coupon_info命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中coupon_use的增量数据进入Hive的ods库中表coupon_use,增量字段取ods.coupon_use表中get_time、used_time、pay_time中的最大者,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用Hive Cli查询最新分区数据总条数,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中product_browse的增量数据进入Hive的ods库中表product_browse,根据ods.product_browse表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.product_browse命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下。

  1. 抽取ds_db01库中product_info的增量数据进入Hive的ods库中表product_info,根据ods.product_info表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.product_info命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中customer_inf的增量数据进入Hive的ods库中表customer_inf,根据ods.customer_inf表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.customer_inf命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中customer_login_log的增量数据进入Hive的ods库中表customer_login_log,根据ods.customer_login_log表中login_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods. customer_login_log命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中order_cart的增量数据进入Hive的ods库中表order_cart,根据ods.order_cart表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.order_cart命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中customer_addr的增量数据进入Hive的ods库中表customer_addr,根据ods.customer_addr表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods. customer_addr命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

  1. 抽取ds_db01库中customer_level_inf的增量数据进入Hive的ods库中表customer_level_inf,根据ods.customer_level_inf表中modified_time作为增量字段,只将新增的数据抽入,字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd)。使用hive cli执行show partitions ods.customer_level_inf命令,将执行结果截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下。

任务二:实时数据采集

  1. 在主节点使用Flume采集实时数据生成器25001端口的socket数据(实时数据生成器脚本为主节点/data_log目录下的gen_ds_data_to_socket脚本,该脚本为Master节点本地部署且使用socket传输),将数据存入到Kafka的Topic中(Topic名称为ods_mall_log,分区数为2,ZK关于Kafka的信息在其/kafka节点),使用Kafka自带的消费者消费ods_mall_log(Topic)中的数据,查看Topic中的前1条数据的结果,将查看命令与结果完整的截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下;

注:需先启动已配置好的Flume再启动脚本,否则脚本将无法成功启动,启动方式为进入/data_log目录执行./gen_ds_data_to_socket (如果没有权限,请执行授权命令chmod 777 /data_log/gen_ds_data_to_socket)

  1. 实时脚本启动后,在主节点进入到maxwell-1.29.0的解压后目录下(在/opt/module下),配置相关文件并启动,读取主节点MySQL数据的binlog日志(MySQL的binlog相关配置已完毕,只需要关注ds_realtime_db数据库的表)到Kafka的Topic中(Topic名称为ods_mall_data,分区数为2,ZK关于Kafka的信息在其/kafka节点)。使用Kafka自带的消费者消费ods_mall_data(Topic)中的数据,查看Topic中的前1条数据的结果,将查看命令与结果完整的截图粘贴至客户端桌面【Release\模块B提交结果.docx】中对应的任务序号下。

模块C:实时数据处理

环境说明:

服务端登录地址详见各模块服务端说明。

补充说明:各节点可通过Asbru工具或SSH客户端进行SSH访问;

主节点MySQL数据库用户名/密码:root/123456(已配置远程连接);  

Flink任务在Yarn上用per job模式(即Job分离模式,不采用Session模式),方便Yarn回收资源;

建议使用gson解析json数据。

任务一:实时数据清洗

编写Scala代码,使用Flink消费Kafka中Topic为ods_mall_log和ods_mall_data的数据并进行相应的数据统计计算(使用Processing Time)。

  1. 使用Flink消费Kafka中topic为ods_mall_data的数据,根据数据中不同的表将数据分别分发至kafka的DWD层的fact_order_master、fact_order_detail的Topic中(只获取data的内容,具体的内容格式请自查,其分区数均为2),其他的表则无需处理。使用Kafka自带的消费者消费fact_order_master(Topic)的前1条数据,将结果截图粘贴至客户端桌面【Release\模块C提交结果.docx】中对应的任务序号下;

fact_order_master表结构,存储位置:Kafka,存储格式:json

字段

类型

中文含义(和MySQL中相同)

备注

order_id

int

order_sn

string

customer_id

int

shipping_user

string

province

string

city

string

address

string

order_source

int

payment_method

int

order_money

double

district_money

double

shipping_money

double

payment_money

double

shipping_comp_name

string

shipping_sn

string

create_time

timestamp

shipping_time

timestamp

pay_time

timestamp

receive_time

timestamp

order_status

string

order_point

int

invoice_title

string

modified_time

timestamp

fact_order_detail表结构,存储位置:Kafka,存储格式:json

字段

类型

中文含义(和MySQL中相同)

备注

order_detail_id

int

order_sn

string

product_id

int

product_name

string

product_cnt

int

product_price

double

average_cost

double

weight

double

fee_money

double

w_id

int

create_time

timestamp

modified_time

timestamp

  1. 使用Flink消费Kafka中topic为ods_mall_log的数据,根据数据中不同的表前缀区分,过滤出product_browse的数据,将数据分别分发至kafka的DWD层log_product_browse的Topic中,其分区数为2,其他的表则无需处理。使用Kafka自带的消费者消费log_product_browse(Topic)的前1条数据,将结果截图粘贴至客户端桌面【Release\模块C提交结果.docx】中对应的任务序号下。

log_product_browse表结构,存储位置:Kafka,存储格式:json

字段

类型

中文含义(和MySQL中相同)

备注

log_id

long

自增长id

可以使用随机数(0-9)+MMddHHmmssSSS代替

product_id

string

customer_id

int

gen_order

int

order_sn

string

modified_time

timestamp

  1. 在任务1、2进行的同时,需要将order_master、order_detail、product_browse备份至HBase中(若Int类型长度不够,可使用BigInt或Long类型代替),使用HBase Shell查看ods:order_master表的任意2条数据,查看字段为row_key与shipping_user、查看ods:order_detail表的任意2条数据,查看字段为row_key与product_name、查看ods:product_browse表的任意2条数据,查看字段为row_key与order_sn。将结果分别截图粘贴至客户端桌面【Release\模块C提交结果.docx】中对应的任务序号下(截图中不能有乱码)。

三个HBase中的数据结构为:

ods:order_master数据结构如下:

字段

类型

中文含义(和MySQL中相同)

备注

rowkey

string

rowkey

可以使用随机数(0-9)+yyyyMMddHHmmssSSS(date的格式)代替

Info

列族名

order_id

int

order_sn

string

customer_id

int

shipping_user

string

province

string

city

string

address

string

order_source

int

payment_method

int

order_money

double

district_money

double

shipping_money

double

payment_money

double

shipping_comp_name

string

shipping_sn

string

create_time

string

shipping_time

string

pay_time

string

receive_time

string

order_status

string

order_point

int

invoice_title

string

modified_time

string

ods:order_detail数据结构如下:

字段

类型

中文含义(和MySQL中相同)

备注

rowkey

string

rowkey

可以使用随机数(0-9)+yyyyMMddHHmmssSSS(date的格式)代替

Info

列族名

order_detail_id

int

order_sn

string

product_id

int

product_name

string

product_cnt

int

product_price

double

average_cost

double

weight

double

fee_money

double

w_id

int

create_time

string

modified_time

string

ods:product_browse数据结构如下:

字段

类型

中文含义(和MySQL中相同)

备注

rowkey

string

rowkey

该字段使用logid进行拆分,将log_id拆分为随机数和MMddHHmmssSSS两块,在其中插入yyyy(date的格式)

最终格式为:

随机数(0-9)+yyyy

+MMddHHmmssSSS

Info

列族名

log_id

int

该字段缺失,使用随机数(0-9)+ MMddHHmmssSSS(date的格式)

order_sn

string

product_id

int

customer_id

string

gen_order

int

modified_time

double

任务二:实时指标计算

编写Scala工程代码,使用Flink消费Kafka中dwd层的Topic数据,表结构与离线数据表结构相同,时间语义使用Processing Time。

  1. 使用Flink消费kafka中log_product_browse主题的数据,统计商品的UV(浏览用户量)和PV(商品浏览量),将结果写入HBase中的表ads:online_uv_pv中。使用Hive cli(没写错)查询ads.pv_uv_result表按照product_id和pv进行降序排序,查询出10条数据,将结果截图粘贴至客户端桌面【Release\模块C提交结果.docx】中对应的任务序号下;

其中,表空间为:ads,rowkey为:计算时的年月日时分秒+商品id,列族为:info,列名为:商品id,商品名称,uv,pv,modified_time

例:

Rowkey:2022-10-24 16:47:38-13645

  1. 使用Flink消费kafka中fact_order_detail主题的数据,统计商城每分钟的GMV(结果四舍五入保留两位小数),将结果存入redis中(value为字符串格式,仅存GMV),key为store_gmv,使用redis cli以get key方式获取store_gmv值,将每次截图粘贴至客户端桌面【Release\模块C提交结果.docx】中对应的任务序号下(每分钟查询一次,至少查询3次)。

(GMV:所有订单金额,购买商品单价*购买商品数量,包括已下单未付款)

模块D:离线数据处理

环境说明:

服务端登录地址详见各模块服务端说明。

补充说明:各节点可通过Asbru工具或SSH客户端进行SSH访问;

主节点MySQL数据库用户名/密码:root/123456(已配置远程连接);

Hive的配置文件位于主节点/opt/module/hive-3.1.2/conf/

Spark任务在Yarn上用Client运行,方便观察日志;

ClickHouse的jdbc连接端口8123,用户名/密码:default/123456,命令行客户端(tcp)端口9001;

建议使用gson解析json数据。

任务一:离线数据清洗

编写Scala工程代码,将ods库中表order_master、order_detail、coupon_info、coupon_use、product_browse、product_info、customer_inf、customer_login_log、order_cart、customer_level_inf、customer_addr抽取到Hive的dwd库中对应表中。表中有涉及到timestamp类型的,均要求按照yyyy-MM-dd HH:mm:ss,不记录毫秒数,若原数据中只有年月日,则在时分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-dd HH:mm:ss。

  1. 抽取ods库中表customer_inf最新分区数据,并结合dim_customer_inf最新分区现有的数据,根据customer_id合并数据到dwd库中dim_customer_inf的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以customer_id为合并字段,根据modified_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_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查询modified_time为2022年10月01日当天的数据,查询字段为customer_id、customer_email、modified_time、dwd_insert_time、dwd_modify_time,并按照customer_id进行升序排序,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 抽取ods库中表coupon_info最新分区数据,并结合dim_coupon_info最新分区现有的数据,根据coupon_id合并数据到dwd库中dim_coupon_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以coupon_id为合并字段,根据modified_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”。若该条记录第一次进入数仓dwd层则dwd_insert_time、dwd_modify_time均存当前操作时间,并进行数据类型转换。若该数据在进入dwd层时发生了合并修改,则dwd_insert_time时间不变,dwd_modify_time存当前操作时间,其余列存最新的值。使用hive cli执行show partitions dwd.dim_coupon_info命令,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 抽取ods库中表product_info最新分区的数据,并结合dim_product_info最新分区现有的数据,根据product_core合并数据到dwd库中dim_product_info的分区表(合并是指对dwd层数据进行插入或修改,需修改的数据以product_core为合并字段,根据modified_time排序取最新的一条),分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”。若该条记录第一次进入数仓dwd层则dwd_insert_time、dwd_modify_time均存当前操作时间,并进行数据类型转换。若该数据在进入dwd层时发生了合并修改,则dwd_insert_time时间不变,dwd_modify_time存当前操作时间,其余列存最新的值。使用hive cli执行show partitions dwd.dim_product_info命令,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 抽取ods库中表order_master最新分区的数据,并结合HBase中order_master_offline表中的数据合并抽取到dwd库中fact_order_master的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),抽取HBase中的数据时,只抽取2022年10月01日的数据(以rowkey为准),并进行数据类型转换。使用hive cli查询modified_time为2022年10月01日当天的数据,查询字段为order_id、order_sn、shipping_user、create_time、shipping_time,并按照order_id进行升序排序,将结果截图复制粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

ods: order_master_offline数据结构如下:

字段

类型

中文含义

备注

rowkey

string

rowkey

随机数(0-9)+yyyyMMddHHmmssSSS(date的格式)

Info

列族名

order_id

int

order_sn

string

customer_id

int

shipping_user

string

province

string

city

string

address

string

order_source

int

payment_method

int

order_money

double

district_money

double

shipping_money

double

payment_money

double

shipping_comp_name

string

shipping_sn

string

create_time

string

shipping_time

string

pay_time

string

receive_time

string

order_status

string

order_point

int

invoice_title

string

modified_time

string

  1. 抽取ods库中表order_detail表最新分区的数据,并结合HBase中order_detail_offline表中的数据合并抽取到dwd库中fact_order_detail的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),抽取HBase中的数据时,只抽取2022年10月01日的数据(以rowkey为准),并进行数据类型转换。使用hive cli查询modified_time为2022年10月01日当天的数据,查询字段为order_detail_id、order_sn、product_name、create_time,并按照order_detail_id进行升序排序,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

ods:order_detail_offline数据结构如下:

字段

类型

中文含义

备注

rowkey

string

rowkey

随机数(0-9)+yyyyMMddHHmmssSSS(date的格式)

Info

列族名

order_detail_id

int

order_sn

string

product_id

int

product_name

string

product_cnt

int

product_price

double

average_cost

double

weight

double

fee_money

double

w_id

int

create_time

string

modified_time

string

  1. 抽取ods库中表coupon_use最新分区的数据到dwd库中fact_coupon_use的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用hive cli执行show partitions dwd.fact_coupon_use命令,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 抽取ods库中表customer_login_log最新分区的数据到dwd库中log_customer_login的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用hive cli执行show partitions dwd.log_customer_login命令,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 抽取ods库中表order_cart最新分区的数据到dwd库中fact_order_cart的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用hive cli执行show partitions dwd.fact_order_cart命令,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 抽取ods库中表product_browse最新分区的数据,并结合HBase中product_browse_offline表中的数据合并抽取到dwd库中log_product_browse的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),抽取HBase中的数据时,只抽取2022年10月01日的数据(以rowkey为准),并进行数据类型转换。使用hive cli查询modified_time为2022年10月01日当天的数据,查询字段为log_id、product_id、order_sn、modified_time,并按照log_id进行升序排序,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

ods:product_browse_offline数据结构如下:

字段

类型

中文含义

备注

rowkey

string

rowkey

随机数(0-9)+MMddHHmmssSSS 

Info

列族名

log_id

int

product_id

int

customer_id

string

gen_order

int

order_sn

string

modified_time

double

  1. 抽取ods库中表customer_level_inf最新分区的数据到dwd库中dim_customer_level_inf的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用hive cli执行show partitions dwd. dim_customer_level_inf命令,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 抽取ods库中表customer_addr最新分区的数据到dwd库中dim_customer_addr的分区表,分区字段为etl_date且值与ods库的相对应表该值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用hive cli执行show partitions dwd.dim_customer_addr命令,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

  1. 将dwd库中dim_customer_inf、dim_customer_addr、dim_customer_level_inf表的数据关联到dws库中customer_addr_level_aggr的分区表,分区字段为etl_date,类型为String,且值为当前比赛日的前一天日期(分区字段格式为yyyyMMdd),并添加dws_insert_user、dws_insert_time、dws_modify_user、dws_modify_time四列,其中dws_insert_user、dws_modify_user均填写“user1”,dws_insert_time、dws_modify_time均填写当前操作时间(年月日必须是今天,时分秒只需在比赛时间范围内即可),并进行数据类型转换。使用hive cli统计最新分区中得数据总量,将结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下。

任务二:离线指标计算

  1. 编写Scala工程代码,根据dwd的订单表dwd.fact_order_master,求各省份下单时间为2022年的支付转化率,并将计算结果按照下述表结构写入clickhouse的ds_result库的payment_cvr表。在Linux的clickhouse命令行中根据ranking字段查询出转化率前三的省份,将SQL语句与执行结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

注:支付转化率 = 完成支付的订单数 / 已下单

payment_cvr表结构:

字段

类型

中文含义

备注

province

string

省份名

creat_order

int

已下单数

payment

int

已支付的订单数

payCVR

float64

支付转化率

四舍五入保留三位小数

ranking

int

转化率排名

  1. 编写Scala工程代码,根据dwd的fact_order_master表最新分区关联fact_order_detail表,计算所有订单中各商品所有订单(若该订单存在“已退款”状态则该订单不做计算,其余情况都参与计算)总销售金额(购买商品单价*购买商品数量)排名,并将计算结果按照下述表结构写入clickhouse的ds_result库的sales_amount_rank表。然后在Linux的clickhouse命令行中根据sales_rank升序查询前5行,将SQL语句与执行结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下;

sales_amount_rank表结构:

字段

类型

中文含义

备注

product_id

int

订单商品ID

sales_amount

float64

商品总销售金额

四舍五入保留两位小数

product_totalcnt

int

商品销售总数

sales_rank

int

销售金额排名

  1. 编写Scala工程代码,根据dwd的登录日志表dwd.log_customer_login,求login_time字段值为2022-08-10的最近连续三周登录的用户数,并将计算结果按照下述表结构写入clickhouse的ds_result库的continuous_3week表。然后在Linux的clickhouse命令行中根据active_total降序查询,将SQL语句与执行结果截图粘贴至客户端桌面【Release\模块D提交结果.docx】中对应的任务序号下。

continuous_3week表结构:

字段

类型

中文含义

备注

end_date

string

数据统计日期

2022-08-10

active_total

int

活跃用户数

date_range

string

统计周期

格式:统计开始时间_结束时间

date_range: 例:假设统计2022年9月8日的连续三周登录用户数,则该字段值应该为 2022-08-22_2022-09-11。

模块E数据挖掘

环境说明:

服务端登录地址详见各任务服务端说明

补充说明:各节点可通过Asbru工具或SSH客户端进行SSH访问;

主节点MySQL数据库用户名/密码:root/123456(已配置远程连接);

Spark任务在Yarn上用Client运行,方便观察日志。

该任务均使用Scala编写,利用Spark相关库完成。

子任务一:特征工程

剔除订单信息表与订单详细信息表中用户id与商品id不存在现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。

  1. 根据Hive的dwd库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,若与多个用户购买的商品种类相同,则输出结果按照用户id升序排序,输出格式如下,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;

结果格式如下:

-------------------相同种类前10的id结果展示为:--------------------

1,2,901,4,5,21,32,91,14,52

  1. 根据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否则为0

spu_id#2

double

spu_id 2

若属于该spu_id,则内容为1否则为0

.....

double

tm_id#1

double

品牌1

若属于该品牌,则内容为1否则为0

tm_id#2

double

品牌2

若属于该品牌,则内容为1否则为0

……

double

category3_id#1

double

分类级别3 1

若属于该分类级别3,则内容为1否则为0

category3_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

子任务二:推荐系统

  1. 根据子任务一的结果,计算出与用户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)

模块F:数据可视化

环境说明:

数据接口地址及接口描述详见各模块服务端说明。

任务一:用柱状图展示消费额最高的省份

编写Vue工程代码,根据接口,用柱状图展示2020年消费额最高的5个省份(不用考虑数据是否合规,直接聚合省份消费额),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\模块E提交结果.docx】中对应的任务序号下。

任务二:用饼状图展示各地区消费能力

编写Vue工程代码,根据接口,用饼状图展示2020年各地区的消费总额占比(不用考虑数据是否合规,直接聚合地区消费额),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\模块E提交结果.docx】中对应的任务序号下。

任务三:用折线图展示每年上架商品数量变化

编写Vue工程代码,根据接口,用折线图展示每年上架商品数量的变化情况(商品出现一次即累加1,不用考虑商品重复出现),同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器console打印结果分别截图并粘贴至客户端桌面【Release\模块E提交结果.docx】中对应的任务序号下。

模块G:综合分析

任务一:HDFS适用于大型数据集还是小型数据集,原因是什么?

将内容编写至客户端桌面【Release\模块F提交结果.docx】中对应的任务序号下。

任务二:ClickHouse 有哪些表引擎?列举四种并简要描述。

将内容编写至客户端桌面【Release\模块F提交结果.docx】中对应的任务序号下。

任务三:简要描述竞赛过程中的问题并进行总结。

将内容编写至客户端桌面【Release\模块F提交结果.docx】中对应的任务序号下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Win10桌面便签小工具怎么添加?一招轻松搞定!

在这个信息爆炸的时代,如何高效地管理自己的时间和任务成为了许多人关注的焦点。而Win10桌面便签小工具作为一款简单实用的工具,正逐渐受到更多人的关注和喜爱。作为Win10系统中常用的便捷工具之一,桌面便签小工具的添加操作简单又实用。那么…

阳光音乐厅订票系统技术解析 Java+SpringBoot+Vue+MySQL

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

多模态响应与功能集成!华中科技大学微型磁控胶囊机器人登上《Nature Communications》!

胶囊机器人可以通过口服方式抵达胃肠道病灶区域实施医疗功能,为实现胃肠道疾病无痛无创诊疗和提高患者依从性提供了重要途径。其中,磁控胶囊机器人技术因其驱动方式具有非接触、穿透性能好和控制模式丰富等优势而被认为是最理想的胃肠道疾病诊疗手段之一…

Linux 进程状态环境变量

目录 一、操作系统的进程状态 二、Linux内核的进程状态 1、S、R状态 2、前后台进程 3、可中断睡眠(S>>T状态) 4、D状态(不可中断睡眠) 5、僵尸进程(Z状态) 三、孤儿进程 四、优先级 1、概念 2、PRI and NI 3、查看进程优先级 五、其他概念 六、环境…

【stm32】hal库学习笔记--定时器输出PWM波

【stm32】hal库学习笔记–定时器输出PWM波 PWM波原理 输出比较 输入捕获 驱动函数 定时器驱动函数 PWM波驱动函数 定时器基本不使用DMA方式 定时器中断处理通用函数 HAL_TIM_IRQHandler实验一:输出固定占空比PWM波 时钟树配置 PF9 改为tim14CH1 tim14配置 开启tim14全局中…

云计算、区块链、大数据之间的关系与特点

云计算、区块链和大数据是当前信息技术领域的热门话题,它们之间有一定的联系和共同点,同时也有不同的特点。 云计算(Cloud Computing) 是一种基于互联网的计算模式,通过网络提供可按需使用、可扩展和可配置的计算资源…