通过HSFabric的KeyTab认证实现查询HetuEngine SQL任务
适用场景
- 支持客户端跨网段访问。
- 只需要确保业务侧和HetuEngine服务端HSFabric所在业务节点网络互通,且对外开放HSFabric固定的IP和端口。
- 适用于双平面的网络场景。
功能简介
通过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。 |