通过 SQOOP 连接到 DB2 时出现连接管理器错误
connection manager error while connecting to DB2 through SQOOP
下面是从 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
问题出在 JDBC JARS 上,对于 DB2,您必须将 jar 添加到 /var/lib/sqoop 并授予适当的权限。您显示的 log/error 快照不是错误,它只是一个警告。
请按照以下步骤添加 jar 并参考 sqoop 示例来构建您的 sqoop code/command。
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文档
This only works with HSQLDB, MySQL and Oracle. When using with
Oracle, it is necessary that the user connecting to the database has
DBA privileges.
下面是从 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
问题出在 JDBC JARS 上,对于 DB2,您必须将 jar 添加到 /var/lib/sqoop 并授予适当的权限。您显示的 log/error 快照不是错误,它只是一个警告。
请按照以下步骤添加 jar 并参考 sqoop 示例来构建您的 sqoop code/command。
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文档
This only works with HSQLDB, MySQL and Oracle. When using with Oracle, it is necessary that the user connecting to the database has DBA privileges.