我是新来的 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条答案
按热度按时间ny6fqffe1#
这个错误通常意味着它所说的意思(它找不到用于某些操作的特定kerberos主体)。然而,解决这个错误的细节是可怕的。通常可以归结为以下三点:
您正在使用一个.jaas文件,而其中的主体是错误的,或者您没有在应该使用的时候使用.jaas文件。确保在java调用中使用“-djava.security.auth.login.config=[.jaas file]”。
某些hadoop相关配置文件中已定义的主体错误或kerberos未知。这可能是因为主体的任何部分都是错误的(验证用户、主机和领域),或者因为没有人拥有为当前真实用户授予kerberos票证的票证(使用kinit或在应用程序中执行此操作)
您需要在一些hadoop相关的配置文件中定义一个属性。有可能你还不知道这个属性,还有——糟糕的是——也有可能你甚至不知道配置文件本身。例如,在hbase 0.98.x中导出快照需要一个yarn-site.xml文件;这里需要定义两个主体。我不知道为什么,因为在hbase参考中没有提到yarn,所以我没有使用yarn,也没有安装yarn。
不幸的是,#3造成了我在尝试让hbase与kerberos一起运行时浪费的至少一半时间。我已经停止计算实际的小时数了,因为这让我很沮丧。希望这篇文章能帮助其他人不要浪费时间。