Hadoop
Hadoop 是 Apache 开源的分布式计算框架,核心解决海量数据的存储与计算问题。采用主从架构,将数据分散存储在普通商用服务器集群上,通过 MapReduce 编程模型实现并行计算。
核心组件:HDFS(分布式文件系统)、MapReduce(计算引擎)、YARN(资源调度)。
核心架构
Client
│
├── YARN ResourceManager(资源总调度)
│ └── NodeManager × N(各节点资源管理)
│
└── HDFS NameNode(元数据管理)
└── DataNode × N(实际数据存储)
YARN 资源调度
| 角色 | 职责 |
|---|---|
| ResourceManager | 全局资源分配,接收作业提交 |
| NodeManager | 单节点资源上报,启动 Container |
| ApplicationMaster | 单个作业的任务拆分与协调 |
| Container | 实际运行 Map/Reduce Task 的沙箱 |
MapReduce 计算模型
将计算分为两个阶段:
输入数据
│
▼
Map(并行处理,输出 key-value 对)
│
▼ Shuffle(按 key 排序、分组,网络传输)
│
▼
Reduce(聚合同 key 的数据,输出结果)
│
▼
输出到 HDFS
WordCount 示例逻辑:
Map: "hello world" → (hello,1), (world,1)
Reduce: (hello,[1,1]) → (hello,2)
集群搭建(伪分布式)
# 配置免密登录
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 格式化 NameNode(首次运行)
hdfs namenode -format
# 启动集群
start-dfs.sh
start-yarn.sh
# 验证进程(应看到 NameNode DataNode SecondaryNameNode ResourceManager NodeManager)
jps核心配置文件:
| 文件 | 作用 |
|---|---|
core-site.xml | 指定默认 HDFS 地址 |
hdfs-site.xml | 副本数、数据目录 |
mapred-site.xml | 指定计算框架为 yarn |
yarn-site.xml | ResourceManager 地址 |
常用命令
# 提交 MapReduce 作业
hadoop jar hadoop-mapreduce-examples.jar wordcount /input /output
# 查看集群健康状态
hadoop fsck /
# 列出所有 NodeManager
yarn node -list
# 查看作业历史
mapred job -list版本演进
| 版本 | 特点 |
|---|---|
| Hadoop 1.x | JobTracker + TaskTracker,单点瓶颈 |
| Hadoop 2.x | 引入 YARN,计算与资源管理分离 |
| Hadoop 3.x | 支持纠删码(节省 50% 存储)、NameNode HA 增强 |