Establecer el usuario del sistema hadoop para el cliente integrado en la aplicación web de Java

Me gustaría enviar trabajos de MapReduce desde una aplicación web de Java a un clúster Hadoop remoto pero no puedo especificar a qué usuario se debe enviar el trabajo. Me gustaría configurar y usar un usuario del sistema que debería usarse para todos los trabajos de MapReduce.

Actualmente no puedo especificar ningún usuario y no importa lo que el trabajo de hadoop se ejecute con el nombre de usuario del usuario que ha iniciado sesión actualmente en el sistema cliente. Esto provoca un error con el mensaje.

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

... donde "alice" es el usuario local que inició sesión en la máquina cliente.

Yo he tratado

varias combinaciones de crearUserGroupInformation instancias (tanto de proxy como de usuario normal) yconfigurando la propiedad del sistema Java con-Duser.name=hduser, cambiando elUSER envar y como codificadoSystem.setProperty("user.name", "hduser") llamada.

... en vano. Con respecto a 1) Admito que no tengo idea de cómo se supone que se deben usar estas clases. También tenga en cuenta que cambiar la propiedad del sistema Java obviamente no es una solución real para usar en la aplicación web.

¿Alguien sabe cómo especifica qué usuario usa Hadoop para conectarse a un sistema remoto?

PS / Hadoop usa la configuración predeterminada, lo que significa que no se usa autenticación al conectarse al clúster y que Kerberos no se usa para comunicarse con las máquinas remotas.

Respuestas a la pregunta(3)

Su respuesta a la pregunta