一、背景描述
随着互联网、大数据等技术的高速发展,通用设备制造
业在“中国制造 2025”计划的推动下正向定制化服务转型。传统的设备销售模式正在向销售服务模式转变,这为企业带来了新的机遇和挑战。在这个转型过程中,商业模式的创新变得至关重要。信息化与现代服务的结合成为制造企业转型和管理升级的重要手段。
从管理角度来看,企业需要全局掌握已售出设备的整体运行状况,以提高服务效率、满意度和及时率。同时,企业还需要提升决策效率,降低服务成本。这些挑战可以通过大数据综合开发来解决,通过对设备数据进行采集、存储和分析,企业可以实现对设备运行状况的全面监控和管理。利用大数据分析与应用服务,可以优化服务调度和资源分配,提高服务效率和满意度。同时,通过数据分析和决策支持系统,
可以提升企业的决策效率,并降低服务成本。
二、模块一:平台搭建与运维
(一)任务一:大数据平台搭建
1.子任务一:基础环境准备
(1)对三台环境更新主机名,配置hosts文件,以node01 作为时钟源并进行时间同步;
(2)执行命令生成公钥、私钥,实现三台机器间的免秘登陆;
(3)从宿主机/root 目录下将文件 jdk-8u212-linuxx64.tar.gz复制到容器node01中的/root/software路径中(若路径不存在,则需新建),将node01节点JDK安装包解压到/root/software路径中(若路径不存在,则需新建);
(4)修改容器中/etc/profile文件,设置JDK环境变量并使其生效,配置完毕后在node01节点分别执行“java version”和“javac”命令
2.子任务二:Hadoop完全分布式安装配置
本任务需要使用root用户完成相关配置,安装Hadoop 需要配置前置环境。命令中要求使用绝对路径,具体要求如下:
(1)在node01将Hadoop解压到/root/software(若路径不存在,则需新建)目录下,并将解压包分发至 node02、 node03中,其中三个节点节点均作为datanode,配置好相关环境,初始化Hadoop环境namenode;
(2)开启集群,查看各节点进程。
3.子任务三:Hive安装配置
(1)从宿主机/root目录下将文件apache-hive-3.1.2bin.tar.gz、mysql-connector-java-5.1.37.jar 复制到容器node03中的/root/software路径中(若路径不存在,则需新建),将node03节点Hive安装包解压到/root/software 目录下;
(2)设置Hive环境变量,并使环境变量生效,执行命
令hive –version查看版本信息;
(3)修改相关配置,添加依赖包,将MySQL数据库作为 Hive元数据库,初始化Hive元数据。
4.子任务四:Flume安装配置
(1)从宿主机/root 目录下将文件 apache-flume-1.11.0-bin.tar.gz复制到容器node03中的/root/software 路径中(若路径不存在,则需新建),将node03节点Flume 安装包解压到/root/software目录下;
(2)完善相关配置,配置Flume环境变量,并使环境变量生效,执行命令flume-ng version。
(二)任务二:数据库配置维护
1.子任务一:数据库配置
(1)在主机node3上安装mysql-community-server,启动mySQL服务,根据临时密码进入数据库,并修改本地密码为“123456”;
(2)开启MySQL远程连接权限,所有root用户都可以使用 123456 进行登录连接。
2.子任务二:导入相关表
(1)将本地/root/eduhq/equipment/目录下的数据文件sql导入MySQL对应数据库root_sl_src;
(2)将本地/root/eduhq/equipment/目录下的数据文件 sql 导入 MySQL 对应数据库 root_sl_ugoogds_src。
3.子任务三:维护数据表
结合已导入的两份sql数据,对其中的数据进行如下查询和操作。
(1)对‘root_sl_src’数据库中的‘province’数据表进行修改,修改字段 province_id 为 24 的记录的 province_name,修改为‘内蒙古自治区’;
(2)对‘root_sl_src’数据库中的‘city’数据表进行删除,删除字段city_id 为 142 的记录。
三、模块二:数据获取与处理
(一)任务一:数据获取与清洗
1.子任务一:数据获取
(1) 使用load命令将提供的数据导入到Hive,全部数据表如下所示,结合要求对指定数据进行获取:
表1 竞赛内容数据
all_merchant.csv | province.csv |
city.csv | sms_installation_jobs.csv |
equipment_category.csv | sms_installation_plan_details.csv |
kms_categories.csv | sms_installation_plans.csv |
kms_causes.csv | sms_sis.csv |
kms_measures.csv | sms_sos.csv |
prod_equipment_temp.csv |
在获取数据时,对应要求如下:
- 数据存储位置为Hive数据库equipment_dashboard
- 创建省份表ods_province,将csv数据导入 ods_province,自行定义表结构
- 创建城市表ods_city,将csv数据导入ods_city,自行定义表结构
- 其他数据已存入Hive对应数据库中,可直接进行操作
(2) 使用put命令将工单故障记录数据上传至HDFS;
- 工 单 故 障 记 录 文 件 为sms_so_failure_logs_shell.txt
- 写 入 位 置 为 hdfs 上/source/logs/sms_so_failure_logs/
(3) 使用put命令将设备数据上传至HDFS;
- 设备数据文件为txt
- 写入位置为HDFS上/source/logs/province_iso/
2.子任务二:数据清洗
- 对/root/eduhq/equipment/目录下工单故障记录表txt进行文本清洗,删除数据中第一行标题,避免在 Hive 导入时报错,同时删除前两列脏数据,结果另存为sms_so_failure_logs_shell.txt;
- 对/root/eduhq/equipment/ 目录下设备表txt 进行文本清洗,删除数据中第一行标题,避免在Hive导入时报错,同时删除前两列脏数据,结果另保存为province_iso_shell.txt。
(二)任务二:数据标注
使用MapReduce编写任务,对工单故障记录表sms_so_failure_logs进行操作,其中针对空字段进行分类,统一处理,添加设备状态标签“未获取”;
添加标签后的数据保存至 HDFS,具体路径为
/source/mr/sms_so_failure_logs/;
- 判断每行字段的长度,保证字段一致
- 针对时间字段,进行时间格式化,统一时间
- 针对空字段,统一清洗,如设置为未获取,根据实际需求来定义。
(三)任务三:数据统计
1.子任务一:文件上传下载
- Hive中创建库equipment_dashboard,作为Hive数据仓库公用的数据,并切换到此数据库下;
- 将标注后/source/mr/sms_so_failure_logs数据,上传至Hive表ods_sms_so_failure_log,自行创建数据表;
- 将/source/mr/province_iso/数据,上传至 Hive 表ods_province_iso,自行创建数据表。
2.子任务二:数据统计
(1)统计设备数量;
(2)统计用户数量。
四、模块三:业务分析与可视化
(一)任务一:数据可视化
1.子任务一:数据分析
- 分析故障类型分布,进行正序排序展示前五名;
- 对交付状态分析,进行正序排序展示前五名;
- 对设备状态分析,查看各状态分布。
2.子任务二:数据可视化
使用离线数仓结合关键信息,将结果可视化展出,提高数据可读性。
(1)制作设备类型TOP5饼状图;
(2)制作设备状态饼状图;
(3)制作交付状态条形图;
(4)制作设备数量数字卡片;
(5)制作用户数量数字卡片;
(6)制作设备省份分布TOP5饼状图;
(7)制作设备维保分析折线图;
(8)制作故障类型分布TOP5柱状图。
(二)任务二:业务分析
1.子任务一:业务分析
(1)对设备类型进行分析,进行正序排序展示前五名;
(2)对设备维保进行分析,了解设备维保时间变化趋势;
(3)对设备分布省份进行分析,了解设备在不同地域的市场情况。
2.子任务二:报表分析
根据设备表 province_iso.txt 中数据,通过 Excel 生成报表对region name区域数据进行透视分析,及时把握市场信息。
参考答案:
模块一:平台搭建与运维
任务一:大数据平台搭建
1.基础环境准备
(1)对三台环境更新主机名,配置hosts文件,以node01作为时钟源并进行时间同步
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
vim /etc/hosts
172.17.0.2 node01
172.17.0.3 node02
172.17.0.4 node03
https://blog.csdn.net/Prejudice_csr/article/details/128538094
http://www.tuohang.net/article/277677.html
(2)执行命令生成公钥、私钥,实现三台机器间的免秘登陆
yum install openssh
yum -y install openssh-clients
yum install passwd openssl openssh-server –nogpgcheck -y
echo ‘123456’ | passwd –stdin root
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ”
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ”
sed -i ‘/^session\s\+required\s\+pam_loginuid.so/s/^/#/’ /etc/pam.d/sshd
mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
systemctl start sshd
systemctl enable sshd
ssh-keygen -t rsa
ssh-copy-id node01
ssh-copy-id node02
ssh-copy-id node03
(3)从宿主机/root 目录下将文件 jdk-8u212-linuxx64.tar.gz 复制到容器 node01 中的/root/software 路径中(若路径不存在,则需新建),将 node01 节点 JDK 安装包解压到/root/software 路径中(若路径不存在,则需新建)将JDK安装包解压到/root/software目录下
docker cp jdk-8u202-linux-x64.tar.gz 734c1da296d6(指容器id):/root/software
tar zxvf jdk-8u202-linux-x64.tar.gz -C /root/software
(4)在“/etc/profile”文件中配置JDK环境变量JAVA_HOME和PATH的值,并让配置文件立即生效
vi /etc/profile
在文件最底部添加如下内容
export JAVA_HOME=/root/software/jdk1.8.0
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
添加完成后保存。执行source /etc/profile命令。
2.Hadoop 完全分布式安装配置
(1)在 主 节 点 将 Hadoop 安 装 包 解 压 到/root/software目录下
tar zxvf hadoop-3.2.1.tar.gz -C /root/software/
(2)依次配置hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers配置文件
hadoop-env.sh:
export JAVA_HOME=/root/software/jdk1.8.0
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
core-site.xml:
<!– 在configuration标签内添加以下内容 –>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!– 临时文件存放位置 –>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/software/hadoop-3.2.1/hadoopDatas/tempDatas</value>
</property>
hdfs-site.xml:
<!– 在configuration标签内添加以下内容 –>
<!– 设置副本数量 –>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!– namenode存放的位置,老版本是用dfs.name.dir –>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/software/hadoop-3.2.1/hadoopDatas/namenodeDatas</value>
</property>
<!– datanode存放的位置,老版本是dfs.data.dir –>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/software/hadoop-3.2.1/hadoopDatas/datanodeDatas/</value>
</property>
<!– 关闭文件上传权限检查 –>
<property>
<name>dfs.permissions.enalbed</name>
<value>false</value>
</property>
<!– namenode运行在哪儿节点,默认是0.0.0.0:9870,在hadoop3.x中端口从原先的50070改为了9870 –>
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<!– secondarynamenode运行在哪个节点,默认0.0.0.0:9868 –>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9868</value>
</property>
mapred-site.xml:
<!– 在configuration标签内添加以下内容 –>
<!– 设置mapreduce在yarn平台上运行 –>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!– 配了上面这个下面这个也得配, 不然跑mapreduce会找不到主类。MR应用程序的CLASSPATH–>
<property>
<name>mapreduce.application.classpath</name>
<value>/root/software/hadoop-3.2.1/share/hadoop/mapreduce/*:/root/software/hadoop-3.2.1/share/hadoop/mapreduce/lib/*</value>
</property>
<!– 历史服务器端地址 –>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!– 历史服务器web端地址 –>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
yarn-site.xml:
<!– 在configuration标签内添加以下内容 –>
<!– resourcemanager运行在哪个节点 –>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!– nodemanager获取数据的方式 –>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!– 关闭虚拟内存检查 –>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
workers:
# 删掉里面的localhost,添加以下内容
node01
node02
node03
(3)在master节点上使用scp命令将配置完的Hadoop安装目录直接拷贝至node02和node03
scp -r /root/software/hadoop-3.2.1 root@slave1:/root/software/
scp -r /root/software/hadoop-3.2.1 root@slave2:/root/software/
(4)三台节点的“/etc/profile”文件中配置Hadoop环境变量HADOOP_HOME和PATH的值,并让配置文件立即生效;
vi /etc/profile
export HADOOP_HOME=/root/software/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
(5)在主节点格式化集群
hdfs namenode -format
(6)在主节点依次启动HDFS、YARN集群和历史服务
start-all.sh
mapred –daemon start historyserver(mr-jobhistory-daemon.sh start historyserver)
使用jps查看进程
3.Hive 安装配置
(1)将MySQL 5.7.25安装包解压到/root/software目录下
tar xf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar -C /root/software
(2)使用rpm -ivh依次安装
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
(3)启动数据库
systemctl start mysqld.service
(4)使用root用户无密码登录MySQL,然后将root用户的密码修改为123456
systemctl stop mysqld.service
vi /etc/my.cnf
加入下面配置
skip-grant-tables
systemctl start mysqld.service
此时即可无密码登录mysql,登录后执行下面命令修改密码
flush privileges;
set password for root@localhost = password(‘123456’);
flush privileges;
exit
修改完成后注释skip-grant-tables并重启服务。
在mysql命令行执行下面命令即可远程登录
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
flush privileges;
(5)将Hive 3.1.2的安装包解压到/root/software目录下
tar zxf apache-hive-3.1.2-bin.tar.gz -C /root/software/
(6)在“/etc/profile”文件中配置Hive环境变量HIVE_HOME和PATH的值,并让配置文件立即生效
vi /etc/profile
export HIVE_HOME=/root/software/apache-hive-3.1.2-bin
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
(7)查看Hive版本
hive –version
(8)配置hive-env.sh
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
HADOOP_HOME=/root/software/hadoop-3.2.1
export HIVE_CONF_DIR=/root/software/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/root/software/apache-hive-3.1.2-bin/lib
(9)驱动包拷贝
cp /root/software/ mysql-connector-java-5.1.47.jar /root/software/apache-hive-3.1.2-bin/lib
创建一个名为hive-site.xml的文件、配置
touch hive-site.xml
vim hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
(10)初始化源数据库
/root/software/apache-hive-3.1.2-bin/bin/schematool -initSchema -dbType mysql -verbos
4.Flume 安装配置
(1)解压
tar zxvf apache-flume-1.11.0-bin.tar.gz -C /root/software/
(2)环境变量
vim /etc/profile
export FLUME_HOME=/root/software/apache-flume-1.11.0-bin
export PATH=$PATH:$FLUME_HOME/bin
source /etc/profile
(3)文件复制与配置
cd /root/software/apache-flume-1.11.0-bin/conf
cp flume-env.sh.template flume-env.sh
vim flume-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0
(4)查看Flume版本
flume-ng version
任务二:数据库配置维护
数据库配置(前面已安装MySQL)
导入相关表
将本地/root/eduhq/equipment/目录下的数据文件root_sl_src.sql 导入 MySQL对应数据库 root_sl_src
CREATE DATABASE root_sl_src CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
use root_sl_src;
source /root/eduhq/equipment/root_sl_src.sql;
将本地/root/eduhq/equipment/目录下的数据文件 root_sl_ugoogds_src.sql 导 入 MySQL 对应数据库root_sl_ugoogds_src
CREATE DATABASE root_sl_ugoogds_src CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
use root_sl_ugoogds_src;
SET @@sql_mode = ‘STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER’;
source /root/eduhq/equipment/root_sl_ugoogds_src.sql;
维护数据表
对‘root_sl_src’数据库中的‘province’数据表进行修改,修改字段 province_id 为 24 的记录的province_name,修改为‘内蒙古自治区’
use root_sl_src;
update province set province_name = ‘内蒙古自治区’ where province_id = 24;
对‘root_sl_src’数据库中的‘city’数据表进行删除,删除字段 city_id 为 142 的记录
delete from city where city_id=142;
模块二:数据获取与处理
任务一:数据获取与清洗
数据获取
(1)使用load命令将提供的数据导入到Hive
create database equipment_dashboard;
create table ods_province(province_id string,province_name string) row format delimited fields terminated by ‘,’ TBLPROPERTIES (‘skip.header.line.count’=’1’);
load data local inpath ‘/root/eduhq/equipment/province.csv’ into table ods_province;
create table ods_city(city_id string,city_name string) row format delimited fields terminated by ‘,’ TBLPROPERTIES (‘skip.header.line.count’=’1’);
load data local inpath ‘/root/eduhq/equipment/city.csv’ into table ods_city;
(2)使用put命令将工单故障记录数据上传至HDFS
hadoop fs -put sms_so_failure_logs.txt /source/logs/sms_so_failure_logs/
(3)使用put命令将设备数据上传至HDFS
hadoop fs -put province_iso.txt /source/logs/province_iso/
数据清洗
(1)对/root/eduhq/equipment/目录下工单故障记录表 sms_so_failure_logs.txt 进行文本清洗,删除数据中第一行标题,避免在 Hive 导入时报错,同时删除前两列脏数据,结果另存为 sms_so_failure_logs_shell.txt
sed ‘1d’ sms_so_failure_logs.txt > temp.txt
awk -F, ‘{print $3″,”$4″,”$5″,”$6″,”$7″,”$8″,”$9″,”$10″,”$11″,”$12″,”$13″,”$14″,”$15″,”$16″,”$17″,”$18″,”$19″,”$20″,”$21″,”$22″,”$23″,”$24″,”$25}’ temp.txt > sms_so_failure_logs_shell.txt
(2)对 /root/eduhq/equipment/ 目 录 下 设 备 表province_iso.txt 进行文本清洗,删除数据中第一行标题,避免在Hive导入时报错,同时删除前两列脏数据,结果另保存为province_iso_shell.txt
同上
任务二:数据标注
任务三:数据统计
- 文件上传下载
(1)Hive中创建库equipment_dashboard,作为 Hive数据仓库公用的数据,并切换到此数据库下
create database if not exists equipment_dashboard;
use equipment_dashboard;
(2)将标注后/source/mr/sms_so_failure_logs数据,上传至Hive表ods_sms_so_failure_log,自行创建数据表
create table ods_sms_so_failure_logs(ID string,org_id string,so_id string,category_id string,phenomena_id string,phenomena string,cause_id string,cause string,measure_id string,measure string,memo string,TENANT_ID string,DR string,TS string,LAST_MODIFIED string,LAST_MODIFY_USER string,CREATE_TIME string,CREATE_USER string,pubts string,discovery_id string,failure_start_at string,failure_end_at string,ytenant_id string) row format delimited fields terminated by ‘,’;
load data inpath ‘/source/mr/sms_so_failure_logs/part-r-00000’ into table ods_sms_so_failure_logs;
(3)将/source/mr/province_iso/数据,上传至 Hive表ods_province_iso,自行创建数据表
create table ods_province_iso(id string,iso_code string,province_name string,region_name string) row format delimited fields terminated by ‘,’;
load data inpath ‘/source/mr/province_iso/province_iso_shell.txt’ into table ods_province_iso;
- 数据统计
(1)统计设备数量
select count(*) from ods_province_iso group by iso_code;
(2)统计用户数量
select count(*) from ods_sms_so_failure_logs group by TENANT_ID;
模块三:业务分析与可视化
任务一:数据可视化
- 数据分析
(1)分析故障类型分布,进行正序排序展示前五名;
SELECT item.* FROM ( SELECT category_id, count(*) AS num FROM ods_sms_so_failure_logs GROUP BY category_id ORDER BY category_id DESC LIMIT 5 ) AS item ORDER BY item.num;
(2)对交付状态分析,进行正序排序展示前五名;
SELECT item.* FROM ( SELECT Job_ID, count(*) AS num FROM sms_installation_plan_details WHERE Is_Finished = “1” GROUP BY Job_ID ORDER BY num DESC LIMIT 5 ) AS item ORDER BY item.num;
(3)对设备状态分析,查看各状态分布
SELECT COUNT(*) FROM sms_installation_plans GROUP BY Is_Debugged,Is_Finished;
- 数据可视化
(1)设备类型TOP5
SELECT c.category_name, i.num
FROM (
SELECT category_id, COUNT(*) as num
FROM prod_equipment_temp
GROUP BY category_id
ORDER BY num DESC
LIMIT 5
) as i
JOIN equipment_category c ON i.category_id = c.category_id ORDER BY i.num;
(2)设备状态
SELECT COUNT(*) FROM sms_installation_plans GROUP BY Is_Debugged,Is_Finished;
(3)交付状态
SELECT item.* FROM ( SELECT Job_ID, count(*) AS num FROM sms_installation_plan_details WHERE Is_Finished = “1” GROUP BY Job_ID ORDER BY num DESC LIMIT 5 ) AS item ORDER BY item.num;
余下部分如上。
此处为java示例代码,修改相应配置即可。
任务二:业务分析
- 业务分析
见任务一
- 报表分析
(赛题转载来源职业院校技能大赛官网,答案仅供参考学习)