1. CoronaTaskTracker功能

CoronaTaskTracker类似于MRv1中的TaskTracker,是每个节点上的代理服务,负责向ClusterManager和CoronaJobTracker汇报心跳信息,接收来自CoronaTaskTracker的命令(如launch task、Kill task等),并进行处理。其中,向ClusterManager汇报的心跳信息包括:节点总的资源量(包括磁盘、内存、CPU和网络四种资源)和空闲资源量;向CoronaJobTracker汇报的心跳信息包括各个任务的运行状态。

2. CoronaTaskTracker实现方法

CoronaTaskTracker是在原有的TaskTracker基础上实现的,它继承了MRv1中的TaskTracker,以便重用它里面的大部分函数,包括对这种Action的处理处理函数等。

CoronaTaskTracker仍然通过InterTrackerProtocol协议向CoronaJobTracker发送任务运行信息,但是,CoronaJobTracker不再通过心跳应答为之发送各种Action,这改为由CoronaJobTracker通过另外一个RPC协议主动发送以缩短响应时间。此外,由于每个应用程序对应一个CoronaJobTracker,因此,每个CoronaTaskTracker需要同时往多个CoronaJobTracker上发送心跳信息。

为了支持CoronaJobTracker主动向CoronaTaskTracker发送Action,CoronaTaskTracker实现了一个新的接口协议CoronaTaskTrackerProtocol,它包含两个RPC函数:

public void submitActions(TaskTrackerAction[] actions);// 处理各种Action

 public void startCoronaJobTracker(Task jobTask, CoronaSessionInfo info);//启动CoronaJobTracker。

此外,CoronaTaskTracker周期性地向ClusterManager汇报自己的资源信息,包括总资源量和空闲资源量等。

3. CoronaTaskTracker架构

如果你已经非常了解MRv1中的TaskTracker架构,那么。经过上面的介绍,你应该可以想象出CoronaTaskTracker的架构,具体如下图所示。

CoronaTaskTracker有三个对外通道,分别对应RPC协议InterTrackerProtocol、CoronaTaskTrackerProtocol和ClusterManagerService,下面依次进行介绍:

  • InterTrackerProtocol协议

CoronaTaskTracker通过该协议向各个CoronaJobTracker汇报其对应的任务的运行状态,但需要注意的是,与MRv1中的TaskTracker不同,CoronaJobTracker不会通过该协议向对应的TaskTracker发送各种命令。

  • CoronaTaskTrackerProtocol协议

CoronaJobTracker通过该协议向CoronaTaskTracker发送各种命令,同MRv1一样,包括命令(或者称为Action):LAUNCH_TASK、COMMIT_TASK、KILL_JOB、KILL_TASK、REINIT_TRACKER,如果你了解MRv1,那么应该对这几种Action非常熟悉,如果你了解,也没关系,我在此解释一下:

1)LAUNCH_TASK 这个一看就知道,启动新的任务。

2)COMMIT_TASK 这个可能有人不懂。我们知道,Hadoop中有一种优化机制被称为推测执行,这种机制可能导致同一份数据有两个任务同时进行处理,为了防止产生写冲突,Hadoop会暂时将任务的中间处理结果写到一个临时目录中,一旦有一个任务处理完成后,便会将这个任务的结果移动到最终处理结果目录中,而另外一个任务将被杀死。而COMMIT_TASK就是告诉TaskTracker:“这个任务的结果可以作为最终结果,赶快将它的结果移动到最终结果处理目录中吧!”

3)KILL_JOB  顾名思义,杀死一个作业,通常而言,当一个用户发出杀死作业命令或者一个作业失败的任务超过一定比例后,会发出这样的命令。

4) KILL_TASK      不再解释。

5) REINIT_TRACKER   让该TaskTracker重新初始化,一般当JobTracker端出现不一致状态时,会让相关的TaskTracker重新初始化。

  • ClusterManagerService协议(采用thrift实现)

CoronaTaskTracker通过该协议向ClusterManager汇报本节点上的资源情况,包括总的资源量和剩余资源量,当前会回报四种资源,包括CPU、磁盘、网络带宽和内存,其中,网络带宽当前设为常量100,而调度机制仅考虑内存资源。

除了以上三个RPC协议,CoronaTaskTracker最核心的部分是对各种Action的处理函数,它本身未对这些进行修改,完全重用了MRv1中TaskTracker的实现。

原创文章,转载请注明: 转载自董的博客

本文链接地址: Corona深入剖析系列—CoronaTaskTracker实现

微信公众号:hadoop-123,专注于大数据技术分享,欢迎加入!

说点什么

avatar
  Subscribe  
提醒