gpt4 book ai didi

hadoop - 以不同用户身份运行 map reduce 作业

转载 作者:可可西里 更新时间:2023-11-01 14:22:09 25 4
gpt4 key购买 nike

我有一个与 Hadoop 交互的 Web 应用程序。 (Cloudera cdh3u6) 特定的用户操作应该在集群中启动一个新的 Map Reduce 作业。

该集群不是安全集群,但它使用简单的组身份验证 - 因此如果我以自己的身份通过 ssh 访问它,我可以从命令行启动 MR 作业。

在 Web 应用程序中,我使用 ToolRunner 来运行我的作业:

MyMapReduceWrapperClass mr = new MyMapReduceWrapperClass();
ToolRunner.run(mr, null);


// inside the run implementation of my wrapper class :
Job job = new Job(conf, "job title");
//set up stuff removed
job.submit();

当前,此作业是以启动 Web 应用程序服务器 (Tomcat) 进程的用户身份提交的,该用户是此 Web 服务器上的特殊本地帐户,无权将作业发送到集群。

理想情况下,我希望能够从用户那里获得某种身份并将其传递,这样当不同的用户与网络应用程序/服务交互时,我们可以看到谁在调用什么工作。跳过如何实际协调这些凭证服务的问题,我什至不清楚它会去哪里。

我看到在 Job 上我有一个 getCredentials() 选项,但是通过阅读那里的 token /Kerberos 内容,我的印象是这是为了安全集群(我认为我们不是)——更不用说我认为我的网络服务器没有安装 Kerberos。但这可以修复。但这听起来也像是预期的用例是添加 map reduce 作业在运行以访问其他服务时可能需要的 secret ——而不是作为其他人运行该作业。

我还看到在(较旧的?)JobConf 类上我有能力 setUser(String name) 这看起来很有希望 - 尽管我不知道它需要密码或其他东西的地方 - 但我找不到关于该功能的太多信息或文档。我尝试了一下,没有任何影响——作业仍然以 Tomcat 用户身份提交。

还有其他途径可以探索或研究吗?我没有谷歌的关键词。我宁愿没有选项“只给你的 tomcat 用户在集群上的权限”——我不管理那个 Assets ,我不希望那个请求飞起来。然而,如果这真的是我唯一的选择,我想了解为什么会这样,这样我就可以根据正确的信息来论证这种需要。

最佳答案

您可以像这样使用 UserGroupInformation 类:

UserGroupInformation ugi = UserGroupInformation.createRemoteUser(username);
ugi.doAs(new PrivilegedExceptionAction<MyMapReduceWrapperClass>() {
public Object run() throws Exception {
MyMapReduceWrapperClass mr = new MyMapReduceWrapperClass();
ToolRunner.run(mr, null);
return mr;
}
});

关于hadoop - 以不同用户身份运行 map reduce 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16108522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com