欢迎来到安国润的个人网站


项目介绍

一、实验目的

以北京新发地农产品行情数据为载体,完整掌握大数据离线分析标准全链路:数据采集→HDFS 分布式存储→Hive 四层分层数据仓库建模→离线多维指标计算,理解分布式存储、数据分层、离线计算核心大数据思想。

熟练操作 Hadoop 集群、掌握 Hive 数仓分层设计规范,能独立完成原始数据入库、脏数据清洗、多维度聚合指标统计,读懂、编写常用 Hive 分析 SQL。

学习 mysql数据库,Java 代码、Maven 项目管理工具、SpringBoot 接口、Vue+ECharts前端可视化的作用与流程,仅做认知学习,不要求深度开发,重点掌握大数据底层存储与计算逻辑。

能够识别集群故障、Hive 数据异常、数据流转断层等大数据项目常见问题,掌握基础排查思路。

· 大数据核心重点(必须熟练掌握

1)Hadoop 完全分布式集群启停、进程校验、HDFS 文件管理全套命令;

2)Hive 数仓四层架构 ODS/DWD/DWS/ADS 分层理论、建库建表、数据流转;

3)Hive 数据清洗:空值、异常价格、非法日期、重复数据过滤;

4)Hive 离线多维分析:条件筛选、分组聚合、排序、区间统计、多维度汇总;

5)理解 ADS 业务指标表,理解指标如何支撑上层可视化业务。

· Java / 前端部分

1)了解 Java 代码逻辑:Maven 工具;

2)看懂 Hive→MySQL 同步程序:清楚该程序作用是把 Hive 计算好的指标落地关系库,供 Web 调用;

3)看懂 SpringBoot+MyBatis 接口代码:了解接口作用是给前端提供指标数据;

4)看懂 Vue+ECharts 大屏页面:明白图表展示的指标来源于 ADS 层计算结果,知晓前后端字段匹配常见问题。

二、实训内容

(一)案例实训

​ 北京新发地农产品批发市场是首都核心生鲜供给枢纽,每日产生海量品类、价格、产地行情数据。传统 Excel 单机统计无法支撑海量历史数据存储、长期价格监测、多品类联动分析。 本实训核心聚焦Hadoop+Hive 大数据离线数仓完整流程,数据同步、Web 可视化仅作为上下游辅助链路认知学习,弱化代码开发操作,重点训练分布式存储、分层数仓、离线数据分析核心大数据能力

(二)项目实训

核心大数据链路(实训重点实操):新发地接口原始数据 → CSV 文件 → HDFS 分布式存储 → Hive 四层数仓(ODS 原始层→DWD 清洗层→DWS 汇总层→ADS 指标层)离线计算业务指标

上下游辅助链路(仅认知了解):Java Maven 统一管理 → Java 同步程序将 ADS 指标同步至 MySQL → SpringBoot 提供数据接口 → Vue+ECharts 可视化大屏展示

(三)总体技术架构

· 数据采集层:Java 数据采集,模拟浏览器请求抓取农产品行情,输出 CSV 数据集,仅看懂代码逻辑,不用自主编写。

· 大数据存储与计算层(实训核心) Hadoop3.1.1:HDFS 分布式文件系统存储海量原始数据、YARN 资源调度; Hive3.1.2:分层数据仓库,完成数据清洗、多维度离线聚合计算,产出业务指标。

· 数据中转层:Java JDBC 程序,读取 Hive ADS 指标批量写入 MySQL,仅看懂同步逻辑。

· 数据应用层:SpringBoot 接口提供指标查询能力;Vue+ECharts 实现数据可视化,仅运行查看效果,不开发页面。

三、实训材料准备

(一)硬件设备

本地开发主机:Intel i5 及以上处理器、16GB 内存、256GB 固态硬盘(保证虚拟机与代码运行流畅)

集群服务器:3 台 CentOS 7 虚拟机(1 台主节点 node1 + 2 台从节点 node2、node3),配置静态 IP、关闭防火墙

辅助设备:16G 及以上 U 盘(用于文件备份、代码与报告拷贝)

(二)软件环境

操作系统

本地端:Windows 10 64 位操作系统;

集群端:CentOS 7 64 位操作系统

基础运行环境

JDK 1.8 java maven

大数据核心组件

Hadoop3.1.1 (完全分布式):HDFS 分布式存储、YARN 资源调度

Hive3.1.2 :数据仓库组件

sqoop 迁移数据 (可选) azekaba任务调度工具(可选)

辅助工具

远程连接工具:Xshell/SecureCRT(连接 Linux 集群,执行命令)

代码编辑器:idea 数据库工具:Navicat(可选)

(三)数据源

