省赛样题4解析

省赛样题4解析
曦2024-2025学年广东省职业院校技能大赛
中职组大数据应用与服务赛项
样
题
4
一、背景描述
大数据时代背景下,人们生活习惯发生了很多改变。在传统运营模式中,缺乏数据积累,人们在做出一些决策行为过程中,更多是凭借个人经验和直觉,发展路径比较自我封闭。而大数据时代,为人们提供一种全新的思路,通过大量的数据分析得出的结果将更加现实和准确。旅游行业作为现代服务业的重要组成部分,其数据分析对于提升游客体验、优化资源配置具有重要意义。通过收集和分析游客的行为数据,包括景点偏好、消费习惯、住宿选择等,可以为旅游服务提供者制定更精准的运营策略提供依据。
因数据驱动的大数据时代已经到来,没有大数据,我们无法为用户提供大部分服务。为完成旅游景区客流量预测与分析工作,你所在的小组将应用大数据技术,通过 Python 语言以数据采集为基础,将采集的数据进行相应处理,并且进行数据标注、数据分析与可视化、通过大数据业务分析方法实现相应数据分析。运行维护数据库系统保障存储数据的安全性。通过运用相关大数据工具软件解决具体业务问题。你们作为该小组的技术人员,请按照下面任务完成本次工作。
二、模块一:平台搭建与运维
(一)任务一:大数据平台搭建
1.子任务一:基础环境准备
本任务需要使用 root 用户完成相关配置,安装 Hadoop 需要配置前置环境。命令中要求使用绝对路径,具体要求如下:
(1)配置三个节点的主机名,分别为 master、slave1、slave2,然后修改三个节点的 hosts 文件,使得三个节点之间可以通过主机名访问,在 master上将执行命令 cat /etc/hosts 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [root@master ~]# cat /etc/hosts |
(2)将 /opt/software 目录下将文件 jdk-8u191-linux-x64.tar.gz 安装包解压到 /opt/module 路径中,将 JDK 解压命令复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [root@master software]# tar -zxvf jdk-8u391-linux-x64.tar.gz -C /opt/module/ |
(3)在 /etc/profile 文件中配置 JDK 环境变量 JAVA_HOME 和 PATH 的值,并让配置文件立即生效,将在 master上 /etc/profile 中新增的内容复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | export JAVA_HOME=/opt/module/jdk1.8.0_391 |
(4)查看 JDK 版本,检测 JDK 是否安装成功,在 master 上将执行命令java -version 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [root@master module]# java -version |
(5)创建 hadoop 用户并设置密码,为 hadoop 用户添加管理员权限。在 master 上将执行命令 grep ‘hadoop’ /etc/sudoers 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [root@master module]# grep 'hadoop' /etc/sudoers |
(6)关闭防火墙,设置开机不自动启动防火墙,在 master 上将执行命令 systemctl status fireawlld 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [root@master module]# systemctl status firewalld |
(7)配置三个节点的 SSH 免密登录,在 master 上通过 SSH 连接 slave1 和 slave2 来验证。
1 | [root@master module]# ssh slave1 |
2.子任务二:Hadoop 完全分布式安装配置
本任务需要使用 root 用户和 hadoop 用户完成相关配置,使用三个节点完成 Hadoop 完全分布式安装配置。命令中要求使用绝对路径,具体要求如下:
(1)在 master 节点中的 /opt/software 目录下将文件 hadoop-3.3.6.tar.gz 安装包解压到 /opt/module 路径中,将 hadoop 安装包解压命令复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [hadoop@master software]$ sudo tar -zxvf hadoop-3.3.6.tar.gz -C /opt/module/ |
(2)在 master 节点中将解压的 Hadoop 安装目录重命名为 hadoop,并修改该目录下的所有文件的所属者为 hadoop,所属组为 hadoop,将修改所属者的完整命令复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [hadoop@master module]$ sudo chown -R hadoop:hadoop hadoop/ |
(3)在 master 节点中使用 hadoop 用户依次配置 hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、masters 和 workers 配置文件,Hadoop集群部署规划如下表,将 yarn-site.xml 文件内容复制并粘贴至【提交结果.docx】中对应的任务序号下;
服务器 | master | slave1 | slave2 |
---|---|---|---|
DHFS | NameNode | ||
HDFS | SecondaryNameNode | ||
HDFS | DataNode | DataNode | DataNode |
YARN | ResourceManager | ||
YARN | NodeManager | NodeManager | NodeManager |
历史日志服务器 | JobHistoryServer |
1 | <configuration> |
(4)在 master 节点中使用 scp 命令将配置完的 hadoop 安装目录直接拷贝至 slave1 和 slave2 节点,将完整的 scp 命令复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [hadoop@master module]$ sudo scp -r jdk1.8.0_391/ hadoop/ slave1:`pwd` |
(5)在 slave1 和 slave2 节点中将 hadoop 安装目录的所有文件的所属者为 hadoop,所属组为 hadoop。
1 | [hadoop@slave1 module]$ sudo chown -R hadoop:hadoop hadoop/ |
(6)在三个节点的 /etc/profile 文件中配置 Hadoop 环境变量 HADOOP_HOME 和 PATH 的值,并让配置文件立即生效,将 master 节点中 /etc/profile 文件新增的内容复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | export HADOOP_HOME=/opt/module/hadoop |
(7)在 master 节点中初始化 Hadoop 环境 namenode,将初始化命令及初始化结果(截取初始化结果日志最后 20 行即可)粘贴至【提交结果.docx】中对应的任务序号下;
1 | [hadoop@master hadoop]$ hadoop namenode -format |
(8)在 master 节点中依次启动HDFS、YARN集群和历史服务。在 master 上将执行命令 jps 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
1 | [hadoop@master hadoop]$ jps |
(9)在 slave1 查看 Java 进程情况。在 slave1上将执行命令 jps 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下。
1 | [hadoop@slave1 module]$ jps |
(二)任务二:数据库服务器的安装与运维
1. 子任务一:MySQL 安装配置
本任务需要使用 rpm 工具安装 MySQL 并初始化,具体要求如下:
(1)在 master 节点中的 /opt/software 目录下将 MySQL 5.7.44 安装包解压到 /opt/module 目录下;
1 | [root@master software]# tar -xvf mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar -C /opt/module/ |
(2)在 master 节点中使用 rpm -ivh 依次安装 mysql-community-common、mysql-community-libs、mysql-community-libs-compat、mysql-community-client 和 mysql-community-server 包,将所有命令复制粘贴至【提交结果.docx】中对应的任务序号下;
1 | [root@master module]# rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm |
(3)在 master 节点中启动数据库系统并初始化 MySQL 数据库系统,将完整命令复制粘贴至【提交结果.docx】中对应的任务序号下。
1 | [root@master module]# mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql |
2. 子任务二:MySQL 运维
本任务需要在成功安装 MySQL 的前提,对 MySQL 进行运维操作,具体要求如下:
(1)配置 MySQL 服务器的最大连接数为 1000,并将配置命令复制粘贴至【提交结果.docx】中对应的任务序号下;
1 | mysql> set global max_connections = 1000; |
(2)创建数据库 tourism 并设置默认字符集为 utf8mb4,并将设置命令复制粘贴至【提交结果.docx】中对应的任务序号下;
1 | mysql> create database tourism character set utf8mb4; |
(3)创建一个名为 tourism_backup 的定时备份脚本,每天凌晨 2 点自动备份数据库 tourism,将脚本内容复制粘贴至【提交结果.docx】中对应的任务序号下;
1 |
|
(4)优化 MySQL 查询性能,开启慢查询日志,设置超过 3 秒的查询被记录,将配置命令复制粘贴至【提交结果.docx】中对应的任务序号下;
1 | mysql> set global slow_query_log=1; |
(5)配置 MySQL 的 binlog 日志,设置过期时间为 7 天,将配置命令复制粘贴至【提交结果.docx】中对应的任务序号下。
1 | mysql> set global expire_logs_days = 7; |
3. 子任务三:数据表的创建及维护
(1)根据以下数据字段在 tourism 数据库中创建景区信息表(scenic_spot)。景区信息表字段如下:
字段 | 类型 | 中文含义 | 备注 |
---|---|---|---|
spot_id | int | 景区编号 | 主键 |
spot_name | varchar | 景区名称 | |
city | varchar | 所在城市 | |
level | varchar | 景区等级 | |
type | varchar | 景区类型 | |
ticket_price | decimal | 门票价格 | |
opening_hours | varchar | 开放时间 | |
max_capacity | int | 最大承载量 |
1 | mysql> |
(2)根据以下数据字段在 tourism 数据库中创建游客流量表(visitor_flow)。游客流量表字段如下:
字段 | 类型 | 中文含义 | 备注 |
---|---|---|---|
record_id | int | 记录ID | 主键 |
spot_id | int | 景区编号 | 外键 |
visit_date | date | 参观日期 | |
visitor_count | int | 游客数量 | |
peak_hour | time | 高峰时段 | |
weather | varchar | 天气状况 | |
is_holiday | boolean | 是否节假日 |
1 | mysql> create table visitor_flow( |
将这两个 SQL 建表语句分别复制粘贴至【提交结果.docx】中对应的任务序号下。
(3)将提供的数据文件导入数据库 tourism 中并编写以下数据库操作语句:
查询2024年1月每个景区的总游客人数。查询结果需要显示景区名称、所在城市和游客总数,并按游客总数降序排列。
1
2
3mysql> select spot_name, city, count(*) from scenic_spot s join visitor_flow v on s.spot_id=v.spot_id where visit_date>="2025:01:01" and visit_date<="2025:01:31" group
by spot_name, city;
Empty set (0.00 sec)统计每个景区在节假日和非节假日的平均游客数量。查询结果需要显示景区名称、景区等级、节假日平均游客数和非节假日平均游客数,按景区编号排序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17mysql> SELECT
-> s.spot_name AS 景区名称,
-> s.level AS 景区等级,
-> AVG(CASE WHEN v.is_holiday = 1 THEN v.visitor_count ELSE NULL END) AS 节 假日平均游客数,
-> AVG(CASE WHEN v.is_holiday = 0 THEN v.visitor_count ELSE NULL END) AS 非 节假日平均游客数
-> FROM
-> scenic_spot s
-> JOIN
-> visitor_flow v
-> ON s.spot_id = v.spot_id
-> GROUP BY
-> s.spot_name,
-> s.level,
-> s.spot_id
-> ORDER BY
-> s.spot_id;
Empty set (0.00 sec)找出所有景区中单日游客量超过该景区最大承载量的情况。查询结果需要显示景区名称、参观日期、实际游客数量、最大承载量和超出人数,按超出人数降序排列。
1
2mysql> select spot_name, visit_date, visitor_count, max_capacity, (max_capacity-visitor_count) as 超出人数 from scenic_spot s join visitor_flow v on s.spot_id=v.spot_id where v.visitor_count > s.max_capacity order by 超出人数 desc;
Empty set (0.00 sec)
将这三个 SQL 语句分别复制粘贴至【提交结果.docx】中对应的任务序号下。