1. Hadoop 1.x计算引擎架构解析
在分布式计算发展史上,Hadoop 1.x的JobTracker与TaskTracker架构具有里程碑意义。这套经典的主从式设计奠定了大数据处理的基础模式,其核心思想至今仍影响着现代分布式系统。让我们深入剖析这套架构的运作机制。
1.1 主从架构设计
JobTracker作为集群唯一的控制中心,承担着多重职责:
- 作业调度:将MapReduce作业分解为任务序列
- 资源管理:监控集群资源状态并分配计算槽位
- 容错处理:检测并恢复失败任务
- 状态维护:跟踪所有作业和任务的执行进度
与之对应的TaskTracker部署在每个数据节点上,主要职责包括:
- 心跳汇报:定期向JobTracker发送节点状态
- 任务执行:启动和管理本地任务进程
- 资源隔离:通过固定槽位限制并发任务数
这种设计完美呼应了HDFS的NameNode/DataNode架构,形成了存储与计算对称的分布式系统模型。在2010年前后,这种架构支撑了早期互联网企业的海量数据处理需求。
1.2 核心组件交互流程
作业执行的完整生命周期包含以下关键阶段:
- 作业提交:
java复制// 客户端提交作业示例
JobClient.runJob(conf);
// JobTracker内部处理
public JobStatus submitJob(JobID jobId) {
JobConf jobConf = new JobConf(jobId);
InputSplit[] splits = getInputSplits(jobConf);
JobInProgress job = new JobInProgress(jobId, jobConf, splits);
scheduler.jobAdded(job);
}
- 任务调度:
- JobTracker根据数据本地性原则分配任务
- 优先选择存储有输入数据的节点(DATA_LOCAL)
- 次选同机架节点(RACK_LOCAL)
- 最后考虑跨机架节点(OFF_RACK)
- 心跳机制:
java复制// TaskTracker心跳处理逻辑
public HeartbeatResponse heartbeat(TaskTrackerStatus status) {
updateTaskTrackerStatus(status);
if (status.getAvailableSlots() > 0) {
tasks = scheduler.assignTasks(tracker);
}
return new HeartbeatResponse(tasks);
}
- 容错恢复:
- 任务超时(默认10分钟无进展)
- 节点故障(连续3次心跳丢失)
- 任务失败重试(默认4次尝试)
这套机制在千节点规模下表现良好,但随着集群规模扩大,其架构局限性逐渐显现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. JobTracker深度剖析
2.1 核心功能实现
JobTracker的内部模块划分体现了经典的系统设计思想:
| 功能模块 | 子功能 | 实现要点 |
|---|---|---|
| 作业管理 | 作业队列 | 优先级队列管理作业生命周期 |
| 任务分解 | 根据InputSplit创建TaskInProgress | |
| 资源调度 | 槽位分配 | 考虑数据本地性的二级调度 |
| 负载均衡 | 基于节点负载的动态调整 | |
| 容错处理 | 心跳检测 | 超时判定(默认10分钟) |
| 任务重试 | 黑名单机制避免问题节点 |
其内存数据结构设计尤为关键:
java复制class JobTracker {
Map<JobID, JobInProgress> jobs; // 作业状态表
Map<String, TaskTrackerStatus> trackers; // 节点状态表
TaskScheduler scheduler; // 调度策略实现
}
