SQoop Import - функция пароля не работает должным образом в sqoop 1.4.4

Я использую 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)

Может ли кто-нибудь предоставить решение для этого? Спасибо заранее.

Ответ 1

"\n" записывается в файл, когда вы vi файл и записываете пароль. Лучше использовать подход ниже, чтобы избежать проблем.

echo -n "Your_sqoop_password" > sqoop.password

Ответ 2

Не уверен, что у вас все еще есть эта проблема. Файл паролей может быть в любой папке. Попробуйте следующий синтаксис, и он должен работать:

--password-file file:///user/root/database.password

Ответ 3

Согласно документации 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

Ответ 4

Проверьте, есть ли в файле паролей какой-либо символ мусора. Я получал ту же проблему и, наконец, обнаружил, что файл содержал символ \n в конце, и sqoop считал это также частью строки пароля. Попробуйте создать файл паролей, как указано ниже, и использовать файл паролей:   echo -n "root_password" > password.txt Поместите свой пароль вместо root_password.

Ответ 5

  • Убедитесь, что пользователь, выполняющий команду sqoop, является владельцем файла /sqoop.password (который имеет 400 разрешений). Это обеспечит читаемость файла паролей.

  • Убедитесь, что в файле sqoop.password нет дополнительных непечатаемых символов в конце (например, символ новой строки). Один простой способ проверить это - посмотреть размер файла. Если пароль указан 'sqoop', размер файла должен быть 5. Если он больше, удалите файл sqoop.password из HDFS, восстановите его локально и верните его на HDFS.

    Команда, которая должна сообщать вышеприведенные фрагменты информации:

    hadoop fs -ls /sqoop.password

Ответ 6

При создании пароля используйте опцию 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
    

Это определенно сработает!