Я хотел бы отправить задания MapReduce из веб-приложения Java в удаленный кластер Hadoop, но не могу указать, для какого пользователя должно быть отправлено задание. Я хотел бы настроить и использовать системного пользователя, который должен использоваться для всех заданий MapReduce.
В настоящее время я не могу указать какого-либо пользователя, независимо от того, какое задание Hadoop выполняется под именем пользователя, вошедшего в систему в данный момент в клиентской системе. Это вызывает ошибку с сообщением
Permission denied: user=alice, access=WRITE, inode="staging":hduser:supergroup:rwxr-xr-x
...где «алиса» — это локальный пользователь, вошедший в систему на клиентской машине.
Я пробовал
экземпляров UserGroupInformation
(как прокси, так и обычного пользователя) и-Duser.name=hduser
, изменив envar USER
и жестко запрограммированный вызов System.setProperty("user.name", "hduser")
.... безрезультатно. Что касается 1) я признаю, что понятия не имею, как эти классы должны использоваться. Также обратите внимание, что изменение свойства Java System, очевидно, не является реальным решением для использования в веб-приложении.
Кто-нибудь знает, как указать, какой пользователь Hadoop использует для подключения к удаленной системе?
PS/ Hadoop использует конфигурацию по умолчанию, что означает, что при подключении к кластеру не используется аутентификация и что Kerberos не используется для связи с удаленными машинами.