【大数据】Hadoop 体系(五)

Hadoop

六、Hadoop生态综合案例(陌陌聊天数据分析)

1. 陌陌聊天数据分析案例需求

1.1 背景介绍

  • 陌陌作为聊天平台每天都会有大量的用户在线,会出现大量的聊天数据,通过对聊天数据的统计分析,可以更好的对用户构建精准的用户画像,为用户提供更好的服务以及实现高ROI的平台运营推广,给公司的发展决策提供精确的数据支撑。

1.2 目标

  • 基于Hadoop和Hive实现聊天数据统计分析,构建聊天数据分析报表
    【大数据】Hadoop 体系(五)_第1张图片

1.3 需求

  • 统计今日总消息量
  • 统计今日每小时消息量、发送和接收用户数
  • 统计今日各地区发送消息数据量
  • 统计今日发送消息和接收消息的用户数
  • 统计今日发送消息最多的Top10用户
  • 统计今日接收消息最多的Top10用户
  • 统计发送人的手机型号分布情况
  • 统计发送人的设备操作系统分布情况

1.4 数据内容

  • 数据大小:两个文件共14万条数据
  • 列分隔符:制表符 \t
  • 数据字典及样例数据
    在这里插入图片描述

2. 基于Hive数仓实现需求开发

2.1 建库建表、加载数据

--如果数据库已存在就删除
drop database if exists db_msg cascade ;
--创建数据库
create database db_msg ;
--切换数据库
use db_msg ;
--列举数据库
show databases ;
--如果表已存在就删除
drop table if exists db_msg.tb_msg_source ;
--建表
create table db_msg.tb_msg_source(
msg_time string comment "消息发送时间"
, sender_name string comment "发送人昵称"
, sender_account string comment "发送人账号"
, sender_sex string comment "发送人性别"
, sender_ip string comment "发送人ip地址"
, sender_os string comment "发送人操作系统"
, sender_phonetype string comment "发送人手机型号"
, sender_network string comment "发送人网络类型"
, sender_gps string comment "发送人的GPS定位"
, receiver_name string comment "接收人昵称"
, receiver_ip string comment "接收人IP"
, receiver_account string comment "接收人账号"
, receiver_os string comment "接收人操作系统"
, receiver_phonetype string comment "接收人手机型号"
, receiver_network string comment "接收人网络类型"
, receiver_gps string comment "接收人的GPS定位"
, receiver_sex string comment "接收人性别"
, msg_type string comment "消息类型"
, distance string comment "双方距离"
, message string comment "消息内容"
)
--指定分隔符为制表符
row format delimited fields terminated by '\t' ;

2.2 加载数据

  • HDFS上创建目录
    • hdfs dfs -mkdir -p /momo/data
  • 上传到HDFS
    • hdfs dfs -put /export/data/data1.tsv /momo/data/
    • hdfs dfs -put /export/data/data2.tsv /momo/data/
      【大数据】Hadoop 体系(五)_第2张图片
  • 加载到Hive表中
    • load data inpath ‘/momo/data/data1.tsv’ into table db_msg.tb_msg_source;
    • load data inpath ‘/momo/data/data2.tsv’ into table db_msg.tb_msg_source;
  • 验证结果
    • select msg_time,sender_name,sender_ip,sender_phonetype,receiver_name,receiver_network from tb_msg_source limit 10;
      【大数据】Hadoop 体系(五)_第3张图片

2.3 ETL数据清洗

2.3.1 原始数据内容
  • 数据来源:聊天业务系统中导出的2021年11月01日一天24小时的用户聊天数据,以TSV文本形式存储在文件中
    【大数据】Hadoop 体系(五)_第4张图片
2.3.2 数据问题
  • 问题1:当前数据中,有一些数据的字段为空,不是合法数据
select
	msg_time,
	sender_name,
	sender_gps
from db_msg.tb_msg_source
where length(sender_gps) = 0
limit 10;

【大数据】Hadoop 体系(五)_第5张图片

  • 问题2:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理
select
	msg_time
from db_msg.tb_msg_source
limit 10;

【大数据】Hadoop 体系(五)_第6张图片

  • 问题3:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理
select
	sender_gps
from db_msg.tb_msg_source
limit 10;

【大数据】Hadoop 体系(五)_第7张图片

2.3.3 ETL需求
  • 需求1:对字段为空的不合法数据进行过滤
    • Where过滤
  • 需求2:通过时间字段构建天和小时字段
    • Substr函数
  • 需求3:从GPS的经纬度中提取经度和维度
    • Split函数
  • 需求4:将ETL以后的结果保存到一张新的Hive表中
    • Create table …… as select ……
