Проблемы с импортом sq oop из db2 в hdfs - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь импортировать данные из DB2 в hdfs, используя sq oop. Так как у меня нет прав администратора для копирования db2jcc4.jar в каталог / var / lib / sqoop /, я скопировал jar в место, где я выполняю, и указал этот jar с параметром --libjars.

    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)

Может кто-нибудь помочь мне решить проблему

1 Ответ

0 голосов
/ 16 апреля 2020

Для подключения к Db2 требуется не только db2jcc4.jar, но и соответствующий ему лицензионный JAR, обычно db2jcc_license_cisuz.jar или db2jcc_license_cu.jar. Имя файла лицензии JAR для использования зависит от операционной системы серверов Db2, к которым вы будете обращаться:

  • db2jcc_license_cu.jar может обращаться к Linux, UNIX и * Серверы 1020 * Db2
  • db2jcc_license_cisuz.jar могут обращаться ко всем серверным платформам Db2, включая z / OS и IBM i

Если возможно, попросите вашего администратора баз данных предоставить вам необходимый уровень выпуска db2jcc4.jar и лицензионный JAR, подходящий для вашей среды Db2. В противном случае вы можете бесплатно загрузить драйвер IBM Data Server для JDB C и SQLJ от IBM по адресу https://www.ibm.com/support/pages/download-db2-fix-packs-version-db2-linux-unix-and-windows. Что касается лицензионного JAR, драйверы J CC, доступные на этом веб-сайте, могут включать только db2jcc_license_cu.jar, но не db2jcc_license_cisuz.jar.

Оба db2j cc JAR (драйвер и лицензия) должны быть указаны в любой переменной classpath, используемой вашей программой. Для sq oop переменная среды - HADOOP_CLASSPATH, и вам также может потребоваться указать параметр --libjars при запуске sq oop.

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 ...
...