Hadoop MapReduce作业可以';t在启用Kerberos的CDH群集上与Hbase对话
我正在编写一个MapReduce应用程序来访问启用Kerberos的CDH集群上的Hbase数据。我的CDH版本是5.9.0,运行在3个节点上,Kerberos版本是1.10.1。现在,我面临一个问题,希望有人能帮助我 我的代码:Hadoop MapReduce作业可以';t在启用Kerberos的CDH群集上与Hbase对话,hadoop,mapreduce,hbase,kerberos,cloudera-cdh,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.loginUserFro
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工作流时,会出现以下问题:
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);
但问题仍然存在。有人知道吗 尽管Oozie文档乱七八糟,但它确实涵盖了HBase Kerberos身份验证:
…某些行动需要与外部服务部门(如HCatalog、, HBase区域服务器、配置单元服务器2)以及在这些情况下的操作 需要在Oozie中进行一些额外配置才能进行身份验证 不幸的是,在那之后,该页面没有可操作的信息。你必须恢复到一个很好的老谷歌搜索,以找到一些有用的帖子,例如: 至于色调UI如何支持该功能。。。老实说,在2014年的几天里,我试用了这个糟糕的软件,然后切换到文本编辑器直接制作XML脚本。色调有太多的限制
否则,您可以在Java代码中使用Hadoop
UserGroupInformation.loginUserFromKeytab()
和一个keytab文件(必须通过Oozie操作中的标准
指令下载),使用显式Kerberos身份验证。在CDH上配置Hue Ozzie作业以与安全的Hbase对话很容易
您需要做的只是:
- 设置工作流时启用Hbase凭据
- 将
添加到hbase site.xml
路径job.xml