Me gustaría enviar trabajos de MapReduce desde una aplicación web java a un clúster Hadoop remoto, pero no puedo especificar para qué usuario se debe enviar el trabajo. Me gustaría configurar y usar un usuario del sistema que se debe usar para todos los trabajos de MapReduce.Establecer el usuario del sistema hadoop para el cliente integrado en la aplicación Java
Actualmente no puedo especificar ningún usuario y no importa lo que ejecute el trabajo de hadoop con el nombre de usuario del usuario actualmente conectado del sistema cliente. Esto causa 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 ha iniciado sesión en la máquina del cliente.
He tratado
- varias combinaciones de crear
UserGroupInformation
casos (ambos proxies y usuario normal) y - establecer la propiedad de sistema Java con
-Duser.name=hduser
, cambiando el envarUSER
y comoSystem.setProperty("user.name", "hduser")
llamada codificada duro.
... en vano. En cuanto a 1), confieso que no tengo ni idea de cómo se supone que se utilizarán 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 se 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.
Al tratar de resolver el problema, descubrí cómo debe usarse 'UserGroupInformation'. Podría ser interesante que sea posible ejecutar trabajos de Hadoop como cualquier usuario sobre un usuario de sistema común. Esto se llama * suplantación * en el lenguaje de Hadoop. Tenga en cuenta que esto requiere [configuración adicional del clúster hadoop] (http://hadoop.apache.org/common/docs/stable/Secure_Impersonation.html).También tenga en cuenta que aún no he logrado obtener este trabajo ... :-) –
También puede simplemente establecer la variable de entorno HADOOP_USER_NAME. Eso también es suficiente :) –
Funcionó para mí hoy y me ahorró muchas horas de trabajo. Gracias amigo – Mr37037