Hadoop配置Kerberos互信
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop配置Kerberos互信相关的知识,希望对你有一定的参考价值。
参考技术A 当Hadoop集群开启Kerberos后,跨集群访问需要配置Kerberos cross-realm(跨域访问)。Kerberos跨域访问原理查看: Kerberos跨域原理
Hadoop集群配置Kerberos互信查看: hadoop集群配置Kerberos互信 。在我们的实验中,参照该博客中的步骤不能实现Realm A(A.COM)中的用户访问Realm B(B.COM)中Server。例如在Realm A中使用test@A.COM访问hadoop@B.COM Server,在Realm A的kdc日志中观察到无法找到Hadoop/hostname1@B.COM Server,请求并未正常转发到Realm B中。通过排查,为缺少对服务hadoop/hostname1的映射,需要在kerb5.conf的domain_realm增加对hadoop/hostname1的映射。
至此,可以使用Realm A中principal访问集群B的hdfs服务。
spring - 使用 ugi 覆盖当前的 hadoop kerberos 用户
【中文标题】spring - 使用 ugi 覆盖当前的 hadoop kerberos 用户【英文标题】:spring - override current hadoop kerberos user using ugi 【发布时间】:2013-11-19 23:11:14 【问题描述】:我的应用程序在 webserver 上运行,但 weberserver 用户没有 kerberos 帐户 .. 所以在启动 spring hadoop 配置时它会失败。我确实有另一个带有 keytab 文件的 kerberos 用户,我可以使用该文件登录,但在我有机会这样做之前,spring 已经尝试使用当前 linux 用户设置配置并失败。这就是我使用其他用户的方式
UserGroupInformation.loginUserFromKeytab(userId, userKeyTabFilePath);
目前我从 WebApplicationInitializer.onStartup 方法调用它,但它仍然无法为 spring hadoop 东西(可能是 FileSystem)设置配置,因为它不使用我在这里登录的用户。如何覆盖 spring 设置 hadoop 配置过程以将此用户提供为登录用户而不是当前 linux 用户。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:用 kerberos 配置 hadoop 真的很痛苦。解决此问题的最简单方法是使用 jaas.conf 运行您的应用程序,该 jaas.conf 除了使用 UGI 外,还具有必要的凭据和密钥表。
这是一个示例配置:
Client
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/tomcat/<keytab>"
storeKey=true
useTicketCache=false
principal="<user>@<host>";
;
通过
-Djava.security.auth.login.config=<path to jaas.conf>
vm 参数到您的 Web 应用程序容器。
我假设你的 spring 配置已经从你的 hadoop 加载了 *-site.xml 文件。这也是必要的。
【讨论】:
以上是关于Hadoop配置Kerberos互信的主要内容,如果未能解决你的问题,请参考以下文章
windows kerberos客户端执行kinit报错:kinit: Cannot find KDC for realm
关于hadoop登陆kerberos时设置环境变量问题的思考