【问题标题】:MapReduce job can't talk with Hbase on a Kerberos enabled CDH clusterMapReduce 作业无法与启用 Kerberos 的 CDH 集群上的 Hbase 通信
【发布时间】:2017-01-06 04:30:20
【问题描述】:

我正在编写一个 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 via 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);

但问题仍然存在。有人知道吗?

【问题讨论】:

    标签: hadoop mapreduce hbase kerberos cloudera-cdh


    【解决方案1】:

    我终于找到了解决方案。在 CDH 上配置 Hue-Ozzie 作业以与安全的 Hbase 对话很容易。

    你需要做的就是:

    • 在设置工作流时启用 Hbase 凭据
    • hbase-site.xml 添加到job.xml 路径

    【讨论】:

      【解决方案2】:

      虽然 Oozie 文档一团糟,但它确实涵盖了 HBase Kerberos 身份验证:
      https://oozie.apache.org/docs/4.2.0/DG_ActionAuthentication.html

      ...某些操作需要与外部服务(例如 HCatalog、 HBase 区域服务器、Hive 服务器 2),在这些情况下,操作 需要在 Oozie 中进行一些额外配置来进行身份验证

      不幸的是,该页面在那之后没有可操作的信息。你必须恢复到旧的谷歌搜索才能找到一些有用的帖子,比如这个: 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 的限制太多。


      否则,您可以在您的 Java 代码中使用 显式 Kerberos 身份验证,使用带有密钥表文件的 Hadoop UserGroupInformation.loginUserFromKeytab()(必须通过您的 Oozie 操作中的标准 <file> 指令下载)

      【讨论】:

      • 最后,我在 Hue CDH 上找到了一些设置的解决方案。 Anw,感谢 Simson 的回复!
      猜你喜欢
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      相关资源
      最近更新 更多