0%

hadoop简介

Hadoop 简介:分布式系统的基石,到底在解决什么问题?

数据量到了 PB 级,单机装不下,单机算不动。这就是 Hadoop 要解决的问题。

Hadoop 做了两件事:

  • 存储:把数据分散到多台机器上存(HDFS)
  • 计算:把任务分散到多台机器上算(MapReduce)

它把分布式系统的复杂度封装起来,让你写代码的时候感觉像是在操作单机——不用管节点挂了怎么办、数据怎么分片、任务怎么协调。

核心组件:存储和计算,各管一摊

Hadoop 由两个核心组件构成:HDFS(存)和 MapReduce(算)。一个管数据放哪,一个管数据怎么处理。

HDFS:数据怎么存

HDFS 是分布式文件系统,把大文件切成一块一块(默认 128MB),分散到不同节点上存,每块存多份副本防丢。

三个角色:

角色 管什么 存什么
NameNode 管”账本”(元数据) 文件名、目录、块位置
DataNode 管”货”(实际数据) 每个 Block 的数据
SecondaryNameNode 帮 NameNode 整理账本 合并不了元数据,不是备份

读写流程:

graph TD
    A[客户端 Client] -->|元数据操作/数据读写| B[NameNode
主节点] A -->|数据块读写| C[DataNode1] & D[DataNode2] & E[DataNode3] B -->|元数据同步| F[SecondaryNameNode
辅助节点] B -->|心跳检测/块报告| C & D & E note1[NameNode 管理元数据,不存储实际数据] note2[DataNode 存储数据块,执行读写操作] note3[SecondaryNameNode 辅助元数据管理,非备份]
  • 写文件:Client 问 NameNode”块存哪” → NameNode 返回 DataNode 列表 → Client 直接写 DataNode
  • 读文件:Client 问 NameNode”块在哪” → NameNode 返回 DataNode 列表 → Client 直接从 DataNode 读

关键点:NameNode 只传”地址”,不传”数据”。 数据读写都在 Client 和 DataNode 之间直接走,NameNode 不参与,不然它扛不住。

MapReduce:数据怎么算

MapReduce 的核心思想是 “分而治之”——拆成小任务并行跑,跑完了汇总。

graph LR
    A[输入数据] -->|分片| B[Map 任务1] & C[Map 任务2] & D[Map 任务n]
    B -->|Key-Value| E[Shuffle 过程
排序 分组] C -->|Key-Value| E D -->|Key-Value| E E --> F[Reduce 任务1] & G[Reduce 任务2] F & G --> H[输出结果] note1[Map 拆分任务,生成中间键值对] note2[Shuffle 数据清洗,排序,分发] note3[Reduce 聚合中间结果,生成最终输出]

两阶段:

阶段 做什么 输出
Map 把输入拆成小块,每个块独立处理 <Key, Value> 键值对
Reduce 把相同 Key 的 Value 合并、聚合 最终结果

中间有个 Shuffle:Map 输出 → 排序 → 分组 → 传给 Reduce。

一个简化版的 WordCount(理解概念就行):

  • Map:每行拆单词,输出 <"hello", 1>
  • Shuffle:把所有 <"hello", 1> 归到一起
  • Reduce:把同一个单词的 1 加起来,输出 <"hello", 3>

Hadoop 的四个核心优势

特性 怎么实现的
高可用 数据存多份,节点挂了也不丢
高扩展 加机器就能扩展,不用改代码
高效 数据并行读、任务并行跑
高容错 节点故障自动检测,任务失败自动重试

附录

Hadoop 版本怎么选

版本 特点 适合谁
Apache Hadoop 开源,最原始,生态最全 有运维团队,需要灵活定制
CDH(Cloudera) 稳定,集成生态工具,有商业支持 企业生产环境(收费)
HDP(Hortonworks) 开源,文档好,易上手 注重文档的企业(已合并到 CDP)

现在新项目: 如果不是历史包袱,可以考虑直接上 CDP 或云上的 EMR,省去运维成本。

常用端口(快速查)

服务 Hadoop 2.x Hadoop 3.x
NameNode Web UI 50070 9870
YARN Web UI 8088 8088
历史服务器 19888 19888
HDFS RPC 8020/9000 8020/9000/9820

欢迎关注我的其它发布渠道