Ответ 1
"\n" записывается в файл, когда вы vi файл и записываете пароль. Лучше использовать подход ниже, чтобы избежать проблем.
echo -n "Your_sqoop_password" > sqoop.password
Я использую hasoop-1.2.1, а версия sqoop - 1.4.4.
Я пытаюсь запустить следующий запрос.
sqoop import --connect jdbc:mysql://IP:3306/database_name --table clients --target-dir /data/clients --username root --password-file /sqoop.password -m 1
sqoop.password
- это файл, который хранится на HDFS по пути /sqoop.password
с разрешением 400.
Это дает мне ошибку
Access denied for user 'root'@'IP' (using password: YES)
Может ли кто-нибудь предоставить решение для этого? Спасибо заранее.
"\n" записывается в файл, когда вы vi файл и записываете пароль. Лучше использовать подход ниже, чтобы избежать проблем.
echo -n "Your_sqoop_password" > sqoop.password
Не уверен, что у вас все еще есть эта проблема. Файл паролей может быть в любой папке. Попробуйте следующий синтаксис, и он должен работать:
--password-file file:///user/root/database.password
Согласно документации sqoop
Вы должны сохранить пароль в файле в домашнем каталоге пользователей с 400 правами и укажите путь к этому файлу, используя
--password-file argument
и является предпочтительным методом ввода учетных данных. Затем Sqoop считывает пароль из файла и передает это кластер MapReduce, используя безопасные средства, не подвергая пароль в конфигурации задания. Файл, содержащий пароль может быть либо на локальной FS, либо на HDFS.
Если я выполняю работу sqoop с пользователем root, тогда мой файл с паролем будет находиться в /user/root/
в HDFS
sqoop import --connect jdbc:mysql://database.example.com/employees \
--username venkatesh --password-file /user/root/database.password
Для получения дополнительной информации вы можете проверить this
Проверьте, есть ли в файле паролей какой-либо символ мусора. Я получал ту же проблему и, наконец, обнаружил, что файл содержал символ \n в конце, и sqoop считал это также частью строки пароля. Попробуйте создать файл паролей, как указано ниже, и использовать файл паролей: echo -n "root_password" > password.txt Поместите свой пароль вместо root_password.
Убедитесь, что пользователь, выполняющий команду sqoop
, является владельцем файла /sqoop.password
(который имеет 400 разрешений). Это обеспечит читаемость файла паролей.
Убедитесь, что в файле sqoop.password
нет дополнительных непечатаемых символов в конце (например, символ новой строки). Один простой способ проверить это - посмотреть размер файла. Если пароль указан 'sqoop', размер файла должен быть 5. Если он больше, удалите файл sqoop.password
из HDFS, восстановите его локально и верните его на HDFS.
Команда, которая должна сообщать вышеприведенные фрагменты информации: hadoop fs -ls /sqoop.password
При создании пароля используйте опцию echo -n
. (-n
удаляет все конечные пробелы).
Предположим, у вас есть пароль "myPassword", и вы хотите сохранить его в файле sqoop.password
, а затем выполните следующие шаги:
Создайте пароль, используя команду
echo -n "myPassword" > sqoop.password
Загрузите файл в HDFS, поскольку файл должен присутствовать в HDFS
hadoop fs -put sqoop.password /user/keepMyFilesHere
Напишите команду импорта scoop
sqoop list-tables --connect jdbc:mysql://localhost/kpdatabase --username root --password-file /user/karanpreet.singh/sqoop.password
Это определенно сработает!