hadoop综合案例-聊天软件数据(代码片段)

海星?海欣! 海星?海欣!     2023-03-08     736

关键词:

目录

1、聊天软件数据分析案例需求

MR速度慢—引入hive

背景:大量的用户在线,通过对聊天数据的分析,构建用户画像,为用户提供更好的服务、以及实现高ROI的平台运营推广,给公司的发展决策提供精确的数据支撑。

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

需求:

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

原始数据:业务系统中导出的某一天24小时的用户聊天数据,TSV文件。列分隔符:制表符 \\t

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

在Notepad中可以通过显示所有字符来判断间隔符

打开Datagrip,创建一个hive工程,语言选择hive,并与hive服务器创建连接。
Datagrip中:

2.1 建库

--------------1、建库-------------------

--如果数据库已存在就删除
drop database if exists db_msg cascade;
--创建数据库
create database db_msg;
--切换数据库
use db_msg;

2.2 建表

--------------2、建表-------------------
--如果表已存在就删除
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.3 加载数据

--------------3、加载数据-------------------
--上传数据文件到node1服务器本地文件系统(HS2服务所在机器)
--shell:  mkdir -p /root/hivedata

--加载数据到表中
load data local inpath '/root/hivedata/data1.tsv' into table db_msg.tb_msg_source;
load data local inpath '/root/hivedata/data2.tsv' into table db_msg.tb_msg_source;

--查询表 验证数据文件是否映射成功
select * from tb_msg_source limit 10;

--统计行数
select count(*) as cnt from tb_msg_source;

2.4 ETL数据清洗

加载完数据后,需要判断加载过来的数据是否有效–ETL
问题与解决:

  • sender_gps字段有些记录为空,如何处理? – where length(sender_gps) =0筛选出非空的
  • 时间字段,只需要提取中间的小时信息? —substr(字段,12,1)提取小时
  • GPS经纬度是一个字段,需要获取经纬度两个? — split(字段,‘,’)根据逗号进行字段切割
  • 将ETL处理后的结果保存到一张新hive表中?—CTAS语法
    create table … as select … 表结构和数据全部都有了
--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 ;

数据量太多–记得limit 10

--验证ETL结果
select
    msg_time,dayinfo,hourinfo,sender_gps,sender_lng,sender_lat
from db_msg.tb_msg_etl
limit 10;

2.5 需求指标统计—都很简单

需求1:统计今日总消息量
group by 每日后count计数

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;

select * from tb_rs_total_msg_cnt;--结果验证

需求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;

select * from tb_rs_hour_msg_cnt;--结果验证

需求3:统计今日各地区发送消息数据量
按照每日与地区GPS分组,

出现在select后的字段,要么是group by 后的字段,要么是聚合函数字段,所以分组还加了经纬度字段。

case函数:将原本经纬度的string类型转换成double数字类型
cast(sender_lng as double)

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;

select * from tb_rs_loc_cnt; --结果验证

需求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;

select * from tb_rs_usr_cnt; --结果验证

需求5:统计今日发送消息最多的Top10用户
按照天,用户分组,计数后排序,limit 10

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;

select * from tb_rs_susr_top10; --结果验证

需求6:统计今日接收消息最多的Top10用户
按照天,用户分组,计数后排序,limit 10

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;

select * from tb_rs_rusr_top10;  --结果验证

需求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;

select * from tb_rs_sender_phone; --结果验证

需求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;

select * from tb_rs_sender_os;  --结果验证

3、FineBI实现可视化报表

进入可视化展示阶段

3.1 FineBI介绍

FineBI:https://www.finebi.com/
FineBI特点:可多人协作、拖拽不需要代码、适合各种分析场景、支持各种图表、支持大数据
已下载安装好

3.2 FineBI配置数据

将hive中数据连接到BI上。
FineBI与Hive集成的官方文档:https://help.fanruan.com/finebi/doc-view-301.html

驱动配置、安装插件-----都配置好了,可直接连接hive数据
配置数据操作

3.3 构建可视化报表

FineBI上各种拖拽操作

最后效果:

总结:很简单的一个案例,但把数据分析的整个流程走完了

202302-踏马逐尘实验四软件开发案例团队作业(代码片段)

...的技术3.明确团队分工团队博客链接踏马逐尘任务1:用户综合管理软件开发环境配置(1)创建用户综合管理软件的Javaweb项目,项目名称自拟。(2)在项目中添加mysql的驱动支持包。(3)分别用手工或脚本方式创建mysql数据库及... 查看详情

大数据仓库技术实训任务3(代码片段)

...处理全流程所涉及的各种典型操作,涵盖Linux、MySQL、Hadoop、Hive等系统和软件的安装和使用方法。通过本案例,将有助于学生综合运用大数据课程知识以及各种工具软件,实现数据分析操作。案例目的熟悉Linux系统、My... 查看详情

大数据仓库技术实训任务3(代码片段)

...处理全流程所涉及的各种典型操作,涵盖Linux、MySQL、Hadoop、Hive等系统和软件的安装和使用方法。通过本案例,将有助于学生综合运用大数据课程知识以及各种工具软件,实现数据分析操作。案例目的熟悉Linux系统、My... 查看详情

hadoop综合项目——二手房统计分析(起始篇)(代码片段)

Hadoop综合项目——二手房统计分析(起始篇)文章目录Hadoop综合项目——二手房统计分析(起始篇)0、写在前面1、项目背景与功能1.1项目背景1.2项目功能2、数据集和数据预处理2.1数据集2.2数据预处理2.2.1字段空... 查看详情

