2014-01-10 48 views
0

我试图使用sqoop将数据从hdfs文本文件导出到SQL Server。当我有超过两行更将其插入抛出以下异常:使用jdts驱动程序从hdfs到SQL Server 2005的Sqoop导出失败

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 

我检查了不一致的数据,我不能找到什么奇怪的。

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

回答

0

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

默认方式sqoop/JTDS组多重插入语句到1与SQLSERVER支持2008

此外,当我使用MS-SQL驱动程序都工作得很好尝试同样的事情(不--batch参数) 。不知道如何ms-sql-driver和sqoop一起工作以确保与sql server 2005的兼容性。

相关问题