【问题标题】:Sqoop import with walletSqoop 使用钱包导入
【发布时间】:2018-03-07 12:22:04
【问题描述】:

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

  • 用户文件夹:/home/myuser
  • 钱包文件夹:/home/myuser/walletcwallet.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


    【解决方案1】:

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

    问题与钱包有关。

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

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

    在 map reduce 期间,钱包分布在映射器之间,因此对于这个“不可共享”的钱包,映射器(位于不同的机器上)无法使用它。

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

    mkstore -wrl "<wallet_folder>" -create
    

    【讨论】:

    • 您能告诉我们您为此使用的 Sqoop 导入命令吗?我们遇到了同样的问题,并且在启动 MR 作业时导入作业失败。在向映射器任务提供钱包信息时看起来像同样的问题。任何建议将不胜感激
    • @user2720864 我们使用了以下 sqoop 导入:export HADOOP_OPTS="-Doracle.net.tns_admin=$HOME/tns -Doracle.net.wallet_location=$HOME/wallet" sqoop import -D mapreduce.map.java.opts='-Doracle.net.tns_admin=. -Doracle.net.wallet_location=.' -files $HOME/wallet/cwallet.sso,$HOME/wallet/ewallet.p12,$HOME/tns/sqlnet.ora,$HOME/tns/tnsnames.ora --m 1 --connect "jdbc:oracle:thin:@TCBD0010" --query "SELECT * FROM MYTBL WHERE \$CONDITIONS" --target-dir '/tmp/try'
    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 2016-08-07
    • 2017-02-03
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多