java通过zookeeper 高可用方式连接hiveserver2

本文介绍了如何在CDH环境中配置HiveServer2的高可用(HA),包括修改HiveMetastore令牌存储、配置Zookeeper服务发现、调整JDBC URL,并详细步骤演示了通过CM进行配置和验证。确保任务在节点故障时仍能继续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景 :

  • 使用jdbc hive2 模式访问hive 大量任务导致单节点down 掉 从而导致任务调度失败

分析问题:

  • jdbc hive2 使用的 单节点hiveserver2的 服务 ,从公司CDH资源中可以发现 hiveserver2 分别部署在了3个节点上 ,由调度失败日志来看 失败时 其它两个节点正常 。这种情况典型的没有用到 hiveserver2的HA

解决问题:

  • CDH 配置hiveserver2 HA
    1 :进入CM 后台管理界面 将hive.cluster.delegation.token.store.class (HiveMetastore 代理令牌桶存储) 修改 为DBTokenStore
    2:hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)
    添加相关的配置:
hive.server2.support.dynamic.service.discovery=true
hive.server2.zookeeper.namespace=hiveserver2
hive.zookeeper.quorum=zookeeper_host:port
hive.zookeeper.client.port=2181

3: 修改jdbc url 连接串
JDBC连接的URL格式为:

  • zk_cluster_addr :形如:host1:2181,host2:2181,host3:2181
  • hive_db 默认为default
  • 集群中如有使用kerberos 需要在url 中添加principal 类似 mysql jdbc 中多个参数一样
  jdbc:hive2://zk_cluster_addr/hive_db;serviceDiscoveryMode=zookeeper;zooKeeperNamespace=hiveserver2;

通过CM重启Hive

使用beeline 连接hive

  beeline -u "jdbc:hive2://zk_cluster_addr/hive_db;serviceDiscoveryMode=zookeeper;zooKeeperNamespace=hiveserver2" --color=true

通过将某个节点的hiveserver2 服务停止 任务仍然能够执行

### 如何配置 HiveHiveServer2 #### 1. 调整资源配置以提升性能 为了提高 HiveServer2 处理查询请求的效率,可以通过修改内存分配来实现。例如,在启动脚本中设置 `HADOOP_HEAPSIZE` 参数以及 JVM 堆大小选项: ```shell export HADOOP_HEAPSIZE=4096 export HADOOP_NAMENODE_OPTS="-Xms4096m -Xmx4096m" ``` 这些命令会将堆内存固定为 4GB,从而减少动态调整带来的开销[^1]。 #### 2. 安全加固措施 加强 HiveServer2 的安全性非常重要,尤其是在生产环境中。可以启用 Kerberos 认证机制,具体方法是在环境变量中定义如下内容: ```shell export HIVE_SERVER2_AUTHENTICATION=KERBEROS ``` 此操作能够有效限制未授权用户的访问行为并保护敏感数据。 #### 3. 修改核心配置文件 (`hive-site.xml`) 在 `$HIVE_HOME/conf/hive-site.xml` 中添加必要的属性以便于客户端正常连接HiveServer2 实例上。以下是几个常见的配置项及其作用说明: - 设置绑定地址和监听端口: ```xml <property> <name>hive.server2.thrift.bind.host</name> <value>192.168.1.10</value> </property> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> ``` 上述 XML 片段指定了服务运行的具体 IP 地址与通信端口号[^2]。 - 如果需要支持高可用架构,则可通过 Zookeeper 来管理多个节点间的协调工作。下面是一条典型的 Beeline CLI 连接字符串实例演示了如何利用 ZK 提供的服务发现功能: ```plaintext !connect jdbc:hive2://centos-1:2181,centos-2:2181,centos-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=hive1&hive.server2.thrift.resultset.serialize.in.tasks=true ``` 当成功建立链接后,终端应该显示类似于这样的日志消息:“Connected to: Apache Hive (version 2.1.1)” 表明当前已接入目标数据库引擎版本号为 2.1.1 的服务器进程[^3]。 #### 4. 用户代理权限控制 为了让特定用户能够在不同机器之间切换身份完成作业提交任务,还需要额外声明允许哪些主体具备跨域操作的能力。这里给出了一组通用样例用于授予根账户(`root`)完全信任关系以及其他普通成员有限度内的许可范围扩展可能性: ```xml <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> ``` 以上片段赋予了 hadoop 和 root 用户广泛的主机列表及组集合访问权限[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值