Hadoop2.x中MRAppMaster中用启动用户任务的父进程实现

    在Hadoop 2.x中MR是基于Yarn来完成的任务调度。MRAppMaster是MR中的ApplicationMaster,它向ResourceManager申请容器资源并执行用户任务。
    我知道在容器中MR是启动了一个自己实现父进程来完成用户任务的统计和监控的,我想了解一下这个父进程是如何实现的,具体实现类是哪个,有没有哪位大神可以给予指导,谢谢!
 
补充:是org.apache.hadoop.mapred.YarnChild这个类吗?

wangxiaolei

赞同来自:

1、YARN使用了基于事件驱动的异步编程模型,它通过事件将各个组件联系起来,并由一个中央事件调度器统一将各种事件分配给对应的事件处理器。在YARN 中,每种组件是一种事件处理器,当MRAppMaster启动时,它们会以服务的形式注册到MRAppMaster的中央事件调度器上,并告诉调度器它们 处理的事件类型,这样,当出现某一种事件时,MRAppMaster会查询<事件,事件处理器>表,并将该事件分配给对应的事件处理器。 其中的一个组件:               ContainerAllocator               与ResourceManager通信,为作业申请资源。 2、在MRAppMaster.java源码中       2.1 可以找到内部类 ContainerAllocatorRouter,还发现这个类实现了ContainerAllocator和RMHeartbeatHandler两个接口       2.2 还可以在方法protected void serviceInit(final Configuration conf) throws Exception { ... }中,阅读代码,这里列出源代码片段如下:       
//service to handle requests from JobClient
      clientService = createClientService(context);
      // Init ClientService separately so that we stop it separately, since this
      // service needs to wait some time before it stops so clients can know the
      // final states
      clientService.init(conf);

      containerAllocator = createContainerAllocator(clientService, context);

      //service to handle the output committer
      committerEventHandler = createCommitterEventHandler(context, committer);
      addIfService(committerEventHandler);

      //service to handle requests to TaskUmbilicalProtocol
      taskAttemptListener = createTaskAttemptListener(context);
      addIfService(taskAttemptListener);

      //service to log job history events
      EventHandler<JobHistoryEvent> historyService =
        createJobHistoryHandler(context);
      dispatcher.register(org.apache.hadoop.mapreduce.jobhistory.EventType.class,
          historyService);

      this.jobEventDispatcher = new JobEventDispatcher();

      //register the event dispatchers
      dispatcher.register(JobEventType.class, jobEventDispatcher);
      dispatcher.register(TaskEventType.class, new TaskEventDispatcher());
      dispatcher.register(TaskAttemptEventType.class,
          new TaskAttemptEventDispatcher());
      dispatcher.register(CommitterEventType.class, committerEventHandler);
对照第一条写的理论。  

fish - Hadooper

赞同来自:

YarnClient是执行maper/reducer的。 MRAppMaster是appmaster的主入口类。

要回复问题请先登录注册