2.3.4 ETL实现
--如果表已存在就删除
drop table if exists db_msg.tb_msg_etl;
--将Select语句的结果保存到新表中
create table db_msg.tb_msg_etl as
select
	*,
	substr(msg_time,0,10) as dayinfo, substr(msg_time,12,2) as hourinfo, --获取天和小时
	split(sender_gps,",")[0] as sender_lng, split(sender_gps,",")[1] as sender_lat --提取经度纬度
from db_msg.tb_msg_source
--过滤字段为空的数据
where length(sender_gps) > 0 ;
2.3.5 查看结果
select
	msg_time,dayinfo,hourinfo,sender_gps,sender_lng,sender_lat
from db_msg.tb_msg_etl
limit 10;

【大数据】Hadoop 体系(五)_第8张图片

2.4 需求指标统计

2.4.1 思路
  • 正确解读业务需求,避免歧义
  • 确定待查询的数据表–>from 表
  • 找出分析的维度–>group by 分组的字段
  • 找出计算的指标–>聚合的字段
  • 其他细节点(过滤、排序等)
2.4.2 查询类SQL编写思路举例
  • 表:t_user(id,name,age,sex,city)
  • 需求:统计每个城市男女人数与男女平均年龄
  • 分组字段:每个城市、男女
    • 也就意味着同一个城市,性别相同的人应该分到同一组,因此这里需要根据两个字段进行分组
  • 聚合字段:人数、平均年龄
    • count(id)就是统计每个分组中的条数–>人数
    • avg(age)就是统计每个分组中年龄的平均值–>平均年龄
2.4.3 需求指标统计
  • 指标1:统计今日消息总量
--保存结果表
create table if not exists tb_rs_total_msg_cnt 
comment "今日消息总量"
as
select 
	dayinfo,
	count(*) as total_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo;

在这里插入图片描述

  • 指标2:统计每小时消息量、发送和接收用户数
--保存结果表
create table if not exists tb_rs_hour_msg_cnt 
comment "每小时消息量趋势"
as
select 
	dayinfo,
	hourinfo,
	count(*) as total_msg_cnt,
	count(distinct sender_account) as sender_usr_cnt,
	count(distinct receiver_account) as receiver_usr_cnt
from db_msg.tb_msg_etl
group by dayinfo,hourinfo;

【大数据】Hadoop 体系(五)_第9张图片

  • 指标3:统计今日各地区发送消息总量
--保存结果表
create table if not exists tb_rs_loc_cnt
comment "今日各地区发送消息总量"
as
select 
	dayinfo,
	sender_gps,
	cast(sender_lng as double) as longitude,
	cast(sender_lat as double) as latitude,
	count(*) as total_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,sender_gps,sender_lng,sender_lat;

【大数据】Hadoop 体系(五)_第10张图片

  • 指标4:统计今日发送和接收用户人数
--保存结果表
create table if not exists tb_rs_usr_cnt
comment "今日发送消息人数、接受消息人数"
as
select 
	dayinfo,
	count(distinct sender_account) as sender_usr_cnt,
	count(distinct receiver_account) as receiver_usr_cnt
from db_msg.tb_msg_etl
group by dayinfo;

在这里插入图片描述

  • 指标5:统计发送消息条数最多的Top10用户
--保存结果表
create table if not exists tb_rs_susr_top10
comment "发送消息条数最多的Top10用户"
as
select 
	dayinfo,
	sender_name as username,
	count(*) as sender_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,sender_name
order by sender_msg_cnt desc
limit 10;

【大数据】Hadoop 体系(五)_第11张图片

  • 指标6:统计接收消息条数最多的Top10用户
--保存结果表
create table if not exists tb_rs_rusr_top10
comment "接受消息条数最多的Top10用户"
as
select 
	dayinfo,
	receiver_name as username,
	count(*) as receiver_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,receiver_name
order by receiver_msg_cnt desc
limit 10;

【大数据】Hadoop 体系(五)_第12张图片

  • 指标7:统计发送人的手机型号分布情况
--保存结果表
create table if not exists tb_rs_sender_phone
comment "发送人的手机型号分布"
as
	select 
	dayinfo,
	sender_phonetype,
	count(distinct sender_account) as cnt
from tb_msg_etl
group by dayinfo,sender_phonetype;

【大数据】Hadoop 体系(五)_第13张图片

  • 指标8:统计发送人的操作系统分布
--保存结果表
create table if not exists tb_rs_sender_os
comment "发送人的OS分布"
as
select 
	dayinfo,
	sender_os,
	count(distinct sender_account) as cnt
from tb_msg_etl
group by dayinfo,sender_os;

