跳到主要内容

DAGAppMaster 和 ContainerWorker 模式

DAGAppMaster 以以下四种模式之一运行:

  • LocalThread 模式:DAGAppMaster 在 MR3Client 内部作为新线程启动。
  • LocalProcess 模式:DAGAppMaster 在与 MR3Client 相同的机器上作为新进程启动。
  • Yarn 模式:DAGAppMaster 在 Hadoop 集群中作为新容器启动。
  • Kubernetes 模式:DAGAppMaster 在 Kubernetes 集群中作为 Pod 启动。

ContainerWorker 以以下四种模式之一运行:

  • Local 模式:ContainerWorker 在 DAGAppMaster 内部作为线程启动。
  • Yarn 模式:ContainerWorker 在 Hadoop 集群中作为容器启动。
  • Kubernetes 模式:ContainerWorker 在 Kubernetes 集群中作为 Pod 启动。
  • Process 模式:ContainerWorker 作为普通进程启动。

DAGAppMaster 和 ContainerWorker 模式的组合

MR3 支持 DAGAppMaster 和 ContainerWorker 模式的多种组合。例如,LocalProcess 模式允许我们在 Hadoop 集群外的专用机器上运行 DAGAppMaster(作为非托管 ApplicationMaster),这在同一个 DAGAppMaster 中运行许多并发 DAG 时特别有用。另一个例子,运行在 Yarn 模式下的 DAGAppMaster 可以使其 ContainerWorker 以 Local 模式运行,类似于 Hadoop 的 Uber 模式。此外,DAGAppMaster 可以混合使用不同模式的 ContainerWorker。例如,长时间运行的 ContainerWorker 可以采用 Yarn 模式运行,而短生命周期的 ContainerWorker 可以采用 Local 模式运行。

下表列出了 MR3 允许的所有组合。对于 Kubernetes 集群中的 LocalProcess 模式,DAGAppMaster 应该运行在 Kubernetes 集群内部。

集群DAGAppMasterContainerWorker
Hadoop/Kubernetes/StandaloneLocalThreadLocal
Hadoop/Kubernetes/StandaloneLocalProcessLocal
HadoopLocalThreadYarn
HadoopLocalProcessYarn
HadoopYarnLocal
HadoopYarnYarn
KubernetesLocalThreadKubernetes
KubernetesLocalProcess(仅在集群内部)Kubernetes
KubernetesKubernetesLocal
KubernetesKubernetesKubernetes
StandaloneLocalThreadProcess
StandaloneLocalProcessProcess

在 Hadoop 上

以下是 Hadoop 集群中六种组合的示意图:

  1. DAGAppMaster 采用 LocalThread 模式,ContainerWorker 采用 Local 模式 masterworkermode1

  2. DAGAppMaster 采用 LocalProcess 模式,ContainerWorker 采用 Local 模式 masterworkermode2

  3. DAGAppMaster 采用 Yarn 模式,ContainerWorker 采用 Local 模式 masterworkermode3

  4. DAGAppMaster 采用 LocalThread 模式,ContainerWorker 采用 Yarn 模式 masterworkermode4

  5. DAGAppMaster 采用 LocalProcess 模式,ContainerWorker 采用 Yarn 模式 masterworkermode5

  6. DAGAppMaster 采用 Yarn 模式,ContainerWorker 采用 Yarn 模式 masterworkermode6

在 Kubernetes 上

以下是 Kubernetes 上六种组合的示意图,我们假设使用 HivePlus。在当前实现中,HiveServer2 始终在 Pod 中启动。

  1. DAGAppMaster 采用 LocalThread 模式,ContainerWorker 采用 Local 模式 masterworkermode1

  2. DAGAppMaster 采用 LocalThread 模式,ContainerWorker 采用 Kubernetes 模式 masterworkermode2

  3. DAGAppMaster 采用 LocalProcess 模式,ContainerWorker 采用 Local 模式 masterworkermode3

  4. DAGAppMaster 采用 LocalProcess 模式,ContainerWorker 采用 Kubernetes 模式 masterworkermode4

  5. DAGAppMaster 采用 Kubernetes 模式,ContainerWorker 采用 Local 模式 masterworkermode5

  6. DAGAppMaster 采用 Kubernetes 模式,ContainerWorker 采用 Kubernetes 模式 masterworkermode6

指定 DAGAppMaster/ContainerWorker 模式

DAGAppMaster 模式可以通过 mr3-site.xml 中的配置键 mr3.master.mode 来指定:

  • LocalThread 模式:mr3.master.mode=local-thread
  • LocalProcess 模式:mr3.master.mode=local-process
  • Yarn 模式:mr3.master.mode=yarn
  • Kubernetes 模式:mr3.master.mode=kubernetes

ContainerWorker 模式可以通过 mr3-site.xml 中的配置键 mr3.am.worker.mode 来指定:

  • Local 模式:mr3.am.worker.mode=local。在这种情况下,所有 ContainerWorker 都以 Local 模式运行。
  • Yarn 模式:mr3.am.worker.mode=yarn。在这种情况下,ContainerWorker 可以运行在 Local 或 Yarn 模式(由其 ContainerGroup 决定)。
  • Kubernetes 模式:mr3.am.worker.mode=kubernetes。在这种情况下,ContainerWorker 可以运行在 Local 或 Kubernetes 模式(由其 ContainerGroup 决定)。
  • Process 模式:mr3.am.worker.mode=process。在这种情况下,ContainerWorker 可以运行在 Local 或 Process 模式(由其 ContainerGroup 决定)。

安全 Hadoop 集群中不支持 LocalThread/LocalProcess 模式

一个值得注意的限制是,DAGAppMaster 无法在启用 Kerberos 的安全 Hadoop 集群中以 LocalThread 或 LocalProcess 模式启动。这与其说是 MR3 的限制,不如说是 Yarn 中的一个缺失功能(YARN-2892),该功能对于非托管 ApplicationMaster 检索 AMRMToken 是必需的。因此,用户不应在安全 Hadoop 集群中以 LocalThread 或 LocalProcess 模式启动 DAGAppMaster。(在 HivePlus 中,不要在安全集群中使用 --amprocess 选项。)如果 DAGAppMaster 应该在安全 Hadoop 集群中以 LocalThread 或 LocalProcess 模式启动,则 ContainerWorker 应该仅以 Local 模式运行。