我成功设置了一个 HDP 2.2 集群(1 个 NM、3 个 DN 和 1 个客户端)。在客户端中创建了用于访问 HDP 集群的用户帐户,并检查这些用户是否可以通过 SSH 提交作业到客户端节点并运行示例作业。
下一步,我启用了 Kerberos 身份验证并创建了与客户端用户相对应的用户主体。一切进展顺利。然后我以用户身份通过 SSH 连接到客户端 PC,生成 Kerberos 票证 kinit,然后我尝试运行示例作业,但作业提交失败并显示:user <user name> not found
消息。
为了在安全 HDP 集群中以用户身份运行作业,我是否必须在集群中的所有节点上创建一个用户?
答案1
简而言之:
是的,当使用 Kerberos 运行 Hadoop 时,经过身份验证的用户必须存在于运行 TaskTracker(MRv1)或 YARN 节点管理器的每个节点上的密码文件(或等效用户目录,如 LDAP)中。
对于 MRv1,TaskTracker 在每个任务启动之前启动一个名为 task-controller 的程序。task-controller 是一个 setuid root 工具,允许 mapred 用户更改任务的运行时用户。可以将其视为 TaskTracker 执行的操作的等价物
sudo -u youruser /usr/bin/java yourtask
如果在 passwd 文件中找不到该用户,则任务控制器无法完成到该用户的切换,从而导致失败。
YARN具有类似的机制。
在没有安全集群的情况下,TaskTracker 不会使用此功能。相反,任务实际上在每个节点上以 mapred 用户身份运行,但 JobTracker 将其报告为提交用户。
此时您的选择是:
- 在每个将启动任务的节点上,通过类似 adduser 的操作将用户放入 /etc/passwd (和 /etc/shadow)中。
- 或者配置每个节点通过 LDAP 服务器执行密码映射查找,该服务器通过LDAP posixAccount 标准。
您没有提到您正在使用哪个发行版,因此很难向您提供更多信息。