MapReduce作业无法在启用Kerberos的CDH群集上与Hbase通信

时间:2017-01-06 04:30:21

标签: hadoop mapreduce hbase kerberos cloudera-cdh

我正在编写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 -jarhadoop -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);

但问题仍然存在。有人有任何想法吗?

2 个答案:

答案 0 :(得分:1)

最后我找到了解决方案。在CDH上配置Hue-Ozzie作业很容易与安全的Hbase通信。

您需要做的就是:

  • 在设置工作流程时启用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行动)