通过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。 |