Sqoop 从 HDFS 导出到 MySQL

Sqoop export to MySQL from HDFS

我在 HDFS 中有 CSV 文件。内容如下

1,sam
2,ram
3,Tim,Ny
4,Jim,CA

现在我想将此文件导出到 MySQL table。 MySQL table 有以下列 id name city

我收到 sqoop 导出失败错误。

这是我正在使用的sqoop导出语句。

sqoop export --connect jdbc:mysql://xxxx/test --username xxxxx --password xxxxx --table test --export-dir /user/xxxxx/testing -m 1 --input-fields-terminated-by ',' --input-null-string '\n' --input-null-non-string '\n'

为什么我会收到此错误以及正确无误地完成导出的方法是什么。如果文件是 parquet 格式怎么办。

错误代码:

2017-03-20 15:32:37,388 ERROR [main] org.apache.sqoop.mapreduce.TextExportMapper: 2017-03-20 15:32:37,388 ERROR [main] org.apache.sqoop.mapreduce.TextExportMapper: Exception raised during data export 2017-03-20 15:32:37,388 ERROR [main] org.apache.sqoop.mapreduce.TextExportMapper: 2017-03-20 15:32:37,388 ERROR [main] org.apache.sqoop.mapreduce.TextExportMapper: Exception: java.lang.RuntimeException: Can't parse input data: 'sam' at test1.__loadFromFields(test1.java:335) at test1.parse(test1.java:268) at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:89) at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39) at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145) at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:164) 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:1693) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.util.NoSuchElementException at java.util.ArrayList$Itr.next(ArrayList.java:834) at test1.__loadFromFields(test1.java:330)

错误是由于前两行和后两行的架构不同造成的。

1,sam
2,ram
3,Tim,Ny
4,Jim,CA

Sqoop 在 samram 之后期待 ,。最后一列可能是空的,但 , 应该在那里。

这是您的 CSV 数据中的最后一列,因此它无法识别最后一列并以默认属性 mysql 结束该行并以错误结束

所以像这样创建 csv

1,山姆,

2,ram,

3,蒂姆,纽约

4,吉姆,CA

运行 按照 sqoop 导出命令

sqoop export --connect jdbc:mysql://localhost:3306/test --username xxxx --password xxxx --table test --export-dir stack/stack。 csv -m 1

谢谢