우리는 Cloudera CDH 5.8.5에서 Sqoop v1.4.6을 사용하여 지갑 사용과 관련된 몇 가지 문제에 직면 해 있습니다. 우리의 시나리오 :Squoop with wallet
- 사용자 폴더 : /홈/참고 MyUser
- 지갑 폴더 : /홈/참고 MyUser/지갑 (cwallet.sso, cwallet.sso.lck, ewallet.p12, e 월렛. 지갑이 잘 나는
를 실행하는 경우로 구성된sqlplus /@MY_TNS_NAME
p12.lck, SQLNET.ORA, tnsnames.ora를)
암호없이 db에 연결할 수 있습니다.
문제는 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"
내가 (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'
와 HDFS에 테이블을 덤프하려고하면 나는 이것을 얻을 오류 :
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입니다 사용 권한).