Sqoop 作业无法使用 Hadoop 凭据 API

Sqoop job unable to work with Hadoop Credential API

我已将我的数据库密码存储在 Hadoop CredentialProvider 中。

从终端导入 Sqoop 工作正常,成功从 CredentialProvider 获取密码。

sqoop import
-Dhadoop.security.credential.provider.path=jceks://hdfs/user/vijay/myPassword.jceks
--table myTable -m 1 --target-dir /user/vijay/output  --delete-target-dir --username vijay  --password-alias db2-dev-password

但是当我尝试设置为 Sqoop 作业时,它无法识别 -Dhadoop.security.credential.provider.path 参数。

sqoop job --create my-sqoop-job -- import --table myTable -m 1 --target-dir /user/vijay/output  --delete-target-dir --username vijay  -Dhadoop.security.credential.provider.path=jceks://hdfs/user/vijay/myPassword.jceks --password-alias 

错误信息如下:

14/04/05 13:57:53 ERROR tool.BaseSqoopTool: Error parsing arguments for import:
14/04/05 13:57:53 ERROR tool.BaseSqoopTool: Unrecognized argument: -Dhadoop.security.credential.provider.path=jceks://hdfs/user/vijay/myPassword.jceks
14/04/05 13:57:53 ERROR tool.BaseSqoopTool: Unrecognized argument: --password-alias
14/04/05 13:57:53 ERROR tool.BaseSqoopTool: Unrecognized argument: db2-dev-password

我在 Sqoop User Guide 中找不到任何关于使用 Sqoop 作业配置 Hadoop 凭据 API 的特殊说明。

如何解决这个问题?

您的 Sqoop 作业命令不正确,即 --password-alias 不完整。
请在您的 Hadoop 服务器中执行以下命令

hadoop credential list -provider jceks://hdfs/user/vijay/myPassword.jceks 

在下面的 Sqoop 作业命令中添加输出

sqoop job --create my-sqoop-job -- import --table myTable -m 1 --target-dir /user/vijay/output  --delete-target-dir --username vijay  -Dhadoop.security.credential.provider.path=jceks://hdfs/user/vijay/myPassword.jceks --password-alias <<output of above command>>

重新定位Sqoop参数解决问题

sqoop job -Dhadoop.security.credential.provider.path=jceks://hdfs/user/vijay/myPassword.jceks --create my-sqoop-job -- import --table myTable -m 1 --target-dir /user/vijay/output  --delete-target-dir --username vijay   --password-alias myPasswordAlias

将 Hadoop 凭证放在 Sqoop 作业关键字之前。