跳到主要内容

Kubernetes 内外运行 MR3Client

对于在 Kubernetes 上运行 MR3,用户可以分别在 Kubernetes 内部或外部执行 MR3Client(包含在 HiveServer2 和 Spark 驱动程序中)。

在 Kubernetes 内部运行 MR3Client

MR3 的默认设置已准备好从 Kubernetes 内部的 Pod 执行 MR3Client。

  • mr3.k8s.api.server.url 设置为 https://kubernetes.default.svc,在 Kubernetes 内部可访问。
  • mr3.k8s.client.config.file 未设置,因此 MR3Client 不读取 ServiceAccount 的配置文件。
  • mr3.k8s.service.account.use.token.ca.cert.path 设置为 true,因此 MR3Client 读取 Kubernetes 自动挂载的两个 ServiceAccount 文件:/var/run/secrets/kubernetes.io/serviceaccount/token/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

用户可以运行处于 LocalThread、LocalProcess 和 Kubernetes 模式之一的 DAGAppMaster。这是首选的在 Kubernetes 上运行 HivePlus 的方式,因为 HiveServer2 会在必要时自动重启。

  1. MR3Client 在 Kubernetes 内部,DAGAppMaster 采用 LocalThread 模式(mr3.master.mode=local-threadk8s-client-inside-localthread

  2. MR3Client 在 Kubernetes 内部,DAGAppMaster 采用 LocalProcess 模式(mr3.master.mode=local-processk8s-client-inside-localprocess

  3. MR3Client 在 Kubernetes 内部,DAGAppMaster 采用 Kubernetes 模式(mr3.master.mode=kubernetesk8s-client-inside-k8s

在 Kubernetes 外部运行 MR3Client

为了在 Kubernetes 外部执行 MR3Client,用户应在 mr3-site.xml 中设置 MR3Client 用于创建 Kubernetes 客户端的配置键:

  • mr3.k8s.api.server.url 应设置为 Kubernetes API 服务器的地址。
  • mr3.k8s.client.config.file 应指向 ServiceAccount 的配置文件(例如 ~/.kube/config)。
  • mr3.k8s.service.account.use.token.ca.cert.path 应设置为 false(除非用户手动准备两个 ServiceAccount 文件)。

然后用户可以在设置 DAGAppMaster 的配置后(例如设置指向本地目录的 mr3.am.staging-dir)以 LocalThread 模式运行 DAGAppMaster。

  1. MR3Client 在 Kubernetes 外部,DAGAppMaster 采用 LocalThread 模式(mr3.master.mode=local-threadk8s-client-outside-localthread

对于以 Kubernetes 模式运行 DAGAppMaster,用户应采取两个额外操作。首先,用户应创建一个 Service,以便可以从 Kubernetes 外部访问 DAGAppMaster。接下来,用户应将配置键 mr3.k8s.am.service.hostmr3.k8s.am.service.port 设置为该 Service 的地址。需要注意的是,运行在 Kubernetes 集群内 Pod 中的 DAGAppMaster 会创建自己的 Kubernetes 客户端(为了创建 ContainerWorker Pod),但它使用 MR3 的默认设置,而不是 mr3-site.xml 中覆盖的设置。现在用户可以以 Kubernetes 模式运行 DAGAppMaster。

  1. MR3Client 在 Kubernetes 外部,DAGAppMaster 采用 Kubernetes 模式(mr3.master.mode=kubernetesk8s-client-outside-k8s

目前不支持以 LocalProcess 模式运行 DAGAppMaster。