我下载了sqljdbc4.jar
。我正在从文件夹(存储jar的地方)调用sqoop
:
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
是否可能没有按照我认为的那样做?< / p>
答案 0 :(得分:3)
在绝大多数情况下,不需要使用参数--driver
,甚至更多会导致不良行为。我强烈建议完全从命令行中删除这个参数。查看Connectors vs Drivers博文,了解更多详情。
此外,您还要指定一个不存在的JDBC Driver类。正确的是:
com.microsoft.sqlserver.jdbc.SQLServerDriver
您可以在official docs中看到它,而您正在指定
com.microsoft.jdbc.sqlserver.SQLServerDriver
请注意jdbc
和sqlserver
个包的不同顺序。这是为什么建议不要使用--driver
选项的原因之一。
答案 1 :(得分:3)
您需要将sqljdbc4.jar
放入$SQOOP_HOME/lib
,并将sqoop-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需要export
或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
有时你必须指定端口,否则默认工作。希望你觉得它很有用。
答案 2 :(得分:2)
根据this sqoop documentation,-libjars
等通用选项必须在之前特定于工具的选项:
通用Hadoop命令行参数:
(必须在任何特定于工具的参数之前)
...
-libjars <comma separated list of jars>
指定要包含在类路径中的逗号分隔的jar文件。
答案 3 :(得分:0)
最近遇到了同样的问题。尽管文档说它会获取额外的 jar 文件。问题是我相信是从 Hadoop jar 命令行选项传播的。 -libjars
不是设置附加 jar 文件路径的可靠选项。
而是选择 HADOOP_CLASSPATH
选项来设置其他 jar 文件。
就我而言,我有多个不同版本的驱动程序 JAR,但是使用 -libjars
不能正确地为我提取文件。
为了解决这个问题,我指定了
export HADOOP_CLASSPATH=/$SQOOP_HOME/<path_to_driver>.jar
这可确保加载正确的 JAR 文件。