使用钱包进行Sqoop导入

时间:2017-09-26 10:16:15

标签: oracle hadoop cloudera sqoop wallet

我们在Cloudera CDH 5.8.5中遇到了与Sqoop v1.4.6的钱包利用相关的一些问题。我们的情景:

  • 用户文件夹: / home / myuser
  • wallet文件夹: / home / myuser / wallet cwallet.sso,cwallet.sso.lck,ewallet.p12,ewallet.p12.lck,sqlnet.ora,tnsnames.ora

钱包配置得很好,就像我跑

一样
sqlplus /@MY_TNS_NAME

我可以在没有密码的情况下连接到数据库。

问题在于sqoop。 我可以使用以下命令连接到db并列出所有表:

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:遇到了Secret Store的问题。   检查钱包位置是否存在打开的钱包   (cwallet.sso)并确保此钱包包含正确的内容   使用mkstore实用程序的凭据:java.io.IOException:   oracle.security.crypto.core.CipherException:无效的填充字符串   (或密码不正确)......

如果我在不使用钱包的情况下运行相同的命令(手动提供用户和密码),则可以正常运行。

似乎将钱包传递给地图制作者存在一些问题。 知道如何解决这个问题吗?

其他信息:

  • ACL允许sqoop用户访问 / home / myuser
  • / home / myuser / wallet 文件夹所有者组是sqoop主要群组( rwx 权限)。

1 个答案:

答案 0 :(得分:0)

我们设法解决了这个问题。

问题与钱包有关。

据我所知,有两种类型的钱包。第一种类型只能在创建它的机器上使用。第二种类型可以在多台机器上使用。

我们的问题是我们的钱包属于第一种类型。

在地图缩小期间,钱包分配给地图制作者,因此对于这个“不可共享”的钱包,地图制作者(位于不同的机器上)无法使用它。

我们必须使用以下命令创建钱包:

zipDir