【发布时间】:2018-03-07 12:22:04
【问题描述】:
我们在 Cloudera CDH 5.8.5 中遇到了与 Sqoop v1.4.6 的钱包使用相关的一些问题。我们的场景:
- 用户文件夹:/home/myuser
- 钱包文件夹:/home/myuser/wallet(cwallet.sso、cwallet.sso.lck、ewallet.p12、ewallet.p12.lck、sqlnet.ora、tnsnames.ora )
钱包配置好,就像我运行一样
sqlplus /@MY_TNS_NAME
我可以不用密码连接到数据库。
问题出在 sqoop 上。 我可以使用以下方式连接到数据库并列出其中的所有表:
export HADOOP_OPTS="-Doracle.net.tns_admin=/home/myuser/wallet -Doracle.net.wallet_location=/home/myuser/wallet"
sqoop list-tables --connect "jdbc:oracle:thin:@MY_TNS_NAME"
如果我尝试使用以下命令将表转储到 HDFS(建议 here)
export HADOOP_OPTS="-Doracle.net.tns_admin=/home/myuser/wallet -Doracle.net.wallet_location=/home/myuser/wallet"
sqoop import -D mapreduce.map.java.opts='-Doracle.net.tns_admin=. -Doracle.net.wallet_location=.' -files /home/myuser/wallet/cwallet.sso,/home/myuser/wallet/ewallet.p12,/home/myuser/wallet/sqlnet.ora,/home/myuser/wallet/tnsnames.ora -libjars "/var/lib/sqoop/oraclepki.jar,/var/lib/sqoop/osdt_cert.jar,/var/lib/sqoop/osdt_core.jar,/var/lib/sqoop/sqljdbc4.jar" --m 1 --connect "jdbc:oracle:thin:@MY_TNS_NAME" --query "SELECT * FROM MYTABLE WHERE \$CONDITIONS" --target-dir '/tmp/mytabledump'
我收到此错误:
错误:java.lang.RuntimeException:java.lang.RuntimeException: java.sql.SQLException:遇到秘密存储问题。 检查钱包位置是否存在打开的钱包 (cwallet.sso) 并确保此钱包包含正确的 使用 mkstore 实用程序的凭据:java.io.IOException: oracle.security.crypto.core.CipherException:无效的填充字符串 (或密码错误)...
如果我在不使用钱包的情况下运行相同的命令(手动提供用户名和密码),它会起作用。
将钱包传递给映射器似乎存在一些问题。 知道如何解决这个问题吗?
附加信息:
- ACL 允许 sqoop 用户访问 /home/myuser
- /home/myuser/wallet 文件夹所有者组是 sqoop 主组(rwx 权限)。
【问题讨论】:
标签: oracle hadoop cloudera sqoop wallet