6

我正在使用 SQOOP 将信息从 HDFS 导出到 MS-SQL。我正在通过 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 来只拥有密码(没有空格或其他任何东西)。叫这个密码。

1)我尝试使用文件系统。但是我得到一个 IOException 说该文件不存在。查看代码后,看起来 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,现在它可以工作了。

4

1 回答 1

4

我认为您可以利用指定 --password-file 参数,以便 Oozie 永远不会看到密码。查看Sqoop 用户指南了解更多详细信息。

于 2013-10-30T14:20:32.347 回答