运行多个 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.yaml和yaml/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.yaml和yaml/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.sh、run-metastore.sh、run-hive.sh、yaml/metastore.yaml和yaml/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