Hadoop

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

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

1.1 背景介绍

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

1.2 目标

  • 基于Hadoop和Hive实现聊天数据统计分析,构建聊天数据分析报表

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/
  • 加载到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;

2.3 ETL数据清洗

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

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

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

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 查看结果
selectmsg_time,dayinfo,hourinfo,sender_gps,sender_lng,sender_lat
from db_msg.tb_msg_etl
limit 10;

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;

  • 指标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;

  • 指标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;

  • 指标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;

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

  • 指标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;

3. FineBI实现可视化报表

3.1 FineBI的介绍及安装

3.1.1 FineBI的介绍
  • FineBI 是帆软软件有限公司推出的一款商业智能(Business Intelligence)产品。FineBI 是定位于自助大数据分析的 BI 工具,能够帮助企业的业务人员和数据分析师,开展以问题导向的探索式分析。
3.1.2 FineBI的特点
  • 通过多人协作来实现最终的可视化构建
  • 不需要通过复杂代码来实现开发,通过可视化操作实现开发
  • 适合于各种数据可视化的应用场景
  • 支持各种常见的分析图表和各种数据源
  • 支持处理大数据
3.1.3 FineBI的安装
  • 参考《FineBI Windows版安装手册》
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连接驱动】

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

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

3.2.2.2 安装插件

3.2.2.3 重启FineBI

3.2.3 构建连接
3.2.3.1 新建连接


3.2.3.2 配置连接

3.2.3.3 测试连接

3.2.3.4 保存连接

3.2.4 数据准备
3.2.4.1 新建分组

3.2.4.2 添加业务包

3.2.4.3 添加表


3.2.4.4 更新业务包

3.3 FineBI构建可视化报表

3.3.1 创建报表

3.3.2 选择仪表板样式

3.3.3 添加标题

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

3.3.5 添加文本内容










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

【大数据】Hadoop 体系(五)相关推荐

  1. 大数据Hadoop(五)HDFS的原理之核心设计(1)

    大家好,我是脚丫先生 (o^^o) 前面介绍了HDFS的API操作,那么接下来就对HDFS原理之核心设计与工作机制进行详细的分析. 好了,我们开始今天的正文. 文章目录 一.HDFS心跳机制 二.HD ...

  2. 2021年大数据Hadoop(十五):Hadoop的联邦机制 Federation

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Hadoop的联邦机制 Federation 背景概述 F ...

  3. 2021年大数据Hadoop(二十五):YARN通俗介绍和基本架构

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 YARN通俗介绍和基本架构 Yarn通俗介绍 Yarn基本 ...

  4. 2021年大数据Hadoop(三十):Hadoop3.x的介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Hadoop3.x的介绍 介绍 Hadoop 3.0新特性 ...

  5. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...

  6. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

  7. 2021年大数据Hadoop(二十六):YARN三大组件介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...

  8. 2021年大数据Hadoop(二十二):MapReduce的自定义分组

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 MapReduce的自定义分组 需求 分析 实现 第一步: ...

  9. 2021年大数据Hadoop(十四):HDFS的高可用机制

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 HDFS的高可用机制 HDFS高可用介绍 组件介绍 Nam ...

  10. 阿里巴巴飞天大数据架构体系与Hadoop生态系统

    很多人问阿里的飞天大数据平台.云梯2.MaxCompute.实时计算到底是什么,和自建Hadoop平台有什么区别. 先说Hadoop 什么是Hadoop? Hadoop是一个开源.高可靠.可扩展的分布 ...

最新文章

  1. 不管工作压力太大了,还是工作压力太小了;都容易引起开发人员的辞职风波...
  2. oracle isextis,OGG-01052 No recovery is required for target file /ogg/tail_ext/et000000, at...
  3. 80x86汇编指令详解
  4. STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值
  5. JS进行性能测试(计时)
  6. 阿里云视频云「 vPaaS 」演绎了怎样的音视频应用开发「未来图景」
  7. AWS 专家教你使用 Spring Boot 和 DJL ,轻松搭建企业级机器学习微服务!
  8. leetcode - 104. 二叉树的最大深度
  9. Push or pull?
  10. unix环境高级编程——UNIX体系架构
  11. 配置静态路由使用下一跳IP地址和使用出接口的区别
  12. sql可以查询数据但是提示对象名无效
  13. 微信表情符号已写入判决书
  14. 图像数据标记-图片筛选教程
  15. 微信小程序 js创建Object对象
  16. 这七种职业男人让多少日本女性着迷
  17. 方方格子excel工具箱 Excel表格处理必备
  18. 计算机网络mooc单元测试答案
  19. JVM-SandBox使用入门
  20. C# DDOS 攻击工 代码

热门文章

  1. filp/whoops
  2. 串口调试助手出现乱码
  3. 后端开发工程师不懂这些就危险了
  4. 《假如给我三天光明》读后感及其摘录(1)
  5. 树莓派pico从零开始的入门(一)
  6. 再论互联网公司盖楼那些事-尾声 谁是中神通
  7. 已是操作系统的一部分_什么是操作系统 第2部分
  8. 【云原生之Docker实战】使用Docker部署siyuan个人笔记系统
  9. XML配置文件的读取
  10. 万兆网络传输速度测试_万兆网络有多快?实测一把先!