使用jdts驱动程序从hdfs导出到SQL Server 2005的Sqoop失败

时间:2014-01-10 21:20:15

标签: sql-server hadoop sqoop jtds

我正在尝试使用sqoop将数据从hdfs文本文件导出到SQL Server。如果我要插入多行,则抛出以下异常:

java.io.IOException: java.sql.SQLException: Incorrect syntax near ','.
    at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.close(AsyncSqlRecordWriter.java:192)
    at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.close(MapTask.java:567)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:675)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)
Caused by: java.sql.SQLException: Incorrect syntax near ','.
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResul

我已经检查了数据的不一致性,我找不到任何奇怪的东西。

我想知道驱动程序是否支持?

1 个答案:

答案 0 :(得分:1)

问题是由于默认方式sqoop / jtds使用逗号分隔的值列表将多个insert语句分组为1。这种方法与sqlserver 2005不兼容。为了解决这个问题,我通过提供--batch参数启用了jdbc-batch插入。

sqlserver 2008支持sqoop / jtds将多个insert语句组合为1的默认方式。

另外,当我使用ms-sql驱动程序尝试相同的事情(没有--batch参数)时一切正常。不确定ms-sql-driver和sqoop如何协同工作以确保与sql server 2005的兼容性。