通过 SQOOP 连接到 DB2 时出现连接管理器错误

Posted

技术标签:

【中文标题】通过 SQOOP 连接到 DB2 时出现连接管理器错误【英文标题】:connection manager error while connecting to DB2 through SQOOP 【发布时间】:2018-01-25 13:22:08 【问题描述】:

下面是从 DB2 中列出数据库的 sqoop 命令::

sqoop list-databases --connect  'jdbc:db2://DB_IP:PORT/' --username xxx --password xxx --driver com.ibm.db2.jcc.DB2Driver

但我得到以下错误::

WARN sqoop.ConnFactory: Parameter --driver is set to an explicit driver however appropriate connection manager is not being set (via --connection-manager). Sqoop is going to fall back to org.apache.sqoop.manager.GenericJdbcManager. Please specify explicitly which connection manager should be used next time.

什么是 DB2 的 --connection-manager?

改变了 sqoop 语法

sqoop import -libjars <path to>/db2jcc4.jar --connect 'jdbc:db2://DB_IP:PORT/' --username xxx -password xxx -m 1 --table db2_DB_name.db2_tbl_name --hive-overwrite --hive-import --hive-database amitesh_db --hive-table amitesh_db2test --target-dir <path_to>/db2test --as-parquetfile

以下是我收到的错误::

 ERROR manager.SqlManager: Error executing statement: com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][10165][10047][x.xx.xx] Invalid database URL syntax: jdbc:db2://<db_ip>:<port>/. ERRORCODE=-4461, SQLSTATE=42815
com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][10165][10047][4.17.28] Invalid database URL syntax: jdbc:db2://<db_ip>:<port>/. ERRORCODE=-4461, SQLSTATE=42815

【问题讨论】:

您尝试过--connection-manager com.cloudera.sqoop.manager.Db2Manager --driver com.ibm.db2.jcc.DB2Driver。您需要有最新的 db2jcc4.jar(来自您的操作系统的最新的)Db2-client)和可能的许可证文件,具体取决于目标 Db2-server 操作系统。 【参考方案1】:

问题在于 JDBC JARS,对于 DB2,您必须将 jars 添加到 /var/lib/sqoop 并提供适当的权限。您显示的日志/错误快照不是错误,它只是一个警告。

请按照以下步骤添加 jar 并参考 sqoop 示例来构建您的 sqoop 代码/命令。

1 >>> 从here 或您能找到的任何地方下载 db2jcc.jar 和 db2jcc_license_cisuz.jar。

2 >>> 跨集群(数据节点和边缘节点)将两个 jar 推送到 /var/lib/sqoop,sqoop 应该对 jar 具有读取和执行权限。

以下是您可以使用的 sqoop 示例,利用以下代码的 libjars 部分。

sqoop import -libjars /var/lib/sqoop/db2jcc.jar,/var/lib/sqoop/db2jcc_license_cisuz.jar --connect 'jdbc:db2://<HOST>:<PORT>/<DATABASE_NAME>' --username xxxxxx -password xxxxx -m 1 --table $DB2Schema.$DB@Table --hive-overwrite --hive-import --hive-database $HIVE_DATABASE --hive-table $HIVE_TABLE --target-dir $HDFS_DIR --as-parquetfile

请注意,sqoop 不支持 DB2 数据库中的列表数据库。在官方sqoop doc 中结帐。

注意:来自 sqoop 文档

这仅适用于 HSQLDB、mysql 和 Oracle。使用时 oracle,连接数据库的用户必须有 DBA 权限。

【讨论】:

根据您的建议,我对 sqoop 语法进行了一些更改,但出现错误。我已经在原帖中添加了它们 您需要在 sqoop 作业中更改两件事,将许可证和 JDBC jar 添加到 libjar,与我在示例中添加的相同。第二个是你的 URL 格式不正确这里是它的语法:jdbc:db2://:/ @user3521180 我也更改了答案中的 JDBC URL 格式

以上是关于通过 SQOOP 连接到 DB2 时出现连接管理器错误的主要内容,如果未能解决你的问题,请参考以下文章

Sqoop - 尝试连接到 Oracle DB 服务器时出现 java.lang.NullPointerException

为啥在 SSIS 包中连接到 DB2 时出现错误 58031?

无法使用带有 securityMechanism=13 的 DataGrip 连接到 DB2

通过 HTTPS 连接到 MobileFirst Server 时出现问题

连接到本地 MySQL 服务器时出现“连接被拒绝”错误?

Report Server Configuration Manager报表服务器配置管理器,连接新数据库-》报错:无法连接到服务器。