django—综合案例(代码片段)

案例效果如下:打开/booktest/显示书籍列表点击新增,增加一条数据点击删除,删除一条数据点击查看,跳转英雄信息界面1.定义模型类打开booktest/models.py文件,定义模型类如下fromdjango.dbimportmodels#Createyourmodelshere.#定义书籍模型类... 查看详情

用户授权控制数据库远程维护综合应用案例(代码片段)

案例1:授权数据库用户案例2:查看及撤销授权案例3:重置数据库管理密码案例4:远程维护数据库案例5:企业OA系统部署案例6:企业OA系统迁移1案例1:授权数据库用户1.1问题本例要求掌握MariaDB数据库中用户账号的授权操作,... 查看详情

嘉明的云计算与大数据学习之大数据综合实验案例(代码片段)

...idu.com/s/1i_B-2rAfPM53jf7Besi0tw提取码:WZJM(2)MySQL:5.7.16。(3)Hadoop:2.7.1。(4)HBase:1.1.5。(5)Hive:1.2.1。(6)Sqoop:1.4.6。(7)R:4.1.2。(8)Eclipse:3.8。2.实验步骤概述本案例共包含4个实验步骤。(1)本地数据集上传到数据仓库Hive。(2)Hive数据分析。(3)Hi... 查看详情

hadoop大数据技术yarn案例实操(代码片段)

Yarn案例实操1.Yarn生产环境核心参数配置案例2.容量调度器多队列提交案例2.1需求2.2配置多队列的容量调度器2.3向Hive队列提交任务2.4任务优先级3.公平调度器案例3.1需求3.2配置多队列的公平调度器3.3测试提交任务4.Yarn的Tool接口案... 查看详情

webapisbom-操作浏览器之综合案例(代码片段)

前期整理的WebAPIst内容21篇附在文章末尾案例:本地存储学习信息案例需求:改为本次存储版本的学习信息表需求:改为本次存储版本的学习信息表分析:需求①:读取本地存储数据(封装函数)如果本地存... 查看详情

2021年最新最全flink系列教程__flink综合案例(代码片段)

day09_综合案例今日目标FlinkFileSink落地写入到HDFSFlinkSQL整合Hive数据仓库订单自动好评综合案例FlinkFileSink落地写入到HDFS常用的文件存储格式TextFilecsvrcFileparquetorcsequenceFile支持流批一体的写入到HDFSFileSink需求将流数据写入到HDFSpackage... 查看详情

hadoop之工作流调度(代码片段)

工作流调度将综合案例123中实现的模块串起来,定时的执行一、flume数据的采集:flume一直在采集,不需要定时的执行二、数据的清洗需要定时的执行三、表模型三个mr的程序第一个:mr清洗数据第二个:pageView... 查看详情

c语言文件读写综合案例:读取lol信息(代码片段)

文章目录文件读写综合案例读写配置文件config.txt出现问题:解决中文乱码代码文件读写综合案例读写配置文件配置文件格式如下:正式的数据以‘:’冒号进行分割:冒号前为key起到索引作用冒号后为value是实值。#开头的... 查看详情

c语言文件读写综合案例:读取lol信息(代码片段)

文章目录文件读写综合案例读写配置文件config.txt出现问题:解决中文乱码代码文件读写综合案例读写配置文件配置文件格式如下:正式的数据以‘:’冒号进行分割:冒号前为key起到索引作用冒号后为value是实值。#开头的... 查看详情

hadoop核心之mapreduce案例总结ⅱ(代码片段)

案例总结目录1.ReduceJoin案例2.MapJoin案例3.数据清洗(ETL)1.ReduceJoin案例需求:将下列两个表进行合并,订单中的pid经过合并之后编程pname订单数据表t_orderidpidamount100101110020221003033100401410050251006036商品表:pidpna 查看详情

图解大数据|综合案例-使用spark分析挖掘音乐专辑数据(代码片段)

文娱影音是目前大数据与AI应用最广泛的场景之一,本案例以音乐专辑发行数据为背景,讲解使用pyspark对HDFS存储的数据进行处理数据分析的过程,并且对分析结果做了可视化呈现。作者:韩信子@ShowMeAI教程地址:http://www.showmeai.... 查看详情

综合案例:使用express开发接口服务(续)(代码片段)

目录⑦用户登录开发1.获取请求体数据2.数据验证3.生成token4.发送成功响应(包含token的用户信息)基于JWT的身份验证 https://blog.csdn.net/YINZHE__/article/details/120080256config/config.default.js中的jwtSecret可以用UUID保证唯一性 http://www.uuid.online/... 查看详情

react综合案例-todolistlocalstorage缓存数据(代码片段)

1、工具类storage.jsvarapp=set(key,value)localStorage.setItem(key,JSON.stringify(value));,get(key)returnJSON.parse(localStorage.getItem(key));,delete(key)localStorage.removeItem(key);,countFalseNum(key)letcount=newNumber(0);letlist=JSON.parse(localStorage.getItem(key));list.map(function(value,key... 查看详情

分享知识-快乐自己:运行(wordcount)案例(代码片段)

运行wordcount案例:一):大数据(hadoop)初始化环境搭建二):大数据(hadoop)环境搭建三):运行wordcount案例四):揭秘HDFS五):揭秘MapReduce六):揭秘HBase七):HBase编程-----------------------------------------------------------------Hadoo... 查看详情