10

我下载了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)

更新

我更改了命令行以反映下面的评论,我得到了同样的错误:

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没有做我认为应该做的事情?

4

4 回答 4

3

您需要放入sqljdbc4.jar$SQOOP_HOME/lib添加或与tosqoop-1.4.4.jar一起使用的任何版本。sqljdbc4.jar$HADOOP_HOME/lib

我正在使用Hadoop-2.2.0,所以我把它放在$HADOOP_HOME/share/hadoop/common/lib目录中,并使用以下命令进行导入:

export HCAT_HOME=/home/Kuntal/BIG_DATA/hive-0.12.0/hcatalog

(有时HCatlog需要对 Hive 进行exported 或set.)

./sqoop-import --connect "jdbc:sqlserver://IP\INSTANCE;port=1433;username=USERNAME;password=PASSWORD;database=DATABASE_NAME" --table TABLE_NAME --target-dir hdfs://localhost:50315/sqoop --m 1

有时您必须指定端口,否则默认工作。希望你觉得它有用。

于 2014-02-26T07:48:03.787 回答
3

在绝大多数情况下,--driver不需要使用参数,甚至更多会导致不良行为。我强烈建议您完全从命令行中删除此参数。查看连接器与驱动程序博客文章了解更多详细信息。

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

com.microsoft.sqlserver.jdbc.SQLServerDriver

您可以在官方文档中看到它,而您正在指定

com.microsoft.jdbc.sqlserver.SQLServerDriver

jdbc注意和sqlserver包的不同顺序。--driver这是建议根本不使用该选项的原因之一。

于 2013-10-26T15:57:15.667 回答
2

根据这个 sqoop 文档,像这样的通用选项-libjars必须出现特定于工具的选项之前:

通用 Hadoop 命令行参数:(
必须在任何特定于工具的参数之前)
...
-libjars <comma separated list of jars> 指定以逗号分隔的 jar 文件以包含在类路径中。

于 2013-10-26T10:17:37.033 回答
0

最近遇到了同样的问题。即使文档说它会获取额外的 jar 文件。问题是我相信从 Hadoop jar 命令行选项传播。-libjars不是设置附加 jar 文件路径的可靠选项。相反,选择HADOOP_CLASSPATH设置其他 jar 文件的选项。

就我而言,我有多个不同版本的驱动程序 JAR,但使用-libjars并没有为我正确获取文件。

为了解决这个问题,我指定

export HADOOP_CLASSPATH=/$SQOOP_HOME/<path_to_driver>.jar

这可以确保加载正确的 JAR 文件。

于 2020-12-18T21:53:13.753 回答