设置Hadoop的系统用户嵌入到Java Web应用程序客户端设置Hadoop的系统用户嵌入到Jav

2019-06-01 03:19发布

我想从一个Java Web应用程序到远程Hadoop集群提交MapReduce作业,但我不能指定哪些用户的工作应该被提交。 我想配置和使用应适用于所有MapReduce作业系统用户。

目前,我不能指定任何用户无论在什么岗位的Hadoop在客户端系统的当前登录用户的用户名下运行。 这会导致错误与消息

Permission denied: user=alice, access=WRITE, inode="staging":hduser:supergroup:rwxr-xr-x

...其中“爱丽丝”是本地,登录用户在客户机上。

我试过了

  1. 创建的各种组合UserGroupInformation实例(两个代理服务器和普通用户)和
  2. 设置Java系统属性-Duser.name=hduser ,改变USER ENVAR作为一个硬编码System.setProperty("user.name", "hduser")调用。

......无济于事。 关于1)我承认有这些类应该如何使用没有任何线索。 同时请注意,改变了Java系统属性显然不是在Web应用程序使用一个真正的解决方案。

是否有任何身体知道如何指定哪些用户使用Hadoop的连接到远程系统?

PS / Hadoop是使用默认配置意味着连接到群集和了Kerberos不与远程机器通信中使用时不进行认证时使用。

Answer 1:

最后,我无意中发现了恒

static final String HADOOP_USER_NAME = "HADOOP_USER_NAME";`

UserGroupInformation class

在启动时设置此为环境变量,Java系统属性(使用-D )或编程方式与System.setProperty("HADOOP_USER_NAME", "hduser"); 使任何用户名,你想连接到远程Hadoop集群的Hadoop的使用。



Answer 2:

下面的代码对我的作品一样

System.setProperty("HADOOP_USER_NAME", "hduser")
UserGroupInformation ugi = UserGroupInformation.createRemoteUser("hduser"); 
ugi.doAs(new PrivilegedExceptionAction<Void>() {
    public Void run() throws Exception {
        Configuration configuration = new Configuration(); 
        configuration.set("hadoop.job.ugi", "hduser");
        int res = ToolRunner.run(configuration, new YourTool(), args);
        return null; 
    }
});


Answer 3:

我能够通过使用安全的模拟功能,以解决类似的问题, http://hadoop.apache.org/docs/stable1/Secure_Impersonation.html

以下是代码片段

UserGroupInformation ugi = UserGroupInformation.createProxyUser("hduser", UserGroupInformation.getLoginUser()); 

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", "hduser"); 
  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; 
} });

登录用户ID的远程(在我的情况下windows桌面主机)应在核心site.xml中添加如上述提到的网址



文章来源: Set hadoop system user for client embedded in Java webapp