Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Kerberized环境中验证Impala JDBC连接_Java_Hadoop_Jdbc_Impala_Cloudera Cdh - Fatal编程技术网

Java 在Kerberized环境中验证Impala JDBC连接

Java 在Kerberized环境中验证Impala JDBC连接,java,hadoop,jdbc,impala,cloudera-cdh,Java,Hadoop,Jdbc,Impala,Cloudera Cdh,当尝试在Oozie(CDH6.3.1)中启动Java操作时,我得到了一个GSS initiate失败的消息。所讨论的代码非常直截了当: String impalaUrl=“jdbc:impala://pxyserver.global.ad:21050/default;SSL=1;AuthMech=1;KrbRealm=GLOBAL.AD;KrbHostFQDN=pxyserver.GLOBAL.AD;KrbServiceName=Impala;sslTrustStore=/opt/clouder

当尝试在Oozie(CDH6.3.1)中启动Java操作时,我得到了一个
GSS initiate失败的消息。所讨论的代码非常直截了当:

String impalaUrl=“jdbc:impala://pxyserver.global.ad:21050/default;SSL=1;AuthMech=1;KrbRealm=GLOBAL.AD;KrbHostFQDN=pxyserver.GLOBAL.AD;KrbServiceName=Impala;sslTrustStore=/opt/cloudera/security/jks/truststore.jks;trustStorePassword=password”;
Properties=新属性();
impalaProperties.put(“用户”、“账户”);
impalaProperties.put(“密码”、“svcpassword”);
put(“Driver”,“com.cloudera.impala.jdbc41.Driver”);
试一试{
setConnection(DriverManager.getConnection(impalaUrl,impalaProperties));
}捕获(SQLE异常){
e、 printStackTrace();
}
运行此命令将提供以下堆栈跟踪:

java.sql.SQLException: [Cloudera][ImpalaJDBCDriver](500164) Error initialized or created transport for authentication: [Cloudera][ImpalaJDBCDriver](500169) Unable to connect to server: GSS initiate failed.
    at com.cloudera.impala.hivecommon.api.HiveServer2ClientFactory.createTransport(Unknown Source)
    at com.cloudera.impala.hivecommon.api.ServiceDiscoveryFactory.createClient(Unknown Source)
    at com.cloudera.impala.hivecommon.core.HiveJDBCCommonConnection.establishConnection(Unknown Source)
    at com.cloudera.impala.impala.core.ImpalaJDBCDSIConnection.establishConnection(Unknown Source)
    at com.cloudera.impala.jdbc.core.LoginTimeoutConnection.connect(Unknown Source)
    at com.cloudera.impala.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source)
    at com.cloudera.impala.jdbc.common.AbstractDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)

我可以通过使用键选项卡将其打结来解决此问题。但是,在我们的生产环境中,Oozie在许多工作节点中的一个上运行此操作,并且这些节点没有有效的kerberos票证。我的选择是什么?如果可能的话,我不希望每天在40个工作节点中的每个节点上都使用kinit,这里是否缺少一个参数


谢谢

您可以在Oozie工作流中通过shell操作
kinit
,例如,该操作也将启动您的Java应用程序。与First重复,您显然不了解Kerberos的工作原理-忽略用户/密码参数,或者JDBC驱动程序可以访问现有的“票证授予票证”(身份证明),然后获取“服务票证”来获得访问权;或者它触发JAAS规则来首先创建TGT。理想情况下,
hive2
Oozie操作将与Impala一起工作,因为它使用与Hiveserver2完全相同的有线协议——但遗憾的是,Impala不支持Hadoop“委派令牌”,以便更容易在分布式系统上使用Kerberos(Kerberos是点对点的,因为在20世纪80年代这已经足够了)推荐阅读:>>>