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 会在必要时自动重启。
-
MR3Client 在 Kubernetes 内部,DAGAppMaster 采用 LocalThread 模式(
mr3.master.mode=local-thread)
-
MR3Client 在 Kubernetes 内部,DAGAppMaster 采用 LocalProcess 模式(
mr3.master.mode=local-process)
-
MR3Client 在 Kubernetes 内部,DAGAppMaster 采用 Kubernetes 模式(
mr3.master.mode=kubernetes)
在 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。
- MR3Client 在 Kubernetes 外部,DAGAppMaster 采用 LocalThread 模式(
mr3.master.mode=local-thread)
对于以 Kubernetes 模式运行 DAGAppMaster,用户应采取两个额外操作。首先,用户应创建一个 Service,以便可以从 Kubernetes 外部访问 DAGAppMaster。接下来,用户应将配置键 mr3.k8s.am.service.host 和 mr3.k8s.am.service.port 设置为该 Service 的地址。需要注意的是,运行在 Kubernetes 集群内 Pod 中的 DAGAppMaster 会创建自己的 Kubernetes 客户端(为了创建 ContainerWorker Pod),但它使用 MR3 的默认设置,而不是 mr3-site.xml 中覆盖的设置。现在用户可以以 Kubernetes 模式运行 DAGAppMaster。
- MR3Client 在 Kubernetes 外部,DAGAppMaster 采用 Kubernetes 模式(
mr3.master.mode=kubernetes)
目前不支持以 LocalProcess 模式运行 DAGAppMaster。