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互信的主要内容,如果未能解决你的问题,请参考以下文章

Spark提交任务,两个集群kerberos互信

windows kerberos客户端执行kinit报错:kinit: Cannot find KDC for realm

关于hadoop登陆kerberos时设置环境变量问题的思考

kerberos的简单使用

spring - 使用 ugi 覆盖当前的 hadoop kerberos 用户

Hadoop 发行版本 Hortonworks 安装详解 开启Kerberos集群安全验证