Hadoop生态全解析:架构、组件与应用场景
一、整体概念总览
1. 各组件一句话定位
-
Hadoop:大数据分布式基础平台,是一整套解决方案。
-
HDFS:Hadoop 分布式文件系统,负责存数据。
-
YARN:资源调度与任务管理框架,负责分配 CPU/内存。
-
MapReduce:第一代分布式离线计算引擎,负责算数据(偏老)。
-
Hive:基于 Hadoop 的数据仓库,用 SQL 操作大数据。
-
Spark:新一代内存计算引擎,速度远超 MapReduce,通用型计算框架。
二、组件关系架构图(文字标准图)
┌─────────────────────────────────┐
│ 应用 & 入口层 │
│ Hive SQL Spark SQL │
└───────────┬─────────────────────┘
│
┌───────────▼─────────────────────┐
│ 计算引擎层 │
│ Spark(主流) MapReduce(旧)│
└───────────┬─────────────────────┘
│
┌───────────▼─────────────────────┐
│ 资源调度层 YARN │
│ ResourceManager、NodeManager│
└───────────┬─────────────────────┘
│
┌───────────▼─────────────────────┐
│ 存储层 HDFS │
│ NameNode、DataNode │
└───────────┬─────────────────────┘
│
┌───────────▼─────────────────────┐
│ 物理服务器集群 │
└─────────────────────────────────┘
三、每个组件详细说明
1. HDFS(分布式存储)
作用:把大文件切分成块(默认128M),分布式存在多台机器,保证高可靠、高吞吐。
核心角色
-
NameNode:管理文件目录、元数据、块位置。
-
DataNode:真正存储数据块。
适用场景
-
海量日志存储
-
大文件离线存储
-
数据仓库底层存储
不适合
-
小文件过多
-
低延迟随机读写
2. YARN(资源调度)
作用:统一管理集群的 CPU、内存,调度各种计算任务。
核心角色
-
ResourceManager(RM):全局资源管理。
-
NodeManager(NM):单节点资源与任务管理。
-
ApplicationMaster(AM):单个任务的管理者。
谁会用 YARN
-
Spark
-
MapReduce
-
Hive
-
Flink 等
3. MapReduce(第一代计算引擎)
思想:分两步计算
-
Map:拆分、过滤数据
-
Reduce:聚合、统计结果
特点
-
基于磁盘,慢
-
高可靠、适合超大数据量
-
API 复杂,开发效率低
现状
-
基本被 Spark 替代
-
老系统、兼容场景还在用
4. Hive(数据仓库)
定位:给 Hadoop 加一层 SQL 外壳。
流程
-
写 Hive SQL
-
解析器生成执行计划
-
底层跑 MapReduce 或 Spark
-
数据存在 HDFS,元数据存在 MySQL/Derby
特点
-
不用写代码,会 SQL 就能做大数据
-
适合离线统计、数仓、报表
使用场景
-
数据仓库分层(ODS→DWD→DWS→ADS)
-
离线报表
-
分析师日常查询
5. Spark(新一代内存计算引擎)
优势
-
基于内存计算,比 MapReduce 快 10~100 倍
-
一套框架支持:批处理、SQL、流处理、机器学习、图计算
核心模块
-
Spark Core:核心引擎
-
Spark SQL:最常用,类 SQL 操作
-
Spark Streaming / Structured Streaming:实时计算
-
Spark MLlib:机器学习
-
GraphX:图计算
企业现状
-
大数据计算主力框架
-
全面替代 MapReduce
-
常与 Hive 配合使用
四、企业真实生产架构图
┌───────────────────────────────────────────────┐
│ 数据接入层 │
│ Flume日志 Sqoop同步 Kafka消息 埋点/爬虫 │
└───────────────────┬───────────────────────────┘
│
┌───────────────────▼───────────────────────────┐
│ 数据存储层 │
│ HDFS HBase 关系库 │
└───────────────────┬───────────────────────────┘
│
┌───────────────────▼───────────────────────────┐
│ 资源调度 YARN │
└───────────────────┬───────────────────────────┘
│
┌───────────────────▼───────────────────────────┐
│ 计算引擎层 │
│ Spark(主力) Hive MR │
└───────────────────┬───────────────────────────┘
│
┌───────────────────▼───────────────────────────┐
│ 数据服务层 │
│ BI报表 即席查询 接口 机器学习 │
└───────────────────────────────────────────────┘
五、它们之间怎么配合使用
标准工作流程
-
数据通过 Flume/Sqoop/Kafka 进入 HDFS
-
在 Hive 中建表,映射 HDFS 数据
-
提交任务(Hive SQL 或 Spark 代码)
-
任务向 YARN 申请资源
-
YARN 分配资源,启动 Spark 或 MR 执行
-
计算时读写 HDFS/Hive
-
结果输出到报表、数据库、接口
六、实际应用场景总结
-
存海量数据 → HDFS
-
调度集群资源 → YARN
-
老系统离线计算 → MapReduce
-
数仓、报表、SQL 分析 → Hive
-
离线 ETL、实时计算、机器学习 → Spark
-
企业标准大数据平台 → HDFS + YARN + Spark + Hive
七、常见疑问:有 Spark SQL 为什么还要 Hive SQL?
核心结论:二者定位不同,不是替代关系,而是互补关系。Spark SQL 是“计算工具”,Hive SQL 是“数据仓库工具”,企业中二者常配合使用,而非二选一。
1. 核心定位差异
-
Spark SQL:属于 Spark 的核心模块,本质是“基于内存的 SQL 计算引擎”,专注于高效执行 SQL 查询、处理计算任务,不负责数据的长期管理、元数据维护。
-
Hive SQL:属于 Hive 数据仓库的核心,本质是“数据仓库管理工具 + SQL 解析器”,专注于数据仓库建模、元数据管理、数据分层,本身不做计算(底层可调用 Spark 或 MapReduce 执行计算)。
2. 具体互补点
-
元数据管理:Hive 有成熟的元数据管理机制(存储表结构、分区信息、数据存储路径、字段类型等),所有组件(Spark、Flink 等)都能通过 Hive 元数据访问 HDFS 中的数据,实现“一次建表,多引擎复用”;而 Spark SQL 本身没有独立的元数据管理,需依赖 Hive 元数据才能便捷访问结构化数据。
-
数据仓库分层落地:企业做数据仓库(ODS→DWD→DWS→ADS 分层)时,Hive 是行业标准工具,支持分区表、分桶表、视图、权限控制,能规范管理海量结构化数据;Spark SQL 更适合“计算过程”(比如用 Spark SQL 写 ETL 脚本,基于 Hive 表做数据清洗、聚合),不擅长长期的数据分层管理。
-
兼容性与历史遗留:很多企业早期基于 Hive 搭建了数据仓库,积累了大量 Hive SQL 脚本、任务调度流程,直接替换为 Spark SQL 需投入大量成本;且 Hive 支持 MapReduce、Spark 两种计算引擎,可根据场景灵活切换,兼容性更强。
-
用户场景差异:Hive SQL 更适合“非开发人员”(如数据分析师),只需关注表结构和查询需求,无需了解底层计算引擎;Spark SQL 更适合“开发人员”,可结合 Spark 核心 API,实现更复杂的计算逻辑(如关联机器学习、流处理)。
3. 总结一句话
用 Hive 建表、管理元数据、做数据分层,用 Spark SQL 作为底层计算引擎,执行 Hive SQL 或 Spark SQL 脚本,实现高效的 ETL、报表统计、数据分析,既保证数据管理的规范性,又兼顾计算效率。
更多推荐

所有评论(0)