更新时间:2024-12-09 GMT+08:00
分享

通过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所示:

表1 参数及参数说明

参数名称

参数说明

url

jdbc:XXX://zkNode1_IP:zkNode1_Port,zkNode2_IP:zkNode2_Port,zkNode3_IP:zkNode3_Port/catalog/schema?serviceDiscoveryMode=zooKeeper&zooKeeperNamespace=hsbroker

说明:
  • XXX:驱动名,请以实际样例代码中的内容为准。
  • catalogschema分别是JDBC客户端要连接的catalog和schema名称。
  • zkNode_IP:zkNode_Port是ZooKeeper的URL,多个URL以逗号隔开。例如:“192.168.81.37:2181,192.168.195.232:2181,192.168.169.84:2181”。

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。

相关文档