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