Подтвердить что ты не робот

Как указать имя пользователя при установке файлов на HDFS с удаленной машины

У меня есть кластер Hadoop и работает под общим именем пользователя user1. Я хочу поместить файлы в hadoop с удаленной машины, которая не является частью кластера hadoop. Я сконфигурировал файлы hadoop на удаленном компьютере таким образом, чтобы

hadoop dfs -put file1 ...

вызывается с удаленного компьютера, он помещает файл1 в кластер Hadoop.

Единственная проблема заключается в том, что я зарегистрирован как "user2" на удаленном компьютере, и это не дает мне ожидаемого результата. Фактически, приведенный выше код может быть выполнен только на удаленном компьютере следующим образом:

hadoop dfs -put file1 /user/user2/testFolder

Однако, я действительно хочу, чтобы сохранить файл как:

hadoop dfs -put file1 /user/user1/testFolder

Если я пытаюсь запустить последний код, hasoop выдает ошибку из-за прав доступа. Есть ли в любом случае, что я могу указать имя пользователя в команде hadoop dfs?

Я ищу что-то вроде:

hadoop dfs -username user1 file1 /user/user1/testFolder

спасибо

4b9b3361

Ответ 1

По умолчанию аутентификация и авторизация отключены в Hadoop. Согласно Hadoop - The Definitive Guide (кстати, хорошая книга - порекомендует его купить)

Идентификатор пользователя, используемый Hadoop для разрешений в HDFS, определяется запуском команда whoami в клиентской системе. Аналогично, имена групп получены из вывод запущенных групп.

Итак, вы можете создать новую команду whoami, которая вернет требуемое имя пользователя и поместит его в PATH соответствующим образом, чтобы найденный созданный whoami был найден до того, как будет найден фактический whoami, который поставляется с Linux. Аналогично, вы можете играть с командой groups.

Это взлом и не будет работать после активации аутентификации и авторизации.

Ответ 2

Если вы используете переменную env HADOOP_USER_NAME, вы можете сообщить HDFS, с каким именем пользователя работать. Обратите внимание, что это работает только в том случае, если ваш кластер не использует функции безопасности (например, Kerberos). Например:

HADOOP_USER_NAME=hdfs hadoop dfs -put ...

Ответ 3

Это никому не важно, но я использую для этого небольшой взлом.

Я экспортирую HADOOP_USER_NAME в .bash_profile, так что каждый раз, когда я вхожу в систему, пользователь устанавливается.

Просто добавьте следующую строку кода в .bash_profile:

export HADOOP_USER_NAME=<your hdfs user>

Ответ 4

Там есть еще одно сообщение с чем-то похожим на это, которое может обеспечить работу для вас с помощью потоковой передачи через ssh:

cat file.txt | ssh [email protected] "hadoop fs -put - /path/in/hdfs/file.txt"

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