java - SQOOP SQLSERVER 无法加载驱动程序 "appropriate connection manager is not being set"

标签 java sql-server jdbc hadoop sqoop

我下载了sqljdbc4.jar .我正在调用 sqoop就像从文件夹(存储 jar 的地方)一样:

sqoop list-tables --driver com.microsoft.jdbc.sqlserver.SQLServerDriver --connect jdbc:sqlserver://localhost:1433;user=me;password=myPassword; -libjars=./sqljdbc4.jar

我收到以下警告和错误:

13/10/25 18:38:13 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.

13/10/25 18:38:13 INFO manager.SqlManager: Using default fetchSize of 1000
13/10/25 18:38:13 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.microsoft.jdbc.sqlserver.SQLServerDriver
java.lang.RuntimeException: Could not load db driver class: com.microsoft.jdbc.sqlserver.SQLServerDriver
    at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:727)
    at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:52)
    at org.apache.sqoop.manager.SqlManager.listTables(SqlManager.java:418)
    at org.apache.sqoop.tool.ListTablesTool.run(ListTablesTool.java:49)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:145)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:238)

更新

我更改了命令行以反射(reflect)下面的注释,我得到了同样的错误:

sqoop list-databases -libjars=<ABSOLUTE_PATH>/jars/sqljdbc4.jar --connect jdbc:sqlserver://localhost:1433;user=me;password=password

13/10/28 17:00:33 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver
java.lang.RuntimeException: Could not load db driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver
    at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:727)
    at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:52)
    at org.apache.sqoop.manager.CatalogQueryManager.listDatabases(CatalogQueryManager.java:57)
    at org.apache.sqoop.tool.ListDatabasesTool.run(ListDatabasesTool.java:49)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:145)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:238)

当我查看 sqljdbc4.jar 的列表时,我确实看到了那个路径中的类......是否有可能 libjars option没有做我认为应该做的事吗?

最佳答案

在绝大多数情况下,不需要使用参数 --driver,甚至更多会导致不良行为。我强烈建议从您的命令行中完全删除此参数。查看Connectors vs Drivers博客文章了解更多详情。

此外,您还指定了一个不存在的 JDBC 驱动程序类。正确的是:

com.microsoft.sqlserver.jdbc.SQLServerDriver

您可以在 official docs 中看到它,而您指定的是

com.microsoft.jdbc.sqlserver.SQLServerDriver

注意 jdbcsqlserver 包的顺序不同。这是建议完全不要使用 --driver 选项的原因之一。

关于java - SQOOP SQLSERVER 无法加载驱动程序 "appropriate connection manager is not being set",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597328/

相关文章:

java - Hibernate 模板更新 hql 中不断出现错误

java - 来自点数组列表的段长度 --Java

sql - SQL Server 中的文本/字符串分析

java - 如何将 "01/30/2018 02:29:23 PM"转换为smalldatetime格式?我在我的应用程序中使用 MSSQL,并且该列是smalldatetime 格式

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException :

运行 NLTK StanfordParser 时 Java 命令失败

java - JUnit 假设失败 理论

sql-server - 检查 SQL Server 2005 XML 字段是否为空

c# - 来自 C# 的多个更新和插入

Java:插入表日期时间数据