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

vawmfj5a  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(535)

我有一个与hadoop交互的web应用程序(cloudera cdh3u6)特定的用户操作应该在集群中启动一个新的map reduce作业。
该集群不是一个安全的集群,但它使用简单的组身份验证—因此,如果我以ssh身份访问它,我可以从命令行启动mr jobs。
在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服务器上的一个特殊本地帐户,没有向集群发送作业的权限。
理想情况下,我希望能够从用户那里获得某种身份并将其传递出去,这样当不同的用户与web应用/服务交互时,我们就可以看到谁在调用什么作业。跳过如何实际协调这些凭证服务的问题,我甚至不清楚它将走向何方。
我在电视上看到的 Job 我有一个 getCredentials() 选项,但通过阅读其中的token/kerberos内容,我的印象是这是针对安全集群的(我认为我们不是)-更不用说我认为我的web服务器没有安装kerberos。但这是可以解决的。但听起来,预期的用例是添加map reduce作业在运行以访问其他服务时可能需要的秘密,而不是作为其他人运行该作业。
我也看到了(老?) JobConf 我有能力 setUser(String name) 这看起来很有希望——尽管我不知道在哪里需要密码什么的——但是我找不到关于这个函数的很多信息或文档。我试过了,没有任何影响-作业仍然以tomcat用户的身份提交。
还有其他途径可以探索或研究吗?我没有谷歌关键词了。我不希望有“只给你的tomcat用户集群上的权限”的选项——我不管理这个资产,我也不希望这个请求会飞起来。然而,如果这是我唯一的选择,我想了解为什么会这样,这样我就可以论证需要,拥有正确的信息。

f87krz0w

f87krz0w1#

你可以用 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;
    }
});

相关问题