sqoop使用jdts驱动程序从hdfs导出到sqlserver2005失败

lb3vh1jj  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(327)

我正在尝试使用sqoop将数据从hdfs文本文件导出到sqlserver。当我有多行要插入时,它会引发以下异常:

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

我检查了数据是否不一致,没有发现任何奇怪的地方。
我想知道司机是否得到支持?

00jrzges

00jrzges1#

问题是由sqoop/jtds使用逗号分隔的值列表将多个insert语句分组到1中的默认方式引起的。这种方法与SQLServer2005不兼容。为了解决这个问题,我通过提供 --batch 参数。
SQLServer2008支持sqoop/jtds将多个insert语句分组到1中的默认方式。
另外,当我使用mssql驱动程序尝试同样的事情(没有--batch参数)时,一切都正常。不确定mssqldriver和sqoop如何协同工作以确保与sqlserver2005兼容。

相关问题