Sqoop Import --password-file函数在sqoop 1.4.4中无法正常工作

时间:2015-04-17 10:12:35

标签: mysql hadoop sqoop

我使用的是hadoop-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是一个文件,通过权限400保存在路径/sqoop.password中的HDFS上。

它给了我一个错误

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

有人可以为此提供解决方案吗?提前谢谢。

6 个答案:

答案 0 :(得分:13)

当您查看文件并写入密码时,

“\ n”正在文件中写入。 更好地使用以下方法来避免问题

echo -n "Your_sqoop_password" > sqoop.password

答案 1 :(得分:10)

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

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

答案 2 :(得分:3)

根据sqoop文档

  

您应该将密码保存在用户主目录中的文件中   拥有400个权限并使用。指定该文件的路径   --password-file argument,是输入凭据的首选方法。然后,Sqoop将从文件中读取密码并通过   它使用安全的方式到MapReduce集群,而不暴露   作业配置中的密码。包含密码的文件   可以在本地FS或HDFS上。

如果我使用root用户运行我的sqoop作业,那么我的密码文件将位于{strong> HDFS

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

有关详细信息,请查看this

答案 3 :(得分:1)

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

答案 4 :(得分:1)

  1. 验证运行sqoop命令的用户是文件/sqoop.password的所有者(其中设置了400个权限)。这将确保密码文件可读。

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

    应报告上述信息的命令是:

    hadoop fs -ls /sqoop.password

答案 5 :(得分:0)

对于所有与sqoop密码相关的疑问,请点击以下链接。

www.ericlin.me