Откуда Hadoop получает имя пользователя и сопоставление групп для имени пользователя и сопоставления групп в оболочке Linux?

#hadoop #hdfs #hadoop2

#hadoop #hdfs #hadoop2

Вопрос:

В настоящее время я работаю над проектом по повышению безопасности кластера Hadoop. В конечном итоге я буду использовать Kerberos и Sentry для аутентификации и авторизации. И имя пользователя и сопоставление групп будут получены из AD / LDAP (?), Я так думаю.

Но сейчас я просто учусь и пытаюсь. У меня есть вопрос, и я не могу понять, что это

откуда берется информация о сопоставлении имени пользователя и группы?

Насколько я знаю, для Hadoop нет имени пользователя и имени группы, а имя пользователя и имя группы поступают от клиента, где бы он ни находился, с локального клиентского компьютера или из области Kerberos. Но для меня это немного расплывчато, и могу ли я получить детали реализации здесь?

Является ли эта информация с компьютера, на котором находится клиент HDFS, или из имени пользователя и группы Linux shell на узле name? Или это зависит от контекста — даже связанного с узлом данных? Что делать, если узлы данных и узлы имен имеют разных пользователей или сопоставление групп пользователей в локальных полях.

Ответ №1:

Hadoop получает эту информацию из глобальной переменной с именем HADOOP_USER_NAME .

Если вы хотите передать другое имя пользователя , вы можете написать следующее:

 HADOOP_USER_NAME=yourname hadoop dfs -put ...
 

Таким образом, команда должна начинаться с HADOOP_USER_NAME=VALUE ,

Комментарии:

1. Я думаю, это правильно. Однако, это единственный способ, которым Hadoop получает имя пользователя?

Ответ №2:

Клиент, NameNode и все службы Hadoop, которые проверяют членство в группе и имя пользователя в окне Linux, по умолчанию используют команду id. (Однако я не уверен в деталях клиентов Windows, но в последнее время это делается через JNI, так что и на этой стороне должно быть решение.)

Это также означает, что результат будет зависеть от сопоставления групп пользователей локального поля. Если вы используете Kerberos с любым бэкэндом, или если у вас есть централизованный бэкэнд для этого через sssd или что-то еще, то вы можете настроить поле в его nsswitch.conf, чтобы использовать его за командой id.

Примечание: Существует свойство с именем hadoop.security.group.mapping, которое определяет стратегию, используемую для выполнения сопоставления. Я не рекомендую использовать LDAPGroupMapping, даже если у вас есть серверная часть LDAP, JNIBasedGroupMappingWithFallback кажется более надежным и хорошо работает.