为什么使用Windows身份验证从Sqoop连接到SQL Server失败?

时间:2015-07-23 18:00:06

标签: sql-server odbc sqoop

我正在使用Sqoop使用JDBC-ODBC桥从SQL Server导入数据,其中ODBC桥连接到SQL Server。

sqoop eval工作正常。

然而,sqoop导入失败。

命令:

sqoop import --query "select * from table where \$CONDITIONS" --connect jdbc:odbc:test --driver sun.jdbc.odbc.JdbcOdbcDriver --connection-manager org.apache.sqoop.manager.GenericJdbcManager --target-dir /to/hdfs --split-by table_name

错误:

  

ERROR manager.SqlManager:执行语句时出错:java.sql.SQLException:[unixODBC] [Driver Manager]驱动程序不支持此功能   java.sql.SQLException:[unixODBC] [Driver Manager]驱动程序不支持此功能

     

at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
  at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
  at sun.jdbc.odbc.JdbcOdbc.SQLGetStmtOption(JdbcOdbc.java:4423)
  at sun.jdbc.odbc.JdbcOdbcStatement.getStmtOption(JdbcOdbcStatement.java:1207)
  at sun.jdbc.odbc.JdbcOdbcStatement.getMaxRows(JdbcOdbcStatement.java:641)
  at sun.jdbc.odbc.JdbcOdbcStatement.setFetchSize(JdbcOdbcStatement.java:821)
  在org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:740)
  在org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:759)
  在org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:269)
  在org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:240)
  at org.apache.sqoop.manager.SqlManager.getColumnTypesForQuery(SqlManager.java:233)
  at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:304)
  at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1833)
  在org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1645)
  在org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:96)
  在org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
  在org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
  在org.apache.sqoop.Sqoop.run(Sqoop.java:143)
  在org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
  在org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
  在org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
  在org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
  在org.apache.sqoop.Sqoop.main(Sqoop.java:236)

1 个答案:

答案 0 :(得分:0)

我最好的猜测是,由于某种原因,JDBC驱动程序sun.jdbc.odbc.JdbcOdbcDriver不接受Sqoop在传输数据时发出的自定义提取大小(方法setFetchSize())。您使用JDBC-ODBC桥并且不直接与Microsoft SQL服务器通信的任何原因?

您可以使用--fetch-size来查看某些非默认值是否有效。