关于mysql:Sqoop Import –password-file函数在sqoop 1.4.4中无法正常工作

Sqoop Import --password-file function not working properly in sqoop 1.4.4

我使用的是hadoop-1.2.1,sqoop版本是1.4.4。

我正在尝试运行以下查询。

1
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是具有权限400的路径/sqoop.password中保存在HDFS上的文件。

它给了我一个错误

1
Access denied for user 'root'@'IP' (using password: YES)

谁能为此提供解决方案? 提前致谢。


当您查看文件并写入密码时," n"正在文件中写入。
更好地使用以下方法来避免问题

echo -n"Your_sqoop_password"> sqoop.password


不确定您是否仍然遇到此问题。密码文件可以在任何文件夹中。尝试以下语法,它应该工作:

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


创建密码时,请使用echo -n选项。 (-n选项删除所有尾随空格)。
假设您有一个密码"myPassword",并且您想将其保存到文件sqoop.password,请按照以下步骤操作:

  • 使用命令创建密码

    1
    echo -n"myPassword"> sqoop.password
  • 将文件上传到HDFS,因为文件需要存在于HDFS中

    1
    hadoop fs -put sqoop.password /user/keepMyFilesHere
  • 编写scoop import命令

    1
    sqoop list-tables --connect jdbc:mysql://localhost/kpdatabase --username root --password-file /user/karanpreet.singh/sqoop.password
  • 这肯定会奏效!


    根据sqoop文档

    You should save the password in a file on the users home directory
    with 400 permissions and specify the path to that file using the
    --password-file argument, and is the preferred method of entering credentials. Sqoop will then read the password from the file and pass
    it to the MapReduce cluster using secure means with out exposing the
    password in the job configuration. The file containing the password
    can either be on the Local FS or HDFS.

    如果我使用root用户运行我的sqoop作业,那么我的密码文件将在HDFS中的/user/root/

    1
    2
    sqoop import --connect jdbc:mysql://database.example.com/employees \
        --username venkatesh --password-file /user/root/database.password

    有关详细信息,请查看此内容


  • 验证运行sqoop命令的用户是文件/sqoop.password(具有400权限集)的所有者。这将确保密码文件可读。

  • 确保sqoop.password文件末尾没有任何额外的非打印字符(例如,换行符)。检查这个的一个简单方法是查看文件的大小。如果密码为'sqoop',则文件大小应为5.如果密码较大,则从HDFS中删除sqoop.password文件,在本地重新生成并将其重新放回HDFS。

    应报告上述信息的命令是:hadoop fs -ls /sqoop.password


  • 检查密码文件中是否有垃圾字符。我得到了同样的问题,最后发现该文件末尾包含一个 n字符,而sqoop也认为它也是密码字符串的一部分。尝试创建如下所述的密码文件,然后使用密码文件:
    echo -n"root_password"> password.txt
    将密码放在root_password的位置。