我有一个 Web 应用程序,它可以接收来自不同用户的从 Linux 命令行运行的几个其他应用程序的请求。对于每个请求,我都必须从 hdfs 读取数据来调用应用程序文件夹,只有调用应用程序的 Linux 用户才能访问该文件夹。有没有一种方法可以设置配置,以便可以在运行时覆盖它以模拟调用者应用程序用户进行 hadoop kerberos 身份验证。 我使用下面的代码创建了一个 UserGroupInformation 以从 kerberos keytab 登录。此 UGI 将充当真实用户并将其传递给 UserGroupInformation 类以创建代理用户,如下所示。
UserGroupInformation realUgi = UserGroupInformation.loginUserFromKeytabAndReturnUGI("KerberosUser ", "pathToKeytabFile") ;
UserGroupInformation ugi = UserGroupInformation.createProxyUser("NewProxyUser", realUgi );
ugi.doAs(new PrivilegedExceptionAction() {
public Void run() throws Exception {
Configuration jobconf = new Configuration();
jobconf.set("fs.default.name", "hdfs://server:hdfsport");
jobconf.set("hadoop.job.ugi", "NewroxyUser");
jobconf.set("mapred.job.tracker", "server:jobtracker port");
String[] args = new String[] { "data/input", "data/output" };
ToolRunner.run(jobconf, WordCount.class.newInstance(), args);
return null;
} });
在本例中,我使用 Kerberos 安全 hadoop 实现,并且收到下面给出的错误。
ERROR UserGroupInformation:1125 - PriviledgedActionException as:NewProxyUser
via KerberosUser cause:org.apache.hadoop.ipc.RemoteException: User: KerberosUser is not allowed to impersonate NewProxyUser
Caused by: org.apache.hadoop.ipc.RemoteException: User: KerberosUser is not allowed to impersonate NewProxyUser
您能否建议我使用 Kerberos 用户模拟代理用户的任何其他方法。
提前致谢
最佳答案
我认为您需要设置安全模拟。请参阅下面的链接了解更多信息 http://hadoop.apache.org/docs/r1.2.1/Secure_Impersonation.html
关于hadoop - 在 Kerberos 安全 Hadoop 集群中运行时模拟用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20430390/