Set hadoop system user for client embedded in Java webapp
Finally I stumbled on the constant
static final String HADOOP_USER_NAME = "HADOOP_USER_NAME";`
in the UserGroupInformation class
.
Setting this either as an environment variable, as a Java system property on startup (using -D
) or programmatically with System.setProperty("HADOOP_USER_NAME", "hduser");
makes Hadoop use whatever username you want for connecting to the remote Hadoop cluster.
The code below works for me the same as
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;
}
});