​ 数据源为北京新发地官方公开行情接口(http://www.xinfadi.com.cn/getPriceData.html),接口公开免费、数据真实有效,包含蔬菜、水果、肉禽蛋、水产、粮油五大品类。采集数据统一为 CSV 格式,英文逗号分隔、UTF-8 编码,完全适配 Hive 据表入库规则。

#

四、最终表整体说明

(一)四张ADS表详细:建表语句、产出数据、大屏展示内容

表1 ads_market_today_index 市场核心指标表

1.Hive建表语句

CREATE EXTERNAL TABLE ads.ads_market_today_index (
    total_category_cnt INT COMMENT '一级品类总数',
    second_category_cnt INT COMMENT '二级品类总数',
    market_avg_price DECIMAL(10,2) COMMENT '全市场商品平均价格'
)
PARTITIONED BY (stat_date STRING COMMENT '统计日期')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS ORC
LOCATION '/user/hive/warehouse/ads.db/ads_market_today_index';

2. 最终产出数据(单分区仅1条汇总记录)

stat_date total_category_cnt second_category_cnt market_avg_price
2026-06-26 12 86 5.78
含义:当日市场12个一级品类、86个二级品类,商品均价5.78元
#### 3. 大屏对应展示内容
页面顶部三大数字卡片,接口 /api/index
1. 卡片1:市场一级品类总数(高亮蓝色大数字)
2. 卡片2:市场二级品类总数
3. 卡片3:全市场商品均价

表2 ads_market_price_distribution 价格区间分布表

1.Hive建表语句

CREATE EXTERNAL TABLE ads.ads_market_price_distribution (
    price_range STRING COMMENT '价格区间',
    record_count BIGINT COMMENT '区间商品数量',
    ratio DECIMAL(4,2) COMMENT '占比(%)'
)
PARTITIONED BY (stat_date STRING COMMENT '统计日期')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS ORC
LOCATION '/user/hive/warehouse/ads.db/ads_market_price_distribution';

2. 最终产出数据(每日最多6条)

stat_date price_range record_count ratio
2026-06-26 0-2元 326 38.25
2026-06-26 2-5元 271 31.75
2026-06-26 5-10元 152 17.80
2026-06-26 10-20元 68 7.97
2026-06-26 20-50元 28 3.29
2026-06-26 50元以上 8 0.94
#### 3. 大屏对应展示内容
第二行左侧饼图,接口 /api/pie
图表标题:全市场价值带分布,每个扇区对应价格区间,悬浮显示数量与占比。

表3 ads_market_day_rise_fall 当日商品涨跌榜

1.Hive建表语句

CREATE EXTERNAL TABLE ads.ads_market_day_rise_fall (
    prod_name STRING COMMENT '商品名称',
    price_diff DECIMAL(10,2) COMMENT '当日价格涨跌差值'
)
PARTITIONED BY (stat_date STRING COMMENT '统计日期')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS ORC
LOCATION '/user/hive/warehouse/ads.db/ads_market_day_rise_fall';

2. 最终产出数据(当日涨跌商品全量,SQL取TOP5)

上涨TOP5示例: | stat_date | prod_name | price_diff | | ---------- | --------- | ---------- | | 2026-06-26 | 黄瓜 | 1.26 | | 2026-06-26 | 西红柿 | 0.95 | | 2026-06-26 | 青椒 | 0.72 | | 2026-06-26 | 五花肉 | 0.61 | | 2026-06-26 | 鸡蛋 | 0.43 | 下跌TOP5示例: | stat_date | prod_name | price_diff | | ---------- | --------- | ---------- | | 2026-06-26 | 西瓜 | -1.32 | | 2026-06-26 | 桃子 | -0.88 | | 2026-06-26 | 生菜 | -0.65 | | 2026-06-26 | 冬瓜 | -0.41 | | 2026-06-26 | 葡萄 | -0.30 |

3. 大屏对应展示内容

  1. 第二行中间柱状图:当日价格涨幅表(绿色柱子),接口 /api/rise
  2. 第二行右侧柱状图:当日价格跌幅表(红色柱子),接口 /api/fall

表4 ads_market_trend_line 15日品类均价趋势表

1.Hive建表语句

CREATE EXTERNAL TABLE ads.ads_market_trend_line (
    line_name STRING COMMENT '品类名称',
    day0 DECIMAL(10,2) COMMENT '当日均价',
    day1 DECIMAL(10,2) COMMENT '前1天均价',
    day2 DECIMAL(10,2) COMMENT '前2天均价',
    day3 DECIMAL(10,2) COMMENT '前3天均价',
    day4 DECIMAL(10,2) COMMENT '前4天均价',
    day5 DECIMAL(10,2) COMMENT '前5天均价',
    day6 DECIMAL(10,2) COMMENT '前6天均价',
    day7 DECIMAL(10,2) COMMENT '前7天均价',
    day8 DECIMAL(10,2) COMMENT '前8天均价',
    day9 DECIMAL(10,2) COMMENT '前9天均价',
    day10 DECIMAL(10,2) COMMENT '前10天均价',
    day11 DECIMAL(10,2) COMMENT '前11天均价',
    day12 DECIMAL(10,2) COMMENT '前12天均价',
    day13 DECIMAL(10,2) COMMENT '前13天均价',
    day14 DECIMAL(10,2) COMMENT '前14天均价'
)
PARTITIONED BY (stat_date STRING COMMENT '统计日期')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS ORC
LOCATION '/user/hive/warehouse/ads.db/ads_market_trend_line';

2. 最终产出数据(每日3条,三大品类)

stat_date line_name day0 day1 day2 ... day14
2026-06-26 蔬菜 4.25 4.12 4.08 ... 3.66
2026-06-26 肉禽蛋 8.62 8.55 8.40 ... 7.92
2026-06-26 水果 6.10 6.33 6.45 ... 7.01
#### 3. 大屏对应展示内容
页面底部通栏折线图,接口 /api/line
图表标题:15日蔬菜、肉禽蛋、水果平均价格走势图,三条平滑折线区分品类,鼠标悬浮查看每日均价。

五、整体对应总表(hive表-API-大屏组件)

血缘从上至下:原始贴源 (ODS) → 清洗明细 (DWD) → 预聚合汇总 (DWS) → 应用指标 (ADS)

清晰展示每一层上游来源、下游输出,完整数据流转链路

最右侧关联后端接口、前端展示图表,打通数仓到可视化全流程

ODS 贴源层表 DWD 明细层表 DWS 汇总层表 ADS 应用层表 后端 API 接口 大屏展示组件
ods_market_goods(业务商品原始数据) dwd_market_goods_detail(清洗后商品明细,计算 price_diff) dws_market_category_day(品类日聚合:品类数量、市场均价) ads_market_today_index /api/index 顶部三大数字指标卡片
ods_market_goods(业务商品原始数据) dwd_market_goods_detail(清洗后商品明细,计算 price_diff) dws_market_price_range_day(价格区间统计:数量、占比) ads_market_price_distribution /api/pie 价格分布饼图
ods_market_goods(业务商品原始数据) dwd_market_goods_detail(清洗后商品明细,计算 price_diff) dws_market_rise_fall_top(全商品涨跌差价明细) ads_market_day_rise_fall /api/rise 涨幅绿色柱状图
ods_market_goods(业务商品原始数据) dwd_market_goods_detail(清洗后商品明细,计算 price_diff) dws_market_rise_fall_top(全商品涨跌差价明细) ads_market_day_rise_fall /api/fall 跌幅红色柱状图
ods_market_goods(业务商品原始数据) dwd_market_goods_detail(清洗后商品明细,计算 price_diff) dws_market_15day_trend(三大品类 15 天均价宽表) ads_market_trend_line /api/line 15 日多品类趋势折线图

单条完整数据血缘链路举例(均价指标)

  1. ODS:ods_market_goods 同步业务库商品原始价格
  2. DWD:dwd_market_goods_detail 清洗脏数据、计算当日价差
  3. DWS:dws_market_category_day 按品类聚合,算出总品类、市场均价
  4. ADS:ads_market_today_index 轻量化汇总,适配大屏字段
  5. Sqoop:ADS 分区数据导出 MySQL 同名表
  6. SpringBoot:MarketMapper 查询 MySQL,暴露 /api/index 接口
  7. Vue 前端:axios 请求接口拿到 JSON
  8. ECharts:渲染页面顶部数字卡片

分层血缘文字总结

  1. 统一上游源头:所有 DWD 表仅依赖唯一 ODS 表 ods_market_goods
  2. 统一明细来源:四张 DWS 汇总表全部依赖同一张清洗明细 dwd_market_goods_detail
  3. 一一对应聚合:一张 DWS 宽表,对应一张 ADS 指标表,无跨表混合计算
  4. ADS 与大屏一一绑定:每张 ADS 表单独对应 1 个或一组前端图表接口,边界清晰
Hive ADS表名 后端接口 后端控制器接口 Mapper查询方法 前端大屏展示模块
ads_market_today_index /api/index getIndex() getIndexData() 顶部三大指标数字卡片
ads_market_price_distribution /api/pie getPie() getPieData() 价格分布饼图
ads_market_day_rise_fall /api/rise getRiseBar() getRiseBarData() 涨幅绿色柱状图
ads_market_day_rise_fall /api/fall getFallBar() getFallBarData() 跌幅红色柱状图
ads_market_trend_line /api/line getLine() getLineData() 15日多折线趋势图

http://localhost:8080/index.html1782460037145

1782460061827