本章节介绍学习了客户端(Client)向MapReduce计算框架提交任务的基本过程。
1、客户端(Client)通过RPC协议(远程控制协议)向RM(Resource Manager)发送一个请求:我要向你提交一个job。
2、RM在收到客户端请求后回去HDFS(hadoop文件系统)获取一个存储JAR包的路径(Path)。
3、RM向Client返回Job ID和向HDFS获取的Path。
4、Client将Job ID和Path组合作为路径向HDFS写入JAR包,默认写10份。
注意1:Job ID + Path可以组成JAR包再HDFS中存放的唯一路径。
注意2:默认写10份可以理解为是将JAR包写入10台机器,NM(node manager)从10台机器获取JAR包,压力小。
注意3:运行完成后会将JAR包删除,所以不必担心JAR包占用控件过大。
5、在写入成功后,Client会将Job ID和存放JAR的地址提交给(通过将这两个信息作为RPC协议参数的方式传递)。
注意:RM中保存的是任务信息,而非job本身。
6、RM在收到Client发来的任务详情后会将其放入调度器中。
RM的调度器一般有两种:
(1)、公平调度器:每一个任务都有执行的机会(比如任务A执行一会,再去执行任务B…)。
(2)、先进先出调度器(队列):一个一个的执行任务。
7、RM向HDFS查询任务量,以计算需要开启多少个Map和Reduce。
8、NM通过心跳机制向RM领取任务信息。
注意:RM(老大)在向NM(小弟)分配任务时,并非是RM向NM指派任务,而是NM通过心跳机制向RM领取任务,NM每过一段时间变向RM查询,若有任务则领取,若无任务,则等待(这样极大减小了RM的开销)。
9、NM在领取到任务信息后,向HDFS获取要执行的JAR包。
10、NM在领取到JAR后,会开启一个(子)进程运行MapReduce。
注意:这里开启的是进程,独立于NM的进程。
10.1、(子)进程中的MapTracker会向HDFS中取数据,处理后返回给HDFS。
10.2、(子)进程中的ReduceTracker会向HDFS中取数据,处理后返回给HDFS。