跳到主要内容

设置 mr3-site.xml

conf/mr3-site.xml 文件中与 Kubernetes 上的 HivePlus 相关的配置键在 Kubernetes 部署文档中有详细说明。下面我们提供这些配置键的更多详细信息。

自动设置

HivePlus 会自动设置以下配置键,因此 kubernetes/conf/mr3-site.xml 中的值会被忽略。

  • mr3.k8s.namespace
  • mr3.k8s.pod.master.serviceaccount
  • mr3.k8s.pod.worker.serviceaccount
  • mr3.k8s.pod.master.image
  • mr3.k8s.pod.master.user
  • mr3.k8s.master.working.dir
  • mr3.k8s.master.persistentvolumeclaim.mounts
  • mr3.k8s.pod.worker.image
  • mr3.k8s.pod.worker.user
  • mr3.k8s.worker.working.dir
  • mr3.k8s.worker.persistentvolumeclaim.mounts
  • mr3.k8s.conf.dir.configmap
  • mr3.k8s.conf.dir.mount.dir
  • mr3.k8s.keytab.secret
  • mr3.k8s.worker.secret
  • mr3.k8s.mount.keytab.secret
  • mr3.k8s.mount.worker.secret
  • mr3.k8s.keytab.mount.dir
  • mr3.k8s.keytab.mount.file

使用默认值

对于以下配置键,kubernetes/conf/mr3-site.xml 中的默认值必须使用。

  • mr3.k8s.master.command(默认值为 /opt/mr3-run/hive/run-master.sh
  • mr3.k8s.worker.command(默认值为 /opt/mr3-run/hive/run-worker.sh

检查默认值

对于以下配置键,kubernetes/conf/mr3-site.xml 中的默认值通常就足够了,但用户可能需要根据 Kubernetes 集群的设置更新它们的值。

  • mr3.k8s.api.server.url
  • mr3.k8s.client.config.file
  • mr3.k8s.service.account.use.token.ca.cert.path
  • mr3.k8s.service.account.token.path
  • mr3.k8s.service.account.token.ca.cert.path
  • mr3.k8s.nodes.polling.interval.ms
  • mr3.k8s.pods.polling.interval.ms
  • mr3.k8s.pod.creation.timeout.ms
  • mr3.k8s.pod.master.node.selector
  • mr3.k8s.master.pod.affinity.match.label。值 hivemr3_app=hiveserver2 表示 DAGAppMaster Pod 可能被放置在与带有标签 hivemr3_app=hiveserver2 的 Pod 相同的主机上,即 HiveServer2 Pod。
  • mr3.k8s.pod.worker.node.selector

必要时覆盖默认值

对于以下配置键,用户应在启动 HivePlus 之前检查它们的值。

  • mr3.k8s.pod.image.pull.policy
  • mr3.k8s.pod.image.pull.secrets
  • mr3.k8s.host.aliases

本地目录

以下配置键决定要挂载到 DAGAppMaster 和 ContainerWorker Pod 中的 emptyDir 和 hostPath 卷,因此应针对每个 HivePlus 安装进行更新。

  • mr3.k8s.pod.master.emptydirs
  • mr3.k8s.pod.master.hostpaths
  • mr3.k8s.pod.worker.emptydirs
  • mr3.k8s.pod.worker.hostpaths

对于 DAGAppMaster 和 ContainerWorker Pod,emptyDir 和 hostPath 卷成为写入中间数据的本地目录,因此应至少提供一个这样的卷。对于 DAGAppMaster Pod,以下设置通常是可以的,因为 DAGAppMaster 只需要一个本地目录(除非它为 ContainerWorker 使用 Local 模式):

  • mr3.k8s.pod.master.emptydirs = /opt/mr3-run/work-local-dir
  • mr3.k8s.pod.master.hostpaths 设置为空。

对于 ContainerWorker Pod,可用本地目录的集合对性能很重要。如果 Kubernetes 集群中每个节点都挂载了相同的本地磁盘集,用户可以将 mr3.k8s.pod.master.hostpaths 设置为本地磁盘的目录列表,同时将 mr3.k8s.pod.worker.emptydirs 留空。例如,以下设置适用于每个节点挂载三个本地磁盘的同构 Kubernetes 集群:

  • mr3.k8s.pod.worker.emptydirs 设置为空
  • mr3.k8s.pod.worker.hostpaths = /data1/k8s,/data2/k8s,/data3/k8s

需要注意的是,用户不应从每个本地磁盘使用多个目录,因为这只会降低写入本地磁盘的性能。如果没有这样的本地磁盘附加,mr3.k8s.pod.worker.hostpaths 应设置为空,用户应使用 emptyDir 卷来写入中间数据,如下所示:

  • mr3.k8s.pod.worker.emptydirs = /opt/mr3-run/work-local-dir
  • mr3.k8s.pod.worker.hostpaths 设置为空。

容忍度

用户可以使用以下配置键为 DAGAppMaster 和 ContainerWorker Pod 指定容忍度。

  • mr3.k8s.pod.master.toleration.specs
  • mr3.k8s.pod.worker.toleration.specs

它们的值是以逗号分隔的容忍度规范列表。容忍度规范的格式为 [key]:[operator]:[value]:[effect]:[toleration in seconds],其中 [value]:[toleration in seconds] 是可选的。这里有几个有效的示例:hello:Equal:world:NoSchedulehello:Exists::NoSchedulehello:Equal:world:NoExecute:300hello:Exists::NoExecute:300

需要注意的是,错误的规范会导致 DAGAppMaster Pod 或 ContainerWorker Pod 创建失败,因此用户在运行 HiveServer2 之前应检查每个容忍度规范的有效性。例如,foo:Equal::NoSchedule 是一个错误的规范,因为当 [operator]Exists 时,[value] 必须为空。(相比之下,foo:Equal::NoSchedule 是可以的。)