Java SQOOP SQLSERVER 无法加载驱动程序“未设置适当的连接管理器”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19597328/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQOOP SQLSERVER Failed to load driver " appropriate connection manager is not being set"
提问by hba
I downloaded sqljdbc4.jar
. I'm invoking sqoop
like so from the folder (where the jar is stored):
我下载了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
sqoop list-tables --driver com.microsoft.jdbc.sqlserver.SQLServerDriver --connect jdbc:sqlserver://localhost:1433;user=me;password=myPassword; -libjars=./sqljdbc4.jar
I'm getting the following warning & error:
我收到以下警告和错误:
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 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)
UPDATE
更新
I changed the command line to reflect the comments below, I get the same error:
我更改了命令行以反映下面的注释,但出现相同的错误:
sqoop list-databases -libjars=<ABSOLUTE_PATH>/jars/sqljdbc4.jar --connect jdbc:sqlserver://localhost:1433;user=me;password=password
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)
When I look at the listing of sqljdbc4.jar
, I do see the class in that path... Is it possible that libjars option
isn't doing what I think it is supposed to do?
当我查看 的列表时sqljdbc4.jar
,我确实看到了该路径中的类......是否有可能libjars option
没有做我认为应该做的事情?
回答by Mark Rotteveel
According to this sqoop documentation, generic options like -libjars
must come beforetool-specific options:
根据此 sqoop 文档,通用选项-libjars
必须在特定于工具的选项之前出现:
Generic Hadoop command-line arguments:
(must preceed any tool-specific arguments)
...-libjars <comma separated list of jars>
specify comma separated jar files to include in the classpath.
通用 Hadoop 命令行参数:(
必须在任何特定于工具的参数之前)
...-libjars <comma separated list of jars>
指定要包含在类路径中的逗号分隔 jar 文件。
回答by Jarek Jarcec Cecho
In vast majority of cases using parameter --driver
is not required and even more will lead to an undesirable behaviour. I would strongly recommend dropping this argument entirely from your command line. Check out Connectors vs Driversblog post for more details.
在绝大多数情况下,--driver
不需要使用参数,甚至更多会导致不良行为。我强烈建议您完全从命令行中删除此参数。查看连接器与驱动程序博客文章了解更多详细信息。
Also in addition you are specifying a nonexistent JDBC Driver class. The correct one is:
此外,您还指定了一个不存在的 JDBC Driver 类。正确的一种是:
com.microsoft.sqlserver.jdbc.SQLServerDriver
You can see it in the official docs, whereas you are specifying
您可以在官方文档中看到它,而您正在指定
com.microsoft.jdbc.sqlserver.SQLServerDriver
Notice the different order of jdbc
and sqlserver
packages. This is one of the reasons why it's recommended to not use the --driver
option at all.
注意jdbc
和sqlserver
包的不同顺序。这是建议根本不使用该--driver
选项的原因之一。
回答by Kuntal-G
You need to put sqljdbc4.jar
in $SQOOP_HOME/lib
and also add sqoop-1.4.4.jar
or whatever version you are using along with sqljdbc4.jar
to $HADOOP_HOME/lib
.
你需要把sqljdbc4.jar
在$SQOOP_HOME/lib
,也可以添加sqoop-1.4.4.jar
或任何版本使用的是随sqljdbc4.jar
到$HADOOP_HOME/lib
。
I'm using Hadoop-2.2.0
, so i put it inside $HADOOP_HOME/share/hadoop/common/lib
directory, and use the following command to do the import:
我正在使用Hadoop-2.2.0
,所以我把它放在$HADOOP_HOME/share/hadoop/common/lib
目录中,并使用以下命令进行导入:
export HCAT_HOME=/home/Kuntal/BIG_DATA/hive-0.12.0/hcatalog
export HCAT_HOME=/home/Kuntal/BIG_DATA/hive-0.12.0/hcatalog
(sometimes HCatlog
of Hive needs to be export
ed or set
.)
(有时HCatlog
需要对 Hive 进行export
ed 或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
./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
Sometimes you have to specify the port, otherwise default works. Hope you find it useful.
有时您必须指定端口,否则默认工作。希望你觉得它有用。