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 作业关键字之前。
我已将我的数据库密码存储在 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 作业关键字之前。