第1章 Hadoop基础知识
Hadoop 是什么、为什么能处理海量数据、生态里都有谁,以及它和 Spark 的分工。
本章学习目标
- 能说出 Hadoop 的定义、发展历程与版本变迁
- 能画出 Hadoop 生态圈的主要组件并说明各自职责
- 能对比 Hadoop 与 Spark 的差异,判断选型
- 能举出 Hadoop 在互联网、通信、交通领域的典型应用
本章导览
核心内容
Hadoop概述
Hadoop 是 Apache 基金会下的一个分布式计算与存储框架,核心解决"海量数据存不下、算不动"的问题。
教材按"什么是 Hadoop → 产生与发展 → 版本变迁 → 基本特性"四步展开,这是理解后续所有组件的前提。
什么是Hadoop
Hadoop 是一个由 Apache 基金会开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。
- Hadoop 实现了分布式文件系统 HDFS:解决海量数据"存得下"的问题
- Hadoop 实现了分布式计算框架 MapReduce:解决海量数据"算得快"的问题
- 两者合起来,让普通 PC 服务器组成的集群具备处理 TB/PB 级数据的能力
Hadoop的产生与发展
Hadoop 最早源于 Google 的三篇论文(GFS、MapReduce、BigTable)与 Apache Nutch 项目。2006 年,Doug Cutting 将 Nutch 中的分布式存储与计算模块独立出来,命名为 Hadoop。
- 2003–2004 年:Google 发表 GFS 与 MapReduce 论文,奠定理论基础
- 2006 年:Hadoop 从 Nutch 中独立,成为 Apache 顶级项目
- 2008 年:Hadoop 在 900 节点集群上刷新 TeraSort 世界纪录
- 2011 年:Hadoop 1.0 发布,引入 YARN 的前身
- 2013 年至今:Hadoop 2.x / 3.x,YARN 成为独立资源调度层
💡 这三个论文对应的开源实现就是 HDFS、MapReduce 与 HBase,正好串起本教材第 4、6、8 章。
Hadoop的版本变迁
Hadoop 的版本号变化对应架构的重大调整,理解它才能看懂网上的教程为什么"对不上"。
| 版本 | 核心特征 | 说明 |
|---|---|---|
| Hadoop 1.x | HDFS + MapReduce | MapReduce 既算又管资源,集群规模受限 |
| Hadoop 2.x | HDFS + YARN + MapReduce | YARN 接管资源调度,可运行 Spark、Storm 等 |
| Hadoop 3.x | HDFS + YARN + MapReduce | 支持纠删码、多 Namenode、Java 8+,本课程使用 |
Hadoop的基本特性
- 高可靠性:数据多副本(默认 3 份),节点故障自动切换
- 高扩展性:可在不停机的情况下线性扩展集群节点
- 高效性:数据并行处理,适合批处理场景
- 高容错性:任务失败自动重试,数据损坏自动恢复
但 Hadoop 也有明显短板:不适合低延迟的实时查询,不适合大量小文件,不适合频繁修改的数据——这些正是 Hive、HBase、Spark 要补的位。
Hadoop生态系统
教材用一个"生态圈"把 Hadoop 周边组件串起来。考试和面试最常问的是"每个组件解决什么问题"。
| 层次 | 组件 | 作用 |
|---|---|---|
| 存储 | HDFS / HBase | HDFS 存文件;HBase 存随机读写的列式数据 |
| 计算 | MapReduce / Spark / Tez | 批处理与内存计算 |
| 资源调度 | YARN | 统一管理 CPU 与内存,让多框架共用一个集群 |
| 数据仓库 | Hive | 用 SQL 分析 HDFS 上的数据 |
| 数据采集 | Flume / Sqoop | Flume 采日志流;Sqoop 在关系库与 HDFS 间搬运 |
| 协调服务 | ZooKeeper | 分布式锁、选主、配置管理,HA 集群的基础 |
生态圈各组件分工
记住一条判断法则:<b>存数据找 HDFS/HBase,算数据找 MapReduce/Spark,调度找 YARN,用 SQL 找 Hive,搬数据找 Sqoop/Flume。</b>
💡 本课程的实验顺序就是按这个生态展开的:先装集群(第2章),再学 HDFS(第4章),然后 MapReduce(第6章)、Hive(第7章)、HBase(第8章)、Spark(第9章)。
Hadoop与Spark对比分析
教材专门用一节做对比,因为"什么时候用 Hadoop、什么时候用 Spark"是选型的核心问题。
| 对比项 | MapReduce | Spark |
|---|---|---|
| 计算模型 | 磁盘迭代,两阶段(Map/Reduce) | 内存计算,DAG 有向无环图 |
| 速度 | 相对慢(中间结果落 HDFS) | 快 10~100 倍(中间结果在内存) |
| 适用场景 | 大批量离线批处理 | 迭代计算、交互式查询、流计算 |
| 易用性 | 需写 Map/Reduce 类 | 提供算子 API(map/filter/reduceByKey) |
| 容错 | 任务重算,天然容错 | RDD 血缘重算 |
Hadoop的应用场景
- 互联网:用户行为日志分析、搜索索引构建、推荐系统的离线特征
- 通信:通话详单分析、基站流量统计、用户画像
- 交通:卡口过车数据、公交刷卡分析、路况与客流预测
这些场景的共同点是:<b>数据量大、一次写入多次读取、允许分钟级延迟</b>——正好是 Hadoop 的舒适区。
本章小结
本章从"什么是 Hadoop"出发,梳理了它的产生背景、版本演进与四大特性,用生态圈图讲清了 HDFS、YARN、MapReduce、Hive、HBase、Spark、ZooKeeper、Sqoop 等组件各自的职责,并通过与 Spark 的对比说明选型思路,最后给出互联网、通信、交通三类典型应用场景。
思考与练习 先自己做,再点开答案
Hadoop 的两个核心组件分别解决什么问题?
查看参考答案
HDFS 解决海量数据分布式存储问题(数据切块、多副本、跨节点存放);MapReduce 解决海量数据分布式计算问题(把计算搬到数据所在节点,分而治之)。
为什么说 Hadoop 不适合处理大量小文件?
查看参考答案
HDFS 中每个文件、目录、数据块在 NameNode 内存中都约占 150 字节元数据。大量小文件会让 NameNode 内存被元数据撑爆,同时每个小文件都会启动一个 Map 任务,任务启动开销远大于数据处理本身。
Hadoop 1.x 与 2.x 的主要区别是什么?
查看参考答案
1.x 中 MapReduce 既负责计算又负责资源调度(JobTracker/TaskTracker),集群规模受限、只支持 MapReduce;2.x 引入 YARN 专门做资源调度,MapReduce 只负责计算,从此一个集群可以同时运行 MapReduce、Spark、Storm 等多种框架。
Spark 比 MapReduce 快的主要原因?
查看参考答案
① 中间结果放内存而不是落磁盘;② 用 DAG 统一优化整个作业,减少不必要的 Shuffle;③ 提供更丰富的算子,避免拆成多轮 MapReduce。