本项目基于Linux环境下进行数据分析,利用大数据所学知识(Hadoop生态系统组件,如Hadoop、Hive、Spark等)以及大数据相关知识,实现“世界杯数据分析”项目。在此项目完成过程中,我们通过自己数据分析探索能力发挥想象力,一共采取了数据预处理、分析及可视化三个步骤对该项目的三个数据集进行处理分析。在此期间,我们对spark、hadoop等大数据处理与分析框架的使用有了更进一步的理解,更加熟练地掌握hive数据仓库的管理与应用,能对SQL查询语句和hive查询语句更加熟练地运用。
最后希望大家也能在此博文中有所收获,废话不多说,上干货!
前置说明
项目环境:anaconda3.8(Linux)、pycharm专业版(用于远程连接Linux进行开发)、xhell、xftp、hive、Hadoop、spark
上述环境都是大数据主流框架和工具,最好可以自己独立搭一遍环境,需要pycharm专业版破解和整个环境或源码可以私信博主(回复较慢,请见谅)
数据源:FIFA官方提供的世界杯相关数据
数据字段说明
1、世界杯成绩信息表:WorldCupsSummary
包含了所有21届世界杯赛事(1930-2018)的比赛主办国、前四名队伍、总参赛队伍、总进球数、现场观众人数等汇
总信息,包括如下字段:
Year:举办年份
HostCountry:举办国家
Winner:冠军队伍
Second:亚军队伍
季军队伍Third:
Fourth:第四名队伍
GoalsScored:总进球数
QualifiedTeams:总参赛队伍数
MatchesPlayed:总比赛场数
Attendance:现场观众总人数
HostContinent:举办国所在洲
WinnerContinent:冠军国家队所在洲
2、世界杯比赛比分汇总表:WorldCupMatches.csv包含了所有21届世界杯赛事(1930-2014)单场比赛的信息,包括比赛时间、比赛主客队、比赛进球数、比赛裁判等信息。包括如下字段:
Year:比赛(所属世界杯)举办年份
Datetime:比赛具体日期
Stage:比赛所属阶段,包括 小组赛(GroupX)、16进8(Quarter-Fina1)、半决赛(Semi-Fina1)、决赛(Final)等
Stadium:比赛体育场
City:比赛举办城市
Home Team Name:主队
Away Team Name:客队名
Home Team Goals:主队进球数
Away Team Goals:客队进球数
Attendance:现场观众数
Half-time Home Goals:上半场主队进球数
Half-time Away Goals:上半场客队进球数
Referee:主裁
Assistant1:助理裁判1
Assistant 2:助理裁判2
RoundID:比赛所处阶段ID,和Stage字段对应
MatchID:比赛ID
Home Team Initials:主队名字缩写
Away Team Initials:客队名字缩写
3、世界杯球员信息表:WorldCupPlayers.csv
RoundID:比赛所处阶段ID,同比赛信息表的RoundID字段
MatchID:比赛ID
Team Initials:队伍名
Coach Name:教练名
Line-up:首发/替补
Shirt Number:球衣号码Player Name:队员名Position:比赛角色,包括:C=Captain,GK=Goalkeeper比赛事件,包括进球、红/黄牌等
整体数据源、源码、环境情况如下:
第一步 环境搭建和启动
先将搭建好的环境启动起来:Hadoop集群、spark集群、hive元数据服务
启动命令:(根据自己路径替换,如果没有脚本,就不能一键启动,要挨个启动)
/usr/local/hadoop-3.1.4/sbin/start-all.sh
/usr/local/spark-3.2.1-bin-hadoop2.7/sbin/start-all.sh
hive --service metastore &
启动后通过jps查看进程,以下为全部需要用到的服务
第二步 数据迁移
导入数据
将原始数据文件csv下载至本地并上传到Linux的指定目录下。
使用Hive建立好对应表结构的数据表。创建表HQL语句:
三张表的 Hive SQL 创建语句:
1. 世界杯成绩信息表 (WorldCupsSummary)worldcupssummary
sql
CREATE TABLE IF NOT EXISTS WorldCupsSummary (
Year INT,
HostCountry STRING,
Winner STRING,
Second STRING,
Third STRING,
Fourth STRING,
GoalsScored INT,
QualifiedTeams INT,
MatchesPlayed INT,
Attendance INT,
HostContinent STRING,
WinnerContinent STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
2. 世界杯比赛比分汇总表 (WorldCupMatches)worldcupmatches
sql
CREATE TABLE IF NOT EXISTS WorldCupMatches (
Year INT,
Datetime STRING,
Stage STRING,
Stadium STRING,
City STRING,
HomeTeamName STRING,
AwayTeamName STRING,
HomeTeamGoals INT,
AwayTeamGoals INT,
Attendance INT,
HalfTimeHomeGoals INT,
HalfTimeAwayGoals INT,
Referee STRING,
Assistant1 STRING,
Assistant2 STRING,
RoundID INT,
MatchID INT,
HomeTeamInitials STRING,
AwayTeamInitials STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
3. 世界杯球员信息表 (WorldCupPlayers)worldcupplayers
sql
CREATE TABLE IF NOT EXISTS WorldCupPlayers (
RoundID INT,
MatchID INT,
TeamInitials STRING,
CoachName STRING,
Lineup STRING,
ShirtNumber INT,
PlayerName STRING,
Position STRING,
Event STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
上传Linux本地原始数据到hdfs上。
命令:hdfs dfs -put /data/sjb/* /user/sjb data
加载hdfs原始数据到hive表中。命令: