设置 mr3-site.xml
conf/mr3-site.xml 文件中与 Kubernetes 上的 HivePlus 相关的配置键在 Kubernetes 部署文档中有详细说明。下面我们提供这些配置键的更多详细信息。
自动设置
HivePlus 会自动设置以下配置键,因此 kubernetes/conf/mr3-site.xml 中的值会被忽略。
mr3.k8s.namespacemr3.k8s.pod.master.serviceaccountmr3.k8s.pod.worker.serviceaccountmr3.k8s.pod.master.imagemr3.k8s.pod.master.usermr3.k8s.master.working.dirmr3.k8s.master.persistentvolumeclaim.mountsmr3.k8s.pod.worker.imagemr3.k8s.pod.worker.usermr3.k8s.worker.working.dirmr3.k8s.worker.persistentvolumeclaim.mountsmr3.k8s.conf.dir.configmapmr3.k8s.conf.dir.mount.dirmr3.k8s.keytab.secretmr3.k8s.worker.secretmr3.k8s.mount.keytab.secretmr3.k8s.mount.worker.secretmr3.k8s.keytab.mount.dirmr3.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.urlmr3.k8s.client.config.filemr3.k8s.service.account.use.token.ca.cert.pathmr3.k8s.service.account.token.pathmr3.k8s.service.account.token.ca.cert.pathmr3.k8s.nodes.polling.interval.msmr3.k8s.pods.polling.interval.msmr3.k8s.pod.creation.timeout.msmr3.k8s.pod.master.node.selectormr3.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.policymr3.k8s.pod.image.pull.secretsmr3.k8s.host.aliases
本地目录
以下配置键决定要挂载到 DAGAppMaster 和 ContainerWorker Pod 中的 emptyDir 和 hostPath 卷,因此应针对每个 HivePlus 安装进行更新。
mr3.k8s.pod.master.emptydirsmr3.k8s.pod.master.hostpathsmr3.k8s.pod.worker.emptydirsmr3.k8s.pod.worker.hostpaths
对于 DAGAppMaster 和 ContainerWorker Pod,emptyDir 和 hostPath 卷成为写入中间数据的本地目录,因此应至少提供一个这样的卷。对于 DAGAppMaster Pod,以下设置通常是可以的,因为 DAGAppMaster 只需要一个本地目录(除非它为 ContainerWorker 使用 Local 模式):
mr3.k8s.pod.master.emptydirs=/opt/mr3-run/work-local-dirmr3.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-dirmr3.k8s.pod.worker.hostpaths设置为空。
容忍度
用户可以使用以下配置键为 DAGAppMaster 和 ContainerWorker Pod 指定容忍度。
mr3.k8s.pod.master.toleration.specsmr3.k8s.pod.worker.toleration.specs
它们的值是以逗号分隔的容忍度规范列表。容忍度规范的格式为 [key]:[operator]:[value]:[effect]:[toleration in seconds],其中 [value] 和 :[toleration in seconds] 是可选的。这里有几个有效的示例:hello:Equal:world:NoSchedule、hello:Exists::NoSchedule、hello:Equal:world:NoExecute:300、hello:Exists::NoExecute:300。
需要注意的是,错误的规范会导致 DAGAppMaster Pod 或 ContainerWorker Pod 创建失败,因此用户在运行 HiveServer2 之前应检查每个容忍度规范的有效性。例如,foo:Equal::NoSchedule 是一个错误的规范,因为当 [operator] 为 Exists 时,[value] 必须为空。(相比之下,foo:Equal::NoSchedule 是可以的。)