我使用的是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)
有人可以为此提供解决方案吗?提前谢谢。
答案 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)
验证运行sqoop
命令的用户是文件/sqoop.password
的所有者(其中设置了400个权限)。这将确保密码文件可读。
确保sqoop.password
文件末尾没有任何额外的非打印字符(例如,换行符)。检查这个的一个简单方法是查看文件的大小。如果密码是' sqoop' ,则文件大小应为5.如果密码较大,请从HDFS中删除sqoop.password
文件,在本地重新生成把它放回HDFS。
应报告上述信息的命令是:
hadoop fs -ls /sqoop.password
答案 5 :(得分:0)
对于所有与sqoop密码相关的疑问,请点击以下链接。