跳到主要内容

设置 YAML 文件

下面我们提供 yaml 目录中 YAML 文件的详细信息。

这些文件应更新以反映 env.sh 中的设置和 Kubernetes 集群的具体配置。由于 YAML 文件不读取环境变量,所有必要的更新必须手动完成。

所有 Pod 共用

namespace.yaml

此清单为所有 Kubernetes 对象定义一个命名空间。name 字段应与 kubernetes/env.shMR3_NAMESPACE 指定的命名空间匹配。

vi yaml/namespace.yaml name: hivemr3

同样,其他 YAML 文件中的 namespace 字段应匹配相同的命名空间。

hive-service-account.yaml

此清单定义一个 ServiceAccount。ServiceAccount 对象的名称(hive-service-account)在 run-hive.sh 中读取,因此无需更新此文件。

cluster-role.yaml

此清单定义一个 ClusterRole。ClusterRole 资源的名称(node-reader)在 run-hive.sh 中读取,因此无需更新此文件。

metastore-role.yaml

此清单为 Metastore Pod 定义一个 Role。Role 资源的名称(metastore-role)在 run-metastore.sh 中读取,因此无需更新此文件。

hive-role.yaml

此清单为 HiveServer2 Pod 定义一个 Role。Role 资源的名称(hive-role)在 run-hive.sh 中读取,因此无需更新此文件。

workdir-pv.yaml

此清单为 PersistentVolume 定义一个卷,用于将查询结果从 ContainerWorker 复制到 HiveServer2。用户应更新它以使用所需类型的 PersistentVolume。

workdir-pvc.yaml

此清单定义一个 PersistentVolumeClaim,引用由 workdir-pv.yaml 创建的 PersistentVolume。用户应指定存储大小。

vi yaml/workdir-pvc.yaml storage: 10Gi

配置 Metastore

metastore-service.yaml

此清单定义管理 Metastore 的 StatefulSet 所需的服务。用户应使用 env.sh 中环境变量 HIVE_METASTORE_PORT 指定的相同端口号。

vi yaml/metastore-service.yaml ports: - name: tcp port: 9850

metastore.yaml

此清单为运行 Metastore 定义一个 Pod。用户应根据 Kubernetes 集群设置更新此文件中的几个部分。

spec.template.spec.containers 部分:

  • image 字段应与 env.shDOCKER_HIVE_IMG 指定的 Docker 镜像匹配。
  • resources.requestsresources.limits 指定分配给 Metastore Pod 的资源。
  • ports.containerPort 字段应与 metastore-service.yaml 中指定的端口号匹配。
vi yaml/metastore.yamlspec: template: spec: containers: - image: mr3project/hive:4.0.0.mr3.2.4 resources: requests: cpu: 2 memory: 16Gi limits: cpu: 2 memory: 16Gi ports: - containerPort: 9850 protocol: TCP

spec.template.spec.volumes 部分:

  • conf-k8s-volume 下的 configMap.name 字段应与 env.shCONF_DIR_CONFIGMAP 指定的名称匹配。
  • key-k8s-volume 下的 secret.secretName 字段应与 env.shKEYTAB_SECRET 指定的名称匹配。
vi yaml/metastore.yamlspec: template: spec: volumes: - name: conf-k8s-volume configMap: name: hivemr3-conf-configmap - name: key-k8s-volume secret: secretName: hivemr3-keytab-secret

spec.template.spec.hostAliases 部分:

  • env.sh 中的 HIVE_DATABASE_HOST 指定运行 Metastore 数据库的主机。如果它使用默认 DNS 未知的主机,用户应添加其别名。以下示例添加了默认 DNS 未知的主机名 red0indigo20
vi yaml/metastore.yamlspec: template: spec: hostAliases: - ip: "10.1.91.4" hostnames: - "red0" - ip: "10.1.91.41" hostnames: - "indigo20"

配置 HiveServer2

hiveserver2-service.yaml

此清单定义一个服务,用于将 HiveServer2 暴露到 Kubernetes 集群外部。用户应指定一个带有有效主机名的公共 IP 地址和 HiveServer2 的端口号(名称为 thrift),以便客户端可以从 Kubernetes 集群外部连接到它。如果启用了 HTTP 传输(通过在 conf/hive-site.xml 中将配置键 hive.server2.transport.mode 设置为 allhttp),则应指定另一个端口号(名称为 http)。主机名是必需的,以便 Ranger 可以安全地与 HiveServer2 通信。

vi yaml/hiveserver2-service.yaml ports: - protocol: TCP port: 9852 targetPort: 9852 name: thrift - protocol: TCP port: 10001 targetPort: 10001 name: http externalIPs: - 10.1.91.41

在我们的示例中,我们使用 10.1.91.41:9852 作为 HiveServer2 的完整地址。用户应确保 IP 地址存在且带有有效的主机名,且未被占用。

hive.yaml

此清单通过创建 Deployment 来定义运行 HiveServer2 的 Pod。用户应根据 Kubernetes 集群设置更新此文件中的几个部分。

spec.template.spec.containers 部分:

  • image 字段应与 env.shDOCKER_HIVE_IMG 指定的 Docker 镜像匹配。
  • args 字段指定 DAGAppMaster 模式:--localthread 为 LocalThread 模式,--localprocess 为 LocalProcess 模式,--kubernetes 为 Kubernetes 模式。
  • resources.requestsresources.limits 字段指定分配给 HiveServer2 Pod 的资源。
  • 三个字段 ports.containerPortreadinessProbe.tcpSocket.portlivenessProbe.tcpSocket.port 应与 hiveserver2-service.yaml 中指定的端口号匹配。
$ vi yaml/hive.yamlspec: template: spec: containers: - image: mr3project/hive:4.0.0.mr3.2.4 args: ["start", "--kubernetes"] resources: requests: cpu: 4 memory: 32Gi limits: cpu: 4 memory: 32Gi ports: - containerPort: 9852 readinessProbe: tcpSocket: port: 9852 livenessProbe: tcpSocket: port: 9852

spec.template.spec.volumes 部分:

  • conf-k8s-volume 下的 configMap.name 字段应与 env.shCONF_DIR_CONFIGMAP 指定的名称匹配。
  • key-k8s-volume 下的 secret.secretName 字段应与 env.shKEYTAB_SECRET 指定的名称匹配。
vi yaml/hive.yamlspec: template: spec: volumes: - name: conf-k8s-volume configMap: name: hivemr3-conf-configmap - name: key-k8s-volume secret: secretName: hivemr3-keytab-secret

spec.template.spec.hostAliases 字段可以列出默认 DNS 可能找不到的主机的别名。例如,运行 Metastore 的主机可能对默认 DNS 未知,在这种情况下,用户可以为其添加别名。