除非连接字符串

时间:2017-06-10 15:22:32

标签: sqoop

详情:

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,则身份验证失败。

2 个答案:

答案 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

由于