跳到主要内容

高可用性

为 HiveServer2 启用高可用性

为了启用 HiveServer2 的高可用性,用户应采取以下两个步骤:

  • env.sh 中设置环境变量 MR3_SHARED_SESSION_ID
  • 通过更新 hive-site.xml 配置高可用性

首先,在启动 HiveServer2 实例之前将 MR3_SHARED_SESSION_ID 设置为一个唯一字符串,例如:

vi env.sh
export MR3_SHARED_SESSION_ID=d7b52f74-7349-405c-88a2-d0d1cbb5a918

该环境变量(其值在 HiveServer2 内部用作 MR3 会话 ID)可以设置为任何字符串,但应在所有 HiveServer2 实例中保持相同,以便它们共享 HDFS 上的同一个临时目录。

接下来,通过更新 hive-site.xml 来配置 HiveServer2。下表显示了与 HiveServer2 高可用性相关的配置键。特别是,将 hive.server2.active.passive.ha.enable 设置为 true 可以启用高可用性,并允许所有 HiveServer2 实例共享一个通用的 MR3 DAGAppMaster。需要注意的是,高可用性需要服务发现(由 hive.server2.support.dynamic.service.discovery 指定),以便所有 HiveServer2 实例都可以注册到 ZooKeeper。

名称默认值启用高可用性的示例
hive.server2.active.passive.ha.enablefalsetrue
hive.server2.support.dynamic.service.discoveryfalsetrue
hive.mr3.zookeeper.appid.namespacemr3AppId(默认值)
hive.server2.active.passive.ha.registry.namespacehs2ActivePassiveHA(默认值)
hive.server2.zookeeper.namespacehiveserver2hiveserver2-mr3
hive.zookeeper.quorumblue0:2181blue0:2181
hive.zookeeper.client.port21812181

由于 HiveServer2 的高可用性使用服务发现,Beeline 连接会随机选择一个 HiveServer2 实例。为了利用服务发现的优势,用户在运行 Beeline 时应指定 ZooKeeper 服务器和命名空间。例如,对于在 blue0:2181 上运行的 ZooKeeper 服务器和命名空间 hiveserver2-mr3,用户可以按如下方式在 env.sh 中设置环境变量 HIVE_SERVER2_JDBC_OPTS

vi env.sh
HIVE_SERVER2_JDBC_OPTS="ssl=false;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2-mr3"

在同一节点上运行多个 HiveServer2 实例

如果多个 HiveServer2 实例要在同一节点上运行,用户应通过在 env.sh 中设置环境变量 HIVE_SERVER2_PORT每个 HiveServer2 实例分配不同的端口。此外,应在 hive-site.xml 中设置以下两个配置键。

  • hive.server2.webui.port 设置为 0 以避免冲突
  • 适当设置 hive.server2.logging.operation.log.location,例如 /tmp/hive/operation_logs/${hive.server2.port}

使用 ZooKeeper

如果 HiveServer2 在启动时建立与 ZooKeeper 的连接,用户应确保 HiveServer2 使用的 Curator 模块(org.apache.curator)与 ZooKeeper 服务兼容。如果不兼容,用户应手动运行适当版本的 ZooKeeper,并在 hive-site.xml 中设置配置键 hive.zookeeper.quorum