通过HSFabric的KeyTab认证实现查询HetuEngine SQL任务
功能简介
通过KeyTab文件认证方式连接到HetuEngine,组装对应的SQL发送到HetuEngine执行,完成对Hive数据源的增删改查操作。
public class JDBCExampleZk { private static Properties properties = new Properties(); private final static String PATH_TO_JAAS_ZK_CONF = JDBCExample.class.getClassLoader() .getResource("jaas-zk.conf") .getPath(); private final static String PATH_TO_KRB5_CONF = JDBCExample.class.getClassLoader() .getResource("krb5.conf") .getPath(); private final static String PATH_TO_USER_KEYTAB = JDBCExample.class.getClassLoader() .getResource("user.keytab") .getPath(); private final static String PATH_TO_HETUSERVER_JKS = JDBCExamplePasswordZK.class.getClassLoader() .getResource("hetuserver.jks") .getPath(); private static void init() throws ClassNotFoundException { System.setProperty("user.timezone", "UTC"); System.setProperty("java.security.auth.login.config", PATH_TO_JAAS_ZK_CONF); System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); properties.setProperty("user", "hivetest"); properties.setProperty("SSL", "true"); properties.setProperty("KerberosConfigPath", PATH_TO_KRB5_CONF); properties.setProperty("KerberosPrincipal", "hivetest"); properties.setProperty("KerberosKeytabPath", PATH_TO_USER_KEYTAB); properties.setProperty("SSLTrustStorePath", PATH_TO_HETUSERVER_JKS); properties.setProperty("KerberosRemoteServiceName", "HTTP"); properties.setProperty("tenant", "default"); properties.setProperty("deploymentMode", "on_yarn"); properties.setProperty("ZooKeeperAuthType", "kerberos"); properties.setProperty("ZooKeeperSaslClientConfig", "Client"); Class.forName("io.XXXsql.jdbc.XXXDriver"); } /** * Program entry * * @param args no need program parameter */ public static void main(String[] args) { Connection connection = null; ResultSet result = null; PreparedStatement statement = null; String url = "jdbc:XXX://192.168.1.130:2181,192.168.1.131:2181,192.168.1.132:2181/hive/default?" + "serviceDiscoveryMode=zooKeeper&zooKeeperNamespace=hsbroker"; try { init(); String sql = "show tables"; connection = DriverManager.getConnection(url, properties); statement = connection.prepareStatement(sql.trim()); result = statement.executeQuery(); ResultSetMetaData resultMetaData = result.getMetaData(); Integer colNum = resultMetaData.getColumnCount(); for (int j = 1; j <= colNum; j++) { System.out.print(resultMetaData.getColumnLabel(j) + "\t"); } System.out.println(); while (result.next()) { for (int j = 1; j <= colNum; j++) { System.out.print(result.getString(j) + "\t"); } System.out.println(); } } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } finally { if (result != null) { try { result.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
上述代码中各参数说明如表1所示:
参数名称 |
参数说明 |
---|---|
url |
jdbc:XXX://zkNode1_IP:zkNode1_Port,zkNode2_IP:zkNode2_Port,zkNode3_IP:zkNode3_Port/catalog/schema?serviceDiscoveryMode=zooKeeper&zooKeeperNamespace=hsbroker
说明:
|
user |
访问HetuEngine的用户名,即在集群中创建的“人机”用户的用户名。 |
socksProxy |
SOCKS代理服务器,如“localhost:1080”。 |
httpProxy |
HTTP代理服务器地址,如“localhost:8888”。 |
applicationNamePrefix |
要附加到任何指定的ApplicationName客户端信息属性的前缀,该属性用于设置HetuEngine查询的源名称,如果既未设置此属性也未设置ApplicationName,则查询的源将为HetuEngine JDBC。 |
accessToken |
基于令牌的身份验证令牌。 |
SSL |
是否使用HTTPS连接,默认为“false”。 |
SSLKeyStorePath |
Java Keystore文件路径。 |
SSLKeyStorePassword |
Java KeyStore密码。 |
SSLTrustStorePath |
Java TrustStore文件路径。 |
SSLTrustStorePassword |
Java TrustStore密码。 |
KerberosRemoteServiceName |
Kerberos服务名称,固定为“HTTP”。 |
KerberosPrincipal |
KerberosKeytabPath指定的keytab对应的用户名。 |
KerberosUseCanonicalHostname |
是否使用规范化主机名,默认为“false”。 |
KerberosConfigPath |
访问数据源用户的krb5配置文件,参考配置HetuEngine应用安全认证获取。 |
KerberosKeytabPath |
访问数据源用户的keytab配置文件,参考配置HetuEngine应用安全认证获取。 |
KerberosCredentialCachePath |
Kerberos credential缓存路径。 |
extraCredentials |
用于连接外部的额外凭据。extraCredentials是键值对的列表,如foo:bar;abc:xyz将创建凭据abc = xyz和foo = bar。 |
java.security.auth.login.config |
“jaas-zk.conf”配置文件的路径,用于访问安全模式下的ZooKeeper。 |
java.security.krb5.conf |
krb5配置文件,参考配置HetuEngine应用安全认证获取。 |
ZooKeeperAuthType |
ZooKeeper的认证方式,安全模式下取值为“kerberos”。 |
ZooKeeperSaslClientConfig |
“jaas-zk.conf”配置文件中的条目名称。 |
tenant |
用户所属的租户。 |
deploymentMode |
只支持on_yarn。 |