如何使用Kerberos将spark应用程序连接到安全HBase

时间:2016-05-04 10:33:35

标签: authentication apache-spark hbase kerberos

我正在尝试将Spark应用程序连接到启用了Kerberos的HBase。 Spark版本为1.5.0,CDH 5.5.2,并以纱线群集模式执行。

初始化HbaseContext时,会抛出此错误:

  

错误ipc.AbstractRpcClient:SASL身份验证失败。最可能的原因是凭据丢失或无效。考虑一下' kinit'。   javax.security.sasl.SaslException:GSS启动失败[由GSSException引起:未提供有效凭据(机制级别:无法找到任何Kerberos tgt)]

我尝试在代码中进行身份验证,添加:

UserGroupInformation.setConfiguration(config)
UserGroupInformation.loginUserFromKeytab(principalName, keytabFilename)

我在spark-submit中使用--files选项分发keytab文件。 现在,错误是:

  

java.io.IOException:keytab krb5.usercomp.keytab中usercomp@COMPANY.CORP的登录失败:javax.security.auth.login.LoginException:无法从用户获取密码   ...

     

引起:javax.security.auth.login.LoginException:无法从用户获取密码   在com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:856)

这是从Spark应用程序连接到Kerberized HBase的方法吗?

3 个答案:

答案 0 :(得分:1)

如果您遗漏了像hadoop.security.authentication

这样的内容,请参阅下面的示例配置
val conf= HBaseConfiguration.create()
conf.set("hbase.zookeeper.quorum", "list of ip's")
conf.set("hbase.zookeeper"+ ".property.clientPort","2181");
conf.set("hbase.master", "masterIP:60000");
conf.set("hadoop.security.authentication", "kerberos");

答案 1 :(得分:0)

实际上尝试将hbase-site.xml直接放在边缘节点的SPARK_CONF目录中(应该是/ etc / spark / conf或/ etc / spark2 / conf)。

答案 2 :(得分:0)

您可以使用loginUserFromKeytabAndReturnUGIuig.doAs

或者您可以将hbase类路径放到SPARK_DIST_CLASSPATH