Как указать имя пользователя при установке файлов на 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
спасибо
Ответы
Ответ 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"
Смотрите добавление удаленного файла в хаоп без копирования его на локальный диск для получения дополнительной информации