一、整体概念总览

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 外壳。

流程

  1. 写 Hive SQL

  2. 解析器生成执行计划

  3. 底层跑 MapReduce 或 Spark

  4. 数据存在 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报表  即席查询  接口  机器学习        │
└───────────────────────────────────────────────┘

五、它们之间怎么配合使用

标准工作流程

  1. 数据通过 Flume/Sqoop/Kafka 进入 HDFS

  2. 在 Hive 中建表,映射 HDFS 数据

  3. 提交任务(Hive SQL 或 Spark 代码)

  4. 任务向 YARN 申请资源

  5. YARN 分配资源,启动 Spark 或 MR 执行

  6. 计算时读写 HDFS/Hive

  7. 结果输出到报表、数据库、接口


六、实际应用场景总结

  • 存海量数据 → 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、报表统计、数据分析,既保证数据管理的规范性,又兼顾计算效率。

更多推荐