我正在编写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
成功本地模式。但是,当我尝试使用 Oozie Workflow通过Hue 运行时,会发生以下问题:
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);
但问题仍然存在。有人有任何想法吗?
答案 0 :(得分:1)
最后我找到了解决方案。在CDH上配置Hue-Ozzie作业很容易与安全的Hbase通信。
您需要做的就是:
hbase-site.xml
添加到job.xml
路径答案 1 :(得分:0)
虽然Oozie文档是一个丑陋的混乱,但它 涵盖了HBase Kerberos身份验证:
https://oozie.apache.org/docs/4.2.0/DG_ActionAuthentication.html
......某些行动需要与外部服务部门联系(例如HCatalog, HBase Region Server,Hive Server 2)以及这些情况下的操作 在Oozie中需要一些额外配置来进行身份验证。
不幸的是,该页面之后没有可操作的信息。您必须恢复到旧的Google搜索才能找到一些有用的帖子,例如: https://community.hortonworks.com/content/supportkb/49407/how-to-set-up-oozie-to-connect-to-secured-hbase-cl-1.html
关于Hue UI如何支持该功能......老实说,我在2014年的几天内尝试了这个糟糕的软件,然后我切换到文本编辑器直接制作XML脚本。 Hue有太多限制。
<小时/> 否则,您可以使用Hadoop
UserGroupInformation.loginUserFromKeytab()
和密钥表文件(必须通过标准<file>
指令下载),在Java代码中使用显式Kerberos身份验证。你的Oozie行动)。