我正在使用sqoop将信息从hdfs导出到mssql。我正在通过oozie运行sqoop。现在我已经在oozie工作流中为jdbc连接硬编码了uid,pwd。一旦我切换到prod,我就不能这样做了。在这种情况下,传递身份验证信息的最佳方式是什么?
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<arg>export</arg>
<arg>--connect</arg>
<arg>jdbc:sqlserver://$sqlServerIP:1433</arg>
<arg>--table</arg>
<arg>tableName</arg>
<arg>--export-dir</arg>
<arg>/user/sqoop/file</arg>
<arg>--username</arg>
<arg>me</arg>
<arg>--password</arg>
<arg>password</arg>
</sqoop>
我可以把它们作为参数传入,比如$username,$password。但实际的uid/pwd仍然会显示在oozie web控制台中。
更新
我尝试了两种方法(如下面建议的那样)来做到这一点…在vim中,我创建了pwd,以便只拥有密码(没有空格或其他任何东西)。称之为pwd。
1) 我试过使用文件系统。但是我得到一个异常,说文件不存在。在查看代码之后,sqoop似乎使用传递的conf来访问fs。所以我假设当通过oozie运行时,它只能访问hdfs。
2) 我将密码文件加载到hdfs上的一个随机位置/users/my name/pwd(pwd是文件)。现在它可以访问文件了(因为我没有得到ioexception)。但是它无法连接到sqlserver。我不知道该怎么做才能让它工作?
更新2我创建的密码文件如下: echo "pwd" > my.password
这会将eol添加到我更改为的文件my.password echo -n "pwd" > my.password
现在它起作用了。
1条答案
按热度按时间e37o9pze1#
我认为可以利用指定--password文件参数的优势,这样oozie就永远看不到密码了。查看sqoop用户指南了解更多详细信息。