【大数据】Hadoop 体系(五)_第14张图片

3. FineBI实现可视化报表

3.1 FineBI的介绍及安装

3.1.1 FineBI的介绍
  • FineBI 是帆软软件有限公司推出的一款商业智能(Business Intelligence)产品。FineBI 是定位于自助大数据分析的 BI 工具,能够帮助企业的业务人员和数据分析师,开展以问题导向的探索式分析。
3.1.2 FineBI的特点
  • 通过多人协作来实现最终的可视化构建
  • 不需要通过复杂代码来实现开发,通过可视化操作实现开发
  • 适合于各种数据可视化的应用场景
  • 支持各种常见的分析图表和各种数据源
  • 支持处理大数据
    【大数据】Hadoop 体系(五)_第15张图片
3.1.3 FineBI的安装
  • 参考《FineBI Windows版安装手册》
    【大数据】Hadoop 体系(五)_第16张图片
3.1.4 FineBI的界面
  • 启动登陆
  • 目录:首页大屏及帮助文档
  • 仪表盘:用于构建所有可视化报表
  • 数据准备:用于配置各种报表的数据来源
  • 管理系统:用于管理整个FineBI的使用:用户管理、数据源管理、插件管理、权限管理等

3.2 FineBI配置数据源及数据准备

3.2.1 驱动配置
  • 问题:如果使用FineBI连接Hive,读取Hive的数据表,需要在FineBI中添加Hive的驱动jar包
  • 解决:将Hive的驱动jar包放入FineBI的lib目录下
3.2.1.1 找到提供的【Hive连接驱动】

【大数据】Hadoop 体系(五)_第17张图片

3.2.1.2 将这些文件放入FineBI的安装目录下的:webapps\webroot\WEB-INF\lib目录中

【大数据】Hadoop 体系(五)_第18张图片

3.2.2 插件安装
  • 问题:我们自己放的Hive驱动包会与FineBI自带的驱动包产生冲突,导致FineBI无法识别我们自己的驱动包
  • 解决:安装FineBI官方提供的驱动包隔离插件
3.2.2.1 找到隔离插件

【大数据】Hadoop 体系(五)_第19张图片

3.2.2.2 安装插件

【大数据】Hadoop 体系(五)_第20张图片

3.2.2.3 重启FineBI

【大数据】Hadoop 体系(五)_第21张图片

3.2.3 构建连接
3.2.3.1 新建连接

【大数据】Hadoop 体系(五)_第22张图片
【大数据】Hadoop 体系(五)_第23张图片

3.2.3.2 配置连接

【大数据】Hadoop 体系(五)_第24张图片

3.2.3.3 测试连接

【大数据】Hadoop 体系(五)_第25张图片

3.2.3.4 保存连接

【大数据】Hadoop 体系(五)_第26张图片

3.2.4 数据准备
3.2.4.1 新建分组

【大数据】Hadoop 体系(五)_第27张图片

3.2.4.2 添加业务包

【大数据】Hadoop 体系(五)_第28张图片

3.2.4.3 添加表

【大数据】Hadoop 体系(五)_第29张图片
【大数据】Hadoop 体系(五)_第30张图片

3.2.4.4 更新业务包

【大数据】Hadoop 体系(五)_第31张图片

3.3 FineBI构建可视化报表

3.3.1 创建报表

【大数据】Hadoop 体系(五)_第32张图片

3.3.2 选择仪表板样式

【大数据】Hadoop 体系(五)_第33张图片

3.3.3 添加标题

【大数据】Hadoop 体系(五)_第34张图片

3.3.4 编辑标题文本框(注意字体大小、居中、文本框位置可调整)

【大数据】Hadoop 体系(五)_第35张图片

3.3.5 添加文本内容

【大数据】Hadoop 体系(五)_第36张图片
【大数据】Hadoop 体系(五)_第37张图片
【大数据】Hadoop 体系(五)_第38张图片
【大数据】Hadoop 体系(五)_第39张图片
【大数据】Hadoop 体系(五)_第40张图片
【大数据】Hadoop 体系(五)_第41张图片
【大数据】Hadoop 体系(五)_第42张图片
【大数据】Hadoop 体系(五)_第43张图片
【大数据】Hadoop 体系(五)_第44张图片
【大数据】Hadoop 体系(五)_第45张图片

3.3.6 添加地图
3.3.7 添加雷达图
3.3.8 添加柱状图
3.3.9 添加环饼状图
3.3.10 添加词汇云图
3.3.11 添加趋势曲线图
3.3.12 报表预览

【大数据】Hadoop 体系(五)_第46张图片

你可能感兴趣的:(大数据,big,data,hadoop,hive)