【hadoop】疫情离线分析案例

准备:

疫情数据集,mysql,hive,sqoop,davinci,hadoop集群环境

阶段 1 :数据准备

1. MySQL 源表

mysql

复制代码
CREATE DATABASE covid19 DEFAULT CHARSET 'utf8mb4'

CREATE TABLE `covid_source` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `province` VARCHAR(20),
  `date` DATE,
  `confirmed` INT,
  `deaths` INT,
  `recovered` INT,
  PRIMARY KEY (`id`)
);

-- 插入数据语句(可以使用Python,也可以sql)
INSERT INTO `covid_source` 
(province, date, confirmed, deaths, recovered) VALUES
('湖北','2023-01-01', 54306, 1320, 32415),
('广东','2023-01-01', 1523, 8, 1240),
...

(你也可以使用LOAD DATA命令,直接将数据集导入到Hive中)

阶段 2 Hive 数仓构建

1. Sqoop 导入 Hive (关键命令)

复制代码
bash
复制代码
sqoop import \
--connect jdbc:mysql://master:3306/covid19 \
--username root \
--password 123456 \
--table covid_source \
--hive-import \
--hive-table ods_covid_source \
--create-hive-table \
--fields-terminated-by '\001'

2. Hive 分层建模

复制代码
hivesql
复制代码
-- ODS层(原始数据)(Sqoop导入时自动创建)
CREATE TABLE ods_covid_source (
  province STRING,
  `date` DATE,
  confirmed INT,
  deaths INT,
  recovered INT
) STORED AS TEXTFILE;

-- DWD层(清洗后)
CREATE TABLE dwd_covid_stats AS
SELECT 
  province,
  `date`,
  confirmed,
  deaths,
  recovered,
  (confirmed - deaths - recovered) AS current_confirmed 
FROM ods_covid_source 
WHERE `date` IS NOT NULL;

阶段 3 :分析指标计算

1. 核心分析 SQL 示例

复制代码
hivesql
复制代码
-- 各省累计确诊--DWS层
CREATE TABLE dws_province_top AS
SELECT 
  province,
  MAX(confirmed) AS total_confirmed				
FROM dwd_covid_stats
GROUP BY province
ORDER BY total_confirmed DESC;

-- 全国每日新增趋势--DWS层
CREATE TABLE dws_daily_growth AS
SELECT 
  `date`,
CASE
WHEN `date` = MIN(`date`) OVER() THEN 0
ELSE SUM(confirmed) - LAG(SUM(confirmed),1) OVER(ORDER BY `date`) 
END AS new_confirmed
FROM dwd_covid_stats
GROUP BY `date`;

阶段 4 Sqoop 导出到 MySQL

1. MySQL 结果表设计

复制代码
mysql
复制代码
CREATE TABLE `ads_province_top` (
  `province` VARCHAR(20) PRIMARY KEY,
  `total_confirmed` INT
);

CREATE TABLE `ads_daily_growth` (
  `date` DATE PRIMARY KEY,
  `new_confirmed` INT
);

2. Sqoop 导出命令

复制代码
bash
复制代码
# 导出省份TOP10数据
sqoop export \
--connect "jdbc:mysql://master:3306/covid19?useUnicode=true&characterEncoding=utf8" \
--username root \
--password 123456 \
--table ads_province_top \
--export-dir /user/hive/warehouse/dws_province_top \
--input-fields-terminated-by '\001'

# 导出每日趋势数据(增量导出示例)
sqoop export \
--connect "jdbc:mysql://master:3306/covid19?useUnicode=true&characterEncoding=utf8" \
--username root \
--password 123456 \
--table ads_daily_growth \
--export-dir /user/hive/warehouse/dws_daily_growth \
--input-fields-terminated-by '\001'

阶段 5 Davinci 可视化配置

1. 数据源连接

  • 在Davinci中添加MySQL数据源:

类型: MySQL
URL: jdbc:mysql://master:3306/covid19
用户名/密码: root 123456

2. 可视化看板设计

  • ​****组件 1 :疫情地图
    • 数据模型:SELECT province, total_confirmed FROM ads_province_top
    • 图表类型:中国地图
    • 映射字段:province -> 区域, total_confirmed -> 颜色深浅
  • ​****组件 2 :趋势折线图
    • 数据模型:SELECT date, new_confirmed FROM ads_daily_growth
    • 图表类型:折线图
    • X轴:date, Y轴:new_confirmed

效果图

相关推荐
字节跳动数据平台13 小时前
代码量减少 70%、GPU 利用率达 95%:火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
得物技术15 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
武子康16 小时前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
武子康2 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天2 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康4 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
初次攀爬者4 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
武子康5 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库5 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全