当前位置: 首页 > 知识库问答 >
问题:

在Hbase上运行mapreduce时发生KERBEROS错误

荆钱明
2023-03-14

我是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()+"***********");

共有1个答案

吉嘉珍
2023-03-14

这个错误通常意味着它所说的意思(它找不到特定的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。

不幸的是,我在努力使HBase与Kerberos兼容时,至少浪费了一半的时间,而#3却要为此负责。我已经停止计算实际的小时数,因为它只是让我感到沮丧。希望这篇文章能帮助其他人不要浪费时间。

 类似资料:
  • 导出HADOOP_CLASSPATH=“

  • 我写作业MapReduce,输入是HBase中的一个表。 作业运行时,had错误: 你能帮我修一下吗。

  • 我不知道该怎么办!感谢任何帮助! 另外,我是否应该在安装HBase之前配置Zookeeper?我的教程没有这么说。

  • 嘿,伙计们,我正在跟踪http://www.tutorialspoint.com/hadoop/hadoop_mapreduce.htm。使用这个运行程序后 我收到以下错误: 2004年9月16日20:32:14警告用户。NativeCodeLoader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类 2004年9月16日20:32:15信息配置。弃用:会话。id已弃用

  • 我是拉威尔的新手,所以你可能不得不忍受我,但我似乎有个小问题。现在,首先,我创建了一个基本模板,并使用phpMyAdmin和Wamp成功地运行了它,它运行得很好。我还得到了一个老项目,我被要求看一看,但由于某种原因,我无法让它运行。 这就是我正在使用的过程: 1:打开cmd更改到正确的目录 2:安装编写器 3:将目录更改为项目目录 4:运行 错误: PHP警告:需要(C:\wamp64\www\p

  • 贡献者:BridgetLai Apache MapReduce 是 Apache Hadoop 提供的软件框架,用来进行大规模数据分析.MapReduce 已超出本文档范围,可通过如下文档学习https://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTuto