Kerberized Hadoop Hive直线访问问题



我试图通过直线方式让hiveserver2与支持kerberos的HDP 2.3集群一起工作。我在amazon ec2上。

一旦我得到一个可更新的票证,我就可以执行hdfs操作,也可以启动mr jobs.

即使hive cli不是通过hive server 2..

当我尝试通过直线连接…我得到一个错误周围没有找到…当我在启动直线命令

之前拥有它时

我是作为我自己的用户得到票的。但我使用hive/@为主要..

只是为了测试,我试着使用hive自己的keytab来获得票。

很多文章只建议在上线之前更新token ..没有工作

一篇文章建议为hive metastore使用不同的principal和keytab…但没有成功

Sasl按建议启用

这是/etc/krb5.相依:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = ABC.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 30m
renew_lifetime = 10h
forwardable = true
udp_preference_limit = 1

[realms]
ABC.COM = {
kdc = localhost
admin_server = localhost
default_principal_flags = +renewable
max_renewable_life = 7d 0h 0m 0s
}

[domain_realm]
.abc.com = ABC.COM
abc.com = ABC.COM

TicketDetails:

$ klist -f
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: ec2-user@ABC.COM
Valid starting Expires Service principal
10/17/15 13:40:26 10/17/15 14:10:26 krbtgt/ABC.COM@ABC.COM
renew until 10/17/15 23:04:27, Flags: FRIT
$ date
Sat Oct 17 13:41:02 EDT 2015

直线连接字符串为:

!connect jdbc:hive2://<hive_host>:10000/default;principal=hive/ip-<hive_host>.ec2.internal@ABC.COM

hive server 2的netstat输出:

$ sudo netstat -tunlp | grep 10000
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 11272/java

我也试过将它绑定到私有ip ..相同的结果. .

来自Beeline的整条轨迹

Error: Could not open client transport with JDBC Uri: jdbc:hive2://<hive_host>:10000/default;principal=hive/ip-<hive_host>.ec2.internal@ABC.COM: GSS initiate failed (state=08S01,code=0)
0: jdbc:hive2://<hive_host>:10000/default (closed)> 15/10/17 13:06:14 [main]: ERROR transport.TSaslTransport: SASL negotiation failure
javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:212)
at org.apache.thrift.transport.TSaslClientTransport.handleSaslStartMessage(TSaslClientTransport.java:94)
at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:271)
at org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37)
at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:52)
at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:49)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.hive.thrift.client.TUGIAssumingTransport.open(TUGIAssumingTransport.java:49)
at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:210)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:180)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at org.apache.hive.beeline.DatabaseConnection.connect(DatabaseConnection.java:142)
at org.apache.hive.beeline.DatabaseConnection.getConnection(DatabaseConnection.java:207)

有什么建议吗?

KMS为Ranger KMS

解决方案是,在您的系统上执行mkdir下面的/etc/hadoop/conf/然后在core-site。xml下面加上下面的设置

<configuration>  <property>
      <name>hadoop.security.authentication</name>
      <value>kerberos</value>
    </property> </configuration>

这看起来像一个直线问题?即使我们可以在命令行上指定auth=kerberos,它仍然需要这个(至少对我来说是有效的)!我用的是Ubuntu os

我遇到了一个类似的问题,我通过设置HIVE_CONF_DIR变量指向hive-conf来修复它。

节点,我正在尝试这个不是Hadoop集群的一部分,而是一个临时节点,它没有在/etc中配置。http://blog.godatadriven.com/beeline-client-secured-cluster.html也有我需要的信息

如果kerberos认证失败,会出现"GSS initiate failed"异常。在尝试建立连接之前,请确保您已经更新了身份验证。

使用klist命令检查过期日期和时间。如果身份验证。已过期,使用kinit命令更新授权

在我的例子中,我能够从一台服务器连接HS2,而不能从另一台服务器连接。

因为我发现了直线版本的问题。

有问题的服务器直线版本:

>beeline --version
Beeline version 2.3.9 by Apache Hive```

能够连接HS2服务器直线版本:

>beeline --version
Beeline version 3.1.3000.7.1.7.0-551 by Apache Hive

我改变了直线实用程序路径,并且能够连接HS2

[airflow@hostname bin]$ which beeline
/usr/local/bin/beeline
[airflow@hostname bin]$ cd /bin
[airflow@hostname bin]$ ./beeline -u "jdbc:hive2://$HOSTNAME:10000/default;principal=hive/$HOSTNAME@DEV.DCOE;

最新更新