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上的文件。
它给了我一个错误
谁能为此提供解决方案? 提前致谢。
当您查看文件并写入密码时," n"正在文件中写入。
更好地使用以下方法来避免问题
echo -n"Your_sqoop_password"> sqoop.password
-
究竟。密码应该是裸的,没有换行符。
-
或者根据stackoverflow.com/questions/1050640/…使用vim,因为使用密码文件的一部分是为了避免在日志或ps中出现命令行用法的地方出现密码。
-
完美,这解决了我的问题。
不确定您是否仍然遇到此问题。密码文件可以在任何文件夹中。尝试以下语法,它应该工作:
-
这对我有用。 - 谢谢Ganeshrj
-
非常感谢。我有同样的问题,并得到了这个答案的解决。
-
谢谢,它对我也有用。我想补充一点,如果你想让它查看hdfs,对我来说,我必须使用以下内容:--password-file hdfs:///user/root/database.password
创建密码时,请使用echo -n选项。 (-n选项删除所有尾随空格)。
假设您有一个密码"myPassword",并且您想将其保存到文件sqoop.password,请按照以下步骤操作:
使用命令创建密码
将文件上传到HDFS,因为文件需要存在于HDFS中
编写scoop import命令
1
| sqoop list -tables --connect jdbc:mysql: //localhost /kpdatabase --username root --password -file /user/karanpreet.singh /sqoop. password |
这肯定会奏效!
-
其他答案中缺少密码文件必须在hadoop中的微妙之处,所以这个答案更完整!
-
不建议在共享环境中使用echo,因为它使密码对其他用户可见。
根据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/中
有关详细信息,请查看此内容
-
嗨Prasad,没有在我的工作。它给出了同样的错误。
-
我不得不将密码文件放入HDFS以使其工作。叹。
-
是的,根据我在上面添加的文档The file containing the password can either be on the Local FS or HDFS.,我的情况下我已将密码文件放在HDFS中
验证运行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的位置。
-
在linux上,ls -l或wc将公开文件大小,od -c或od -c(你更喜欢字符或十六进制输出?)会显示内容。