概述
MapReduce (MR) 提交全流程是一系列步骤,用于将用户编写的MR程序提交到Hadoop集群中执行。以下是一张详细的流程图,展示了MR提交的全过程,帮助您快速理解并简化这一过程。
MR提交全流程图
graph LR A[用户编写MR程序] --> B{是否配置作业参数?} B -- 是 --> C[配置作业参数] B -- 否 --> C C --> D[通过JobClient提交作业] D --> E{JobClient与JobTracker通信?} E -- 是 --> F[JobTracker返回jar包地址和jobId] E -- 否 --> G[JobClient处理异常] F --> H[将jar包写入HDFS] H --> I[提交任务描述信息] I --> J[JobTracker初始化任务] J --> K[读取HDFS上的文件] K --> L[计算输入分片] L --> M[分配MapperTask] M --> N[TaskTracker领取任务] N --> O[下载jar和配置文件] O --> P[启动java子进程执行任务] P --> Q[将结果写入HDFS] Q --> R[作业完成]
流程说明
- 用户编写MR程序:用户首先需要编写自己的MapReduce程序,该程序包含map()和reduce()函数,用于处理数据。
- 配置作业参数:在提交作业之前,需要配置作业参数,包括输入输出路径等。
- 通过JobClient提交作业:使用JobClient将作业提交到Hadoop集群。
- JobClient与JobTracker通信:JobClient通过RPC与JobTracker通信,获取jar包存储地址和jobId。
- 将jar包写入HDFS:将用户编写的jar包写入到HDFS中,以便在集群中执行。
- 提交任务描述信息:向JobTracker提交任务描述信息,包括jobid、jar存放位置和配置信息等。
- JobTracker初始化任务:JobTracker接收到任务描述信息后,进行初始化任务。
- 读取HDFS上的文件:JobTracker读取HDFS上的要处理的文件。
- 计算输入分片:计算输入分片,每个分片对应一个MapperTask。
- 分配MapperTask:将分片信息写入到job.split中,并分配MapperTask。
- TaskTracker领取任务:TaskTracker通过心跳机制领取任务。
- 下载jar和配置文件:TaskTracker下载所需的jar和配置文件。
- 启动java子进程执行任务:TaskTracker启动一个java子进程,执行具体的任务(MapperTask或ReducerTask)。
- 将结果写入HDFS:将执行结果写入到HDFS中。
- 作业完成:作业执行完成后,JobTracker更新作业状态,并通知用户。
通过以上流程,用户可以轻松地将自己的MR程序提交到Hadoop集群中执行,无需关注底层细节,从而提高开发效率。