2017-09-26 142 views
0

我们正在面对Cloudera CDH 5.8.5中与Sqoop v1.4.6的钱包利用有关的一些问题。我们的方案:带钱包的Sqoop导入

  • 用户文件夹:/家/ myuser的
  • 钱包夹:/家/ myuser的/钱包cwallet.sso,cwallet.sso.lck,ewallet.p12,电子钱包。 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' 

我得到这个错误:

Error: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: encountered a problem with the Secret Store. Check the wallet location for the presence of an open wallet (cwallet.sso) and ensure that this wallet contains the correct credentials using the mkstore utility: java.io.IOException: oracle.security.crypto.core.CipherException: Invalid padding string (or incorrect password)...

如果我运行相同的命令而不使用钱包(手动提供用户名和密码)它的工作原理。

将钱包传递给映射器似乎存在一些问题。 任何想法如何解决这个问题?

附加信息:

  • 的ACL允许sqoop用户访问/家/ myuser的
  • /家庭/为myuser /钱包文件夹所有者组是sqoop主要组(RWX权限)。

回答

0

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

问题与钱包有关。

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

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

在地图缩小过程中,钱包分布在映射器中,所以对于这个“不可共享”钱包,映射器(位于不同的机器上)无法使用它。

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

mkstore -wrl "<wallet_folder>" -create