【问题标题】:Issues with sqoop import from db2 to hdfs从 db2 到 hdfs 的 sqoop 导入问题
【发布时间】:2020-04-15 19:48:24
【问题描述】:

我正在尝试使用 sqoop 将数据从 DB2 导入 hdfs。由于我没有将 db2jcc4.jar 复制到 /var/lib/sqoop/ 目录的管理员权限,因此我将 jar 复制到了我正在执行的位置,并使用 --libjars 选项指定了该 jar。

    sqoop import \
   --libjars db2jcc4.jar \
   --driver com.ibm.db2.jcc.DB2Driver \
   --connect 'jdbc:db2://<hostname>:50000/<dbname>' \
   --username <username> \
   --password <password> \
   --table <tablename> \
   --target-dir /hdfs path

我收到如下错误:

   20/04/15 15:16:59 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.ibm.db2.jcc.DB2Driver
java.lang.RuntimeException: Could not load db driver class: com.ibm.db2.jcc.DB2Driver
        at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:875)
        at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:52)
        at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:763)
        at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:786)
        at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:289)
        at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:260)
        at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:246)
        at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:327)
        at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1858)
        at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1657)
        at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:106)
        at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:494)
        at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:621)
        at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
        at org.apache.sqoop.Sqoop.main(Sqoop.java:252)

谁能帮我解决这个问题

【问题讨论】:

  • JDBC 客户端 jar 需要放在 $SQOOP_HOME/lib 中。我们可以在任何自定义位置下指定 jar 并运行吗?

标签: db2 sqoop hadoop2 data-ingestion


【解决方案1】:

连接到 Db2 不仅需要 db2jcc4.jar,还需要相应的许可证 JAR,通常是 db2jcc_license_cisuz.jar 或 db2jcc_license_cu.jar。要使用的许可证 JAR 的文件名取决于您将要访问的 Db2 服务器的操作系统:

  • db2jcc_license_cu.jar 可以访问 Linux、UNIX 和 Windows Db2 服务器
  • db2jcc_license_cisuz.jar 可以访问所有 Db2 服务器平台,包括 z/OS 和 IBM i

如果可能,请让您的 DBA 为您提供正确的 db2jcc4.jar 发行版和适合您的 Db2 环境的许可证 JAR。否则,您可以通过https://www.ibm.com/support/pages/download-db2-fix-packs-version-db2-linux-unix-and-windows 从 IBM 免费下载 IBM Data Server Driver for JDBC and SQLJ。就许可证 JAR 而言,该网站上可用的 JCC 驱动程序可能仅包括 db2jcc_license_cu.jar 而不是 db2jcc_license_cisuz.jar。

db2jcc JAR(驱动程序和许可证)都需要列在程序使用的任何类路径变量中。对于sqoop,环境变量为HADOOP_CLASSPATH,运行sqoop时可能还需要指定--libjars选项。

export HADOOP_CLASSPATH="/tmp/jdbcjars/db2jcc4.jar:/tmp/jdbcjars/db2jcc_license_cisuz.jar"
sqoop import --libjars /tmp/jdbcjars/db2jcc4.jar,/tmp/jdbcjars/db2jcc_license_cisuz.jar ...

【讨论】:

  • 感谢您的回复。我正在尝试查找要下载的 db2jcc_license jar,但无法获取。我们是否需要从像 IBM 这样的供应商那里购买,或者它是开源的。如果它是免费的,你能提供任何下载链接
  • 我修改了我的答案以包含有关许可证 JAR 的详细信息以及可以从 IBM 网站下载它的位置
猜你喜欢
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多