通过 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://以上是关于通过 SQOOP 连接到 DB2 时出现连接管理器错误的主要内容,如果未能解决你的问题,请参考以下文章
Sqoop - 尝试连接到 Oracle DB 服务器时出现 java.lang.NullPointerException
为啥在 SSIS 包中连接到 DB2 时出现错误 58031?
无法使用带有 securityMechanism=13 的 DataGrip 连接到 DB2
通过 HTTPS 连接到 MobileFirst Server 时出现问题
Report Server Configuration Manager报表服务器配置管理器,连接新数据库-》报错:无法连接到服务器。