2017-09-26 168 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