赞
踩
Java访问Hive的几种JDBC URL格式
1.相关参数的默认值:
1)hive 服务默认端口是 10000
2)zookeeper server默认端口是 2181
3)hive 的默认数据库是 default
2.几种方式访问hive的JDBC URL区别:
1)HiveServer2 单点访问 JDBC URL
格式:
jdbc:hive2://<hiveserver2_host:hiveserver2_port>/<dbName>
说明:
i)地址和端口为HiveServer2服务的地址及端口;
hive-site.xml 配置文件中的端口配置:
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
如果配置文件中没有配置 hive.server2.thrift.port 或者配置的值不是 10000 则表示 Hive 没有开放 10000 端口。
ii)dbName 是Hive数据库,默认为default;
示例:
#访问节点1的HiveServer2服务地址和端口:
jdbc:hive2://192.168.100.145:10000/frankdb
#访问节点3的HiverServer2服务地址和端口:
jdbc:hive2://192.168.100.147:10000/frankdb
2)HiveServer2 HA(zookeeper)访问 JDBC URL
格式:
jdbc:hive2://<zookeeper quorum>/<dbName>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=<namespace>
说明:
i)从Hive 0.14开始,Hive使用Zookeeper实现了HiveServer2的HA功能(ZooKeeper Service Discovery)。Client端可以通过指定一个namespace(hive-site.xml中配置的hive.server2.zookeeper.namespace)来连接HiveServer2,而不是指定某一个节点的host和port。
hive-site.xml 配置文件中的相关配置:
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value>hdp01.hadoop.com:2181,hdp02.hadoop.com:2181,hdp03.hadoop.com:2181</value>
<!-- <value>hdp01:2181,hdp02:2181,hdp03:2181</value> -->
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>
ii)
zookeeper quorum 是 hive-site.xml 配置文件中 Zookeeper 的 Quorum 节点列表,以三节点为例格式为:zk_host01:zk_port,zk_host02:zk_port,zk_host03:zk_port
dbName 是Hive数据库,默认为default
serviceDiscoveryMode=zooKeeper 指定模式为zooKeeper
namespace 是ZK中的namespace,即参数 hive.server2.zookeeper.namespace 所定义的值
示例:
jdbc:hive2://hdp01.hadoop.com:2181,hdp02.hadoop.com:2181,hdp03.hadoop.com:2181/frankdb;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
jdbc:hive2://node01:2181,node02:2181,node03:2181/frankdb;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
3)HiveServer2 单点访问 + 带Kerberos认证 JDBC URL
格式:
jdbc:hive2://<hiveserver2_host:hiveserver2_port>/<dbName>;principal=<principalName>[;auth=KERBEROS]
说明:
i)auth=KERBEROS 指定KERBEROS方式,可以不带、通常是通过配置的方式隐式启用的,也可以显式指定auth=KERBEROS
ii)hive 的 principal 在 hive-site.xml 配置文件中获取(JDBC URL中需要将"_HOST"替换成本机的域名):
<property>
<name>hive.server2.authentication.kerberos.principal</name>
<value>frank/_HOST@HADOOP.COM</value>
</property>
示例:
#访问节点1的HiveServer2服务地址和端口:
jdbc:hive2://192.168.100.145:10000/frankdb;principal=frank/hdp01.hadoop.com@HADOOP.COM
#访问节点3的HiverServer2服务地址和端口:
jdbc:hive2://192.168.100.147:10000/frankdb;principal=frank/hdp01.hadoop.com@HADOOP.COM;auth=KERBEROS
4)HiveServer2 HA(zookeeper)访问 + 带Kerberos认证 JDBC URL
格式:
jdbc:hive2://<zookeeper quorum>/<dbName>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=<namespace>[;auth=KERBEROS][;sasl.qop=auth-conf];principal=<principalName>
说明:
i)hive 的 principal 在 hive-site.xml 配置文件中获取(JDBC URL中"_HOST"不能替换、不能写固定节点的域名,因为他会去 zookeeper 上找,可能访问不同节点的 hiveserver2):
<property>
<name>hive.server2.authentication.kerberos.principal</name>
<value>frank/_HOST@HADOOP.COM</value>
</property>
ii)
zookeeper quorum 是 hive-site.xml 配置文件中 Zookeeper 的 Quorum 节点列表,以三节点为例格式为:zk_host01:zk_port,zk_host02:zk_port,zk_host03:zk_port
dbName 是Hive数据库,默认为default
serviceDiscoveryMode=zooKeeper 指定模式为zooKeeper
namespace 是ZK中的namespace,即参数 hive.server2.zookeeper.namespace 所定义的值
auth=KERBEROS 指定KERBEROS方式,可以不带、通常是通过配置的方式隐式启用的,也可以显式指定auth=KERBEROS
sasl.qop=auth-conf 是SASL QoP级别,SASL QoP 可配置的具体值如下(适用于 hadoop.rpc.protection/dfs.data.transfer.protection):
authentication : authentication only;
integrity : integrity check in addition to authentication;
privacy : data encryption in addition to integrity.
分别对应:auth,auth-int 和 auth-conf。
示例:
jdbc:hive2://hdp01.hadoop.com:2181,hdp02.hadoop.com:2181,hdp03.hadoop.com:2181/frankdb;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=frank/_HOST@HADOOP.COM
jdbc:hive2://hdp01.hadoop.com:2181,hdp02.hadoop.com:2181,hdp03.hadoop.com:2181/frankdb;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;auth=KERBEROS;principal=frank/_HOST@HADOOP.COM
jdbc:hive2://hdp01.hadoop.com:2181,hdp02.hadoop.com:2181,hdp03.hadoop.com:2181/frankdb;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;auth=KERBEROS;sasl.qop=auth-conf;principal=frank/_HOST@HADOOP.COM
3.HiverServer2 HA
JDBC Client1 --------> HiveServer2(host1:port1) <-----
^ ^ |
| | |
|host1:port1 | |
| V V
--->
ZooKeeper Hadoop
|--->
| ^ ^
|host3:port3 | |
| | |
V V |
JDBC Client2 -------> HiveServer2(host3:port3) <-------
HiveServer2 HA 高可用:三节点(hdp01, hdp02, hdp03)安装 Hadoop,分别在 hdp01 和 hdp03 两个节点上启用 HiverServer2 实例,并通过 ZooKeeper 完成 HA 配置。
JDBC Client1 和 Clien2 以 jdbc:hive2://hdp01.hadoop.com:2181,hdp02.hadoop.com:2181,hdp03.hadoop.com:2181/frankdb;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=frank/_HOST@HADOOP.COM
访问 ZooKeeper 时,会分别路由到 host1 和 host3 上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。