我正在尝试将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的方法吗?
答案 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)
您可以使用loginUserFromKeytabAndReturnUGI
和uig.doAs
或者您可以将hbase类路径放到SPARK_DIST_CLASSPATH
。