跳到主要内容

运行多个 HiveServer2 实例

概述

HivePlus 允许多个 HiveServer2 实例共享一个公共 MR3 DAGAppMaster。作为一个应用,我们可以构建一个 Kubernetes 集群,它运行每个具有自己 Metastore 实例的多个 HiveServer2 实例。

所有 HiveServer2 实例共享通用服务(如 Ranger),并将其查询发送到管理公共 ContainerWorker Pod 池的同一 DAGAppMaster。轻松地为另一个 Metastore 实例添加新的 HiveServer2 实例,并移除现有的 HiveServer2 实例而不影响其他 HiveServer 实例也很容易。通过这种方式,我们可以模拟一个无服务器环境,通过共享 ContainerWorker Pod 和添加/移除 HiveServer2 实例来实现资源池化和快速弹性。

添加新的 HiveServer2 实例

为了运行多个共享公共 MR3 DAGAppMaster 的 HiveServer2 实例,用户应保留第一个 HiveServer2 实例生成的 MR3_SHARED_SESSION_ID 的值。

$ ./run-hive.sh
...
MR3_SHARED_SESSION_ID=59eb6c06-655e-48ad-b881-28516fd8d13c

要添加新的 HiveServer2 实例,用户应检查以下列表。

  • yaml/metastore.yamlyaml/metastore-service.yaml 中,为 StatefulSet、Service 和标签使用新名称:
vi yaml/metastore.yaml

metadata:
name: hivemr3-metastore2
spec:
serviceName: metastore2
selector:
matchLabels:
hivemr3_app: metastore2
template:
metadata:
name: hivemr3-metastore2
vi yaml/metastore-service.yaml

metadata:
name: metastore2
spec:
selector:
hivemr3_app: metastore2
  • env.sh 中,更改 HIVE_DATABASE_HOST 以指定新 HiveServer2 实例的 MySQL 数据库地址。更新 HIVE_METASTORE_HOST 以使用新的 Service 和标签。
vi env.sh

HIVE_DATABASE_HOST=indigo1
HIVE_METASTORE_HOST=hivemr3-metastore2-0.metastore2.hivemr3.svc.cluster.local
  • yaml/hive.yamlyaml/hiveserver2-service.yaml 中,为 Deployment、Service 和标签使用新名称:
vi yaml/hive.yaml

metadata:
name: hivemr3-hiveserver2-2
spec:
selector:
hivemr3_app: hiveserver2-2
template:
metadata:
labels:
hivemr3_app: hiveserver2-2
vi yaml/hiveserver2-service.yaml

metadata:
name: hiveserver2-2
spec:
selector:
hivemr3_app: hiveserver2-2
  • yaml/hiveserver2-service.yaml 中,为 HiveServer2 使用新端口。
vi yaml/hiveserver2-service.yaml

port: 9853
  • 更新 env.shrun-metastore.shrun-hive.shyaml/metastore.yamlyaml/hive.yaml 以使用 ConfigMap 的新名称:
vi env.sh

CONF_DIR_CONFIGMAP=hivemr3-conf-configmap-2
vi run-metastore.sh

kubectl create -n $MR3_NAMESPACE secret generic env-secret-2 --from-file=$BASE_DIR/env.sh
vi run-hive.sh

kubectl create -n $MR3_NAMESPACE secret generic env-secret-2 --from-file=$BASE_DIR/env.sh
vi yaml/metastore.yaml

spec:
template:
spec:
volumes:
- name: env-k8s-volume
secret:
secretName: env-secret-2
- name: conf-k8s-volume
configMap:
name: hivemr3-conf-configmap-2
vi yaml/hive.yaml

spec:
template:
spec:
volumes:
- name: env-k8s-volume
secret:
secretName: env-secret-2
- name: conf-k8s-volume
configMap:
name: hivemr3-conf-configmap-2
  • 如有需要,更新 conf/ranger-hive-security.xml 以使用 Ranger 的不同 Hive 服务。
vi conf/ranger-hive-security.xml

<property>
<name>ranger.plugin.hive.service.name</name>
<value>INDIGO_hive2</value>
</property>

现在用户可以执行脚本 run-hive.sh 来启动新的 HiveServer2 实例。将 MR3_SHARED_SESSION_ID 设置为第一个 HiveServer2 实例生成的值。

export MR3_SHARED_SESSION_ID=59eb6c06-655e-48ad-b881-28516fd8d13c
./run-hive.sh