我正在编写一个mapreduce应用程序来访问启用kerberos的cdh集群上的hbase数据。我的cdh版本是5.9.0,运行在3个节点上,kerberos版本是1.10.1。现在,我面临一个问题,希望有人能帮助我。
我的代码:
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab("jj@example.com", "jj.keytab");
HTable table = new HTable(conf, "myTable");
Put p = new Put(Bytes.toBytes("myLittleRow"));
p.add(Bytes.toBytes("myColumnFamily"), Bytes.toBytes("someQualifier"),
Bytes.toBytes("Some Value"));
table.put(p);
上面的代码帮助我在本地模式下成功运行 java -jar
或者 hadoop -jar
. 但是,当我尝试通过hue运行oozie工作流时,会出现以下问题:
FATAL [main] org.apache.hadoop.hbase.ipc.RpcClientImpl: SASL authentication failed. The most likely cause is missing or invalid credentials. Consider 'kinit'. javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
Caused by: GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)
因此,我尝试使用init凭据获取有效令牌,以便通过
TableMapReduceUtil.initCredentialsForCluster(job,conf);
但问题仍然存在。有人知道吗?
2条答案
按热度按时间3xiyfsfu1#
最后我找到了解决办法。在cdh上配置一个hue-ozzie作业以与安全的hbase对话是很容易的。
您需要做的就是:
设置工作流时启用hbase凭据
添加
hbase-site.xml
到job.xml
路径lfapxunr2#
尽管oozie文档乱七八糟,但它确实涵盖了hbase kerberos身份验证:
https://oozie.apache.org/docs/4.2.0/dg_actionauthentication.html
…有些操作需要与外部服务(例如hcatalog、hbase region server、hive server 2)进行通信,在这些情况下,这些操作需要在oozie中进行一些额外的配置以进行身份验证。
不幸的是,该网页没有可操作的信息之后。你必须回到一个好的老谷歌搜索找到一些有用的职位,像这样一个:https://community.hortonworks.com/content/supportkb/49407/how-to-set-up-oozie-to-connect-to-secured-hbase-cl-1.html
至于hue用户界面如何支持这个功能。。。老实说,在2014年的几天里,我试用了这一糟糕的软件,然后我改用文本编辑器直接制作xml脚本。色调有太多限制。
否则,可以使用hadoop在java代码中使用显式kerberos身份验证
UserGroupInformation.loginUserFromKeytab()
带有keytab文件(必须通过标准<file>
指导你的oozie行动)。