看的黑马的视频做的笔记:
视频:第四章-09-[实操]DataGrip&DBeaver连接HiveServer2使用_哔哩哔哩_bilibili
资源:百度网盘 请输入提取码
1. 准备工作
1.1 环境准备
在各服务器一键启动hadoop组件
start-all.sh
在hive安装的服务器上,首先启动metastore服务,然后启动hiveserver2服务
(便于后面使用图像化软件管理hive)
进入hive文件夹下
cd /export/server
启动metastore和hiveserver2
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
使用jps检查各组件启动情况
查看10000端口号是否被监听
netstat -anp|grep 10000
1.2 软件准备
1.2.1 DBeaver安装(数据库图形化软件,可以更加直观的进行Hive操作)
下载安装后打开
点击编辑驱动设置,删除原有的驱动,换成自己的驱动
确认后进行连接测试
1.2.1.1 DBeaver测试连接失败
1.检查metastore和hiveserver2是否打开,查看10000端口号是否被监听。否,重复1.1步骤
2.打开windows终端,ping linux ip 地址能否 ping 通。否,解决问题
虚拟机网络配置教程,ping不通的几种原因及解决办法_ping不通虚拟机ip地址的原因-CSDN博客
1.2.2 FineBI安装
【Hadoop】-FineBI的介绍及安装[16]-CSDN博客
2. 案例操作
目标
2.1 需求分析
1.统计今日总消息量
2.统计今日每小时消息量、发送和接收用户数
3.统计今日各地区发送消息数据量
4.统计今日发送消息和接收消息的用户数
5.统计今日发送消息最多的Top10用户
6.统计今日接收消息最多的Top10用户
7.统计发送人的手机型号分布情况
8.统计发送人的设备操作系统分布情况
使用DBeaver管理
1.建立数据库和表
#如果数据库已存在就删除
drop database if exists db_msg cascade;
#创建数据库
create database db_msg;
#切换数据库
use db_msg;
#如果表已存在就删除
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 "消息内容"
);
将chat_data-30W.csv文件传到Linux中'/home/hadoop/下
#加载数据到表中
load data local inpath '/home/hadoop/chat_data-30W.csv' overwrite into table tb_msg_source;
#验证结果:
select
msg_time, sender_name, sender_ip, sender_phonetype, receiver_name, receiver_network
from tb_msg_source limit 10;
2.2 ETL数据清洗
- 问题1:当前数据中,有一些数据的字段为空,不是合法数据
- 问题2:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理
- 问题3:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理
select
msg_time, sender_name, sender_gps
from db_msg.tb_msg_source
where length(sender_gps) = 0
limit 10;
select
msg_time
from db_msg.tb_msg_source
limit 10;
select
sender_gps
from db_msg.tb_msg_source
limit 10;
- 需求1:对字段为空的不合法数据进行过滤(where过滤)
- 需求2:通过时间字段构建天和小时字段(date hour函数)
- 需求3:从GPS的经纬度中提取经度和维度(split函数)
- 需求4:将ETL以后的结果保存到一张新的Hive表中
建表
create table db_msg.tb_msg_etl(
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 "消息内容",
msg_day string comment "消息日",
msg_hour string comment "消息小时",
sender_lng double comment "经度",
sender_lat double comment "纬度"
);
实现ETL
INSERT OVERWRITE TABLE db_msg.tb_msg_etl
SELECT
*,
date(msg_time) as msg_day,
HOUR(msg_time) as msg_hour,
split(sender_gps, ',')[0] AS sender_lng,
split(sender_gps, ',')[1] AS sender_lat
FROM tb_msg_source WHERE LENGTH(sender_gps) > 0;
查看结果
select
msg_time, msg_day, msg_hour, sender_gps, sender_lng, sender_lat
from db_msg.tb_msg_etl
limit 10;
其实我们刚刚完成了
从表tb_msg_source 查询数据进行数据过滤和转换,并将结果写入到:tb_msg_etl表中的操作
这种操作,本质上是一种简单的ETL行为。
ETL:
•
E
,
Extract
,抽取
•
T
,
Transform
,转换
•
L
,
Load
,加载
从A抽取数据(E),进行数据转换过滤(T),将结果加载到B(L),就是ETL
2.3 指标计算
1.统计今日总消息量
2.统计今日每小时消息量、发送和接收用户数
3.统计今日各地区发送消息数据量
4.统计今日发送消息和接收消息的用户数
5.统计今日发送消息最多的Top10用户
6.统计今日接收消息最多的Top10用户
7.统计发送人的手机型号分布情况
8.统计发送人的设备操作系统分布情况
指标1:统计今日消息总量
--保存结果表
CREATE TABLE IF NOT EXISTS tb_rs_total_msg_cnt
COMMENT "每日消息总量" AS
SELECT
msg_day,
COUNT(*) AS total_msg_cnt
FROM db_msg.tb_msg_etl
GROUP BY msg_day;
指标2:统计每小时消息量、发送和接收用户数
--保存结果表
CREATE TABLE IF NOT EXISTS tb_rs_hour_msg_cnt
COMMENT "每小时消息量趋势" AS
SELECT
msg_hour,
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 msg_hour;
指标3:统计今日各地区发送消息总量
--保存结果表
CREATE TABLE IF NOT EXISTS tb_rs_loc_cnt
COMMENT '今日各地区发送消息总量' AS
SELECT
msg_day,
sender_lng,
sender_lat,
COUNT(*) AS total_msg_cnt
FROM db_msg.tb_msg_etl
GROUP BY msg_day, sender_lng, sender_lat;
指标4:统计今日发送和接收用户人数
--保存结果表
CREATE TABLE IF NOT EXISTS tb_rs_usr_cnt
COMMENT "今日发送消息人数、接受消息人数" AS
SELECT
msg_day,
COUNT(DISTINCT sender_account) AS sender_usr_cnt,
COUNT(DISTINCT receiver_account) AS receiver_usr_cnt
FROM db_msg.tb_msg_etl
GROUP BY msg_day;
指标5:统计发送消息条数最多的Top10用户
--保存结果表
CREATE TABLE IF NOT EXISTS db_msg.tb_rs_s_user_top10
COMMENT "发送消息条数最多的Top10用户" AS
SELECT
sender_name AS username,
COUNT(*) AS sender_msg_cnt
FROM db_msg.tb_msg_etl
GROUP BY sender_name
ORDER BY sender_msg_cnt DESC
LIMIT 10;
指标6:统计接收消息条数最多的Top10用户
--保存结果表
CREATE TABLE IF NOT EXISTS db_msg.tb_rs_r_user_top10
COMMENT "接收消息条数最多的Top10用户" AS
SELECT
receiver_name AS username,
COUNT(*) AS receiver_msg_cnt
FROM db_msg.tb_msg_etl
GROUP BY receiver_name
ORDER BY receiver_msg_cnt DESC
LIMIT 10;
指标7:统计发送人的手机型号分布情况
--保存结果表
CREATE TABLE IF NOT EXISTS db_msg.tb_rs_sender_phone
COMMENT "发送人的手机型号分布" AS
SELECT
sender_phonetype,
COUNT(sender_account) AS cnt
FROM db_msg.tb_msg_etl
GROUP BY sender_phonetype;
指标8:统计发送人的手机操作系统分布
--保存结果表
CREATE TABLE IF NOT EXISTS db_msg.tb_rs_sender_os
COMMENT "发送人的OS分布" AS
SELECT
sender_os,
COUNT(sender_account) AS cnt
FROM db_msg.tb_msg_etl
GROUP BY sender_os
2.4 可视化展现
2.4.1 连接Hive
点击右上角连接测试保存
2.4.2 数据准备
点击更新数据
根据组件自己编辑:
每个图都是一个组件,选择自己喜欢的可视化样式,最后放入一个仪表盘中