省赛样题3解析

2024-2025学年广东省职业院校技能大赛

中职组大数据应用与服务赛项

3

一、背景描述

大数据时代背景下,人们的出行方式发生了显著变化。共享单车作为一种新型的城市短途出行解决方案,不仅满足了人们”最后一公里”的出行需求,也为城市交通带来了新的活力。在传统的运营模式中,由于缺乏数据支持,共享单车的投放和调度主要依靠运营人员的经验判断,导致供需失衡、车辆分布不均等问题。而在大数据时代,通过对骑行数据的分析,可以更精准地预测用户需求,优化车辆调度,提升运营效率。

共享单车平台可以收集包括用户骑行轨迹、使用时段、车辆状态等多维度数据。通过对这些数据的分析,可以识别热门区域和时段,预测车辆使用需求,优化调度策略,同时也能够对车辆维护进行预警,提升用户体验。这些数据还可以为城市交通规划提供重要参考,助力智慧城市建设。

因数据驱动的大数据时代已经到来,没有大数据,我们无法为用户提供高效的共享单车服务。为完成共享单车使用数据分析工作,你所在的小组将应用大数据技术,通过Python语言以数据采集为基础,将采集的数据进行相应处理,并且进行数据标注、数据分析与可视化、通过大数据业务分析方法实现相应数据分析。运行维护数据库系统保障存储数据的安全性。通过运用相关大数据工具软件解决具体业务问题。你们作为该小组的技术人员,请按照下面任务完成本次工作。

二、模块一:平台搭建与运维

(一)任务一:大数据平台搭建

1.子任务一:基础环境准备

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

(1)配置三个节点的主机名,分别为 master、slave1、slave2,然后修改三个节点的 hosts 文件,使得三个节点之间可以通过主机名访问,在 master上将执行命令 cat /etc/hosts 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;

1
2
3
4
5
6
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.91 master
192.168.1.92 slave1
192.168.1.93 slave2

(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
2
export JAVA_HOME=/opt/module/jdk1.8.0_391
export PATH=$PATH:$JAVA_HOME/bin

(4)查看 JDK 版本,检测 JDK 是否安装成功,在 master 上将执行命令 java -version 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;

1
2
3
4
[root@master module]# java -version
java version "1.8.0_391"
Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)

(5)创建 hadoop 用户并设置密码,为 hadoop 用户添加管理员权限。在 master 上将执行命令 grep ‘hadoop’ /etc/sudoers 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;

1
2
[root@master module]# grep 'hadoop' /etc/sudoers
hadoop ALL=(ALL) NOPASSWD:ALL

(6)关闭防火墙,设置开机不自动启动防火墙,在 master 上将执行命令 systemctl status firewalld 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;

1
2
3
4
5
6
7
8
9
10
11
12
[root@master module]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)

Feb 17 02:23:47 localhost.localdomain systemd[1]: Starting firewalld - dynamic ....
Feb 17 02:23:47 localhost.localdomain systemd[1]: Started firewalld - dynamic f....
Feb 17 02:23:47 localhost.localdomain firewalld[747]: WARNING: AllowZoneDrifting...
Feb 18 06:28:12 master systemd[1]: Stopping firewalld - dynamic firewall daemon...
Feb 18 06:28:13 master systemd[1]: Stopped firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.

(7)配置三个节点的 SSH 免密登录,在 master 上通过 SSH 连接 slave1 和 slave2 来验证。

1
2
3
4
5
6
7
8
9
10
11
[root@master module]# ssh slave1
Last login: Tue Feb 18 06:23:09 2025 from 192.168.1.166
[root@slave1 ~]# hostname
slave1
[root@slave1 ~]# exit
logout
Connection to slave1 closed.
[root@master module]# ssh slave2
Last login: Tue Feb 18 06:23:12 2025 from 192.168.1.166
[root@slave2 ~]# hostname
slave2

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]$ 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
HDFS NameNode
HDFS SecondaryNameNode
HDFS DataNode DataNode DataNode
YARN ResourceManager
YARN NodeManager NodeManager NodeManager
历史日志服务器 JobHistoryServer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<configuration>

<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/opt/module/hadoop/etc/hadoop:/opt/module/hadoop/share/hadoop/common/lib/*:/opt/module/hadoop/share/hadoop/common/*:/opt/module/hadoop/share/hadoop/hdfs:/opt/module/hadoop/share/hadoop/hdfs/lib/*:/opt/module/hadoop/share/hadoop/hdfs/*:/opt/module/hadoop/share/hadoop/mapreduce/*:/opt/module/hadoop/share/hadoop/yarn:/opt/module/hadoop/share/hadoop/yarn/lib/*:/opt/module/hadoop/share/hadoop/yarn/*
</value>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>master:8089</value>
</property>
<property>
<name>yarn.log-aggregation.enable</name>
<value>true</value>
</property>
</configuration>

(二)任务二:数据库服务器的安装与运维

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@master module]# rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm 
warning: mysql-community-common-5.7.44-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-common-5.7.44-1.e################################# [100%]
[root@master module]# rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm
warning: mysql-community-libs-5.7.44-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-libs-5.7.44-1.el7################################# [100%]
[root@master module]# rpm -ivh mysql-community-libs-compat-5.7.44-1.el7.x86_64.rpm warning: mysql-community-libs-compat-5.7.44-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-libs-compat-5.7.4################################# [100%]
[root@master module]# rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm
warning: mysql-community-client-5.7.44-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-client-5.7.44-1.e################################# [100%]
[root@master module]# rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm
warning: mysql-community-server-5.7.44-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-server-5.7.44-1.e################################# [100%]

(3)在 master 节点中启动数据库系统并初始化 MySQL 数据库系统,将完整命令复制粘贴至【提交结果.docx】中对应的任务序号下。

1
[root@master module]# mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql

2. 子任务二:MySQL 运维

本任务需要在成功安装 MySQL 的前提下,对 MySQL 进行运维操作,具体要求如下:

(1)配置服务端 MySQL 数据库的远程连接,将新增的配置内容复制粘贴至【提交结果.docx】中对应的任务序号下;

1
bind-address=0.0.0.0

(2)配置 root 用户允许任意 IP 连接,将完整命令复制粘贴至【提交结果.docx】中对应的任务序号下;

1
2
3
mysql> update mysql.user set host='%' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

(3)通过 root 用户登录 MySQL 数据库系统,查看 mysql 库下的所有表,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
mysql> show tables from mysql;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
31 rows in set (0.00 sec)

(4)创建新的用户 bike_admin,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;

1
2
mysql> create user 'bike_admin'@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)

(5)创建数据库 bike_data,并设置正确的字符集,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;

1
2
mysql> create database bike_data character set utf8mb4;
Query OK, 1 row affected (0.00 sec)

(6)授予新用户查询数据和插入数据的权限,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;

1
2
mysql> grant select, insert on *.* to 'bike_admin'@'%';
Query OK, 0 rows affected (0.01 sec)

(7)刷新权限,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下。

1
2
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

3. 子任务三:数据表的创建及维护

(1)根据以下数据字段在 bike_data 数据库中创建骑行记录表(ride_records)。骑行记录表字段如下:

字段 类型 中文含义 备注
id int 记录编号 主键
bike_id varchar 单车编号
user_id varchar 用户ID
start_time datetime 开始时间
end_time datetime 结束时间
start_location varchar 起始位置
end_location varchar 结束位置
ride_distance double 骑行距离(km)
ride_duration int 骑行时长(分钟)
1
2
mysql> create table ride_records( id int primary key, bike_id varchar(255), user_id varchar(255), start_time datetime, end_time datetime, start_location varchar(255), end_location varchar(255), ride_distance double, ride_duration int);
Query OK, 0 rows affected (0.00 sec)

(2)根据以下数据字段在 bike_data 数据库中创建单车状态表(bike_status)。单车状态表字段如下:

字段 类型 中文含义 备注
bike_id varchar 单车编号 主键
status varchar 车辆状态
battery_level int 电量百分比
last_maintain_time datetime 最后维护时间
current_location varchar 当前位置
total_mileage double 总里程(km)
1
2
3
4
5
6
7
8
mysql> create table bike_status(
-> bike_id varchar(255),
-> status varchar(255),
-> battery_level int,
-> last_maintain_time datetime,
-> current_location varchar(255),
-> total_mileage double);
Query OK, 0 rows affected (0.01 sec)

将这两个 SQL 建表语句分别复制粘贴至【提交结果.docx】中对应的任务序号下。

(3)根据已提供的 SQL 文件将这两份数据导入 bike_data 数据库中,并对其中的数据进行如下操作:

  • 在 ride_records 表中查询骑行时长超过60分钟的记录数量;

    1
    2
    mysql> select ride_records.* from ride_records where ride_duration>60;
    Empty set (0.00 sec)
  • 在 bike_status 表中统计各个状态的单车数量;

    1
    2
    mysql> select count(*) from bike_status group by status;
    Empty set (0.00 sec)

将这两个 SQL 语句分别复制粘贴至【提交结果.docx】中对应的任务序号下。