gpt4 book ai didi

java - 在 Hbase 上运行 MapReduce 时出现 KERBEROS 错误

转载 作者:行者123 更新时间:2023-11-30 07:58:39 25 4
gpt4 key购买 nike

我是 KERBEROS 的新手,并收到以下错误。

Exception in thread "main" java.io.IOException: Can't get Master Kerberos principal for use as renewer
at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:116)
at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:100)
at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodes(TokenCache.java:80)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:370)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1295)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1292)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1292)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1313)
at SampleUploader.main(SampleUploader.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

当我运行以下代码(可在 GitHub 中找到:https://github.com/ddraj/hbase-trunk-mttr/blob/master/hbase-examples/src/main/java/org/apache/hadoop/hbase/mapreduce/SampleUploader.java)时,会发生此错误

conf.set("hadoop.security.authentication", "kerberos");
conf.set("dfs.namenode.kerberos.principal","hdfs/_HOST@REALM.COM");
UserGroupInformation.setConfiguration(conf);
System.out.println(UserGroupInformation.getLoginUser()+"***********");

我使用的是CDH5.2.6

我能够像这样获取登录用户:

System.out.println(UserGroupInformation.getLoginUser()+"***********");

最佳答案

此错误通常意味着其含义(即找不到用于某些操作的特定 Kerberos 主体)。然而,解决这个错误的细节却很糟糕。通常可以归结为以下三件事:

  1. 您正在使用 .jaas 文件,但其中的原则是错误的,或者您在应该使用 .jaas 文件时却没有使用。确保您在 java 调用中使用“-Djava.security.auth.login.config=[.jaas file]”。
  2. 某些 Hadoop 相关配置文件中已定义的主体是错误的或 Kerberos 未知。这可能是因为主体的任何部分都是错误的(验证用户、主机和领域),或者因为没有人拥有当前真实用户的 Kerberos 票证授予票证(使用 kinit 或在您的应用程序中执行此操作。)<
  3. 您需要在一些与 Hadoop 相关的配置文件中定义属性。您可能还不知道该属性,而且 - 这是可怕的部分 - 也有可能您甚至不知道配置文件本身。 例如,在 HBase 中导出快照0.98.x 需要一个yarn-site.xml 文件;那里需要定义两个原则。我不知道为什么,因为 HBase 引用中没有提到 yarn ,所以我没有使用 yarn ,也没有安装 yarn 。

不幸的是,#3 花费了我至少一半的时间——浪费了——试图让 HBase 与 Kerberos 一起运行。我已经不再计算实际的小时数了,因为这让我感到沮丧。希望这篇文章能帮助其他人不要浪费时间。

关于java - 在 Hbase 上运行 MapReduce 时出现 KERBEROS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com