详情:
Sqoop 1.4.6
尝试位于HDFS和本地FS中的密码文件。还尝试将密码文件声明为--password-file file:///user/username/password.file
sqoop import \
--connect 'jdbc:sqlserver://servername;database=databasename' \
--username userxxx \
--password-file password.file \
--table 'sales' \
--fields-terminated-by '|' \
--null-string '\\N' \
--null-non-string '\\N' \
--hive-import
运行sqoop导入时,我从sql server收到身份验证失败,除非我将用户名和密码放在连接字符串中。如果我尝试使用-P或--password-file,则身份验证失败。
答案 0 :(得分:0)
<强> --password-file
强>
根据docs,
为数据库提供密码的安全方式。您应该将密码保存在具有400个权限的用户主目录中的文件中,并使用--password-file参数指定该文件的路径,是输入凭据的首选方法。然后,Sqoop将从文件中读取密码,并使用安全方法将其传递给MapReduce集群,而不会在作业配置中公开密码。包含密码的文件可以位于本地FS或HDFS上。
检查文件的权限,它应该在主目录中。
如果您使用本地FS添加--password-file
,Sqoop预计HDFS中会file://
。
示例:--password-file file:///user/dev/database.password
-P
选项
它将从控制台读取密码。使用此功能,您必须在执行命令时写入密码。
<强> password
强>
只需添加密码即可。
答案 1 :(得分:0)
还有一种更好的方法。使用 expect scripting 。
创建一个脚本文件说&#34; script.sh&#34; :
#!/usr/bin/expect -f
set password "<ur password desination or file>"
spawn sqoop <args> # define sqoop command here
expect "*?Enter password:*" # As ask for password as while reading from database
send -- "$password\r"
expect sleep 15 # or you can use "set timeout -1" for infinite waiting time
expect eof
EOF
done
如果您遇到错误,spawn命令不存在等等。这意味着未安装expect。
对于centos7
yum install expect -y
并运行文件&#34; script.sh&#34;
如果期望脚本无法加载
尝试:
> /usr/bin/expect script.sh
由于