java - SQOOP 导出失败

标签 java hdfs sqoop

我正在尝试将表从 HDFS 导出到 SQOOP,但出现 java 异常。 我正在使用的查询如下:

sqoop export --connect jdbc:mysql://172.31.54.174/Database --driver com.mysql.jdbc.Driver --username user --password userpassword --table accounts --export-dir /user/pri/accounts

执行此查询时出现以下错误:

17/03/29 07:54:26 INFO mapreduce.Job:  map 0% reduce 0%
17/03/29 07:54:30 INFO mapreduce.Job: Task Id : attempt_1489328678238_4886_m_000002_0, Status : FAILED
Error: java.io.IOException: Can't export data, please check failed map task logs
        at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112)
        at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
        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$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
Caused by: java.lang.RuntimeException: Can't parse input data: '\N'
        at accounts.__loadFromFields(accounts.java:691)
        at accounts.parse(accounts.java:584)
        at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83)
        ... 10 more
Caused by: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
        at java.sql.Timestamp.valueOf(Timestamp.java:204)
        at accounts.__loadFromFields(accounts.java:643)
        ... 12 more

我导出的文件包含以下数据:

1,2008-10-23 16:05:05.0,\N,Donald,Becton,2275 Washburn Street,Oakland,CA,94660,5100032418,2014-03-18 13:29:47.0,2014-03-18 13:29:47.0

2,2008-11-12 03:00:01.0,\N,Donna,Jones,3885 Elliott Street,San Francisco,CA,94171,4150835799,2014-03-18 13:29:47.0,2014-03-18 13:29:47.0 

我还创建了表accounts,其结构如下:

+----------------+-------------+-----+-----+---------+--------+ |领域|类型 |空 |关键|默认|额外 | +----------------+-------------+------+-----+---------+--------+ | acct_num | varchar(20) | varchar(20)否 |优先原则 | | | | acct_create_dt |日期时间 |否 | |空| | | acc_close_dt |日期时间 |是 | |空| | |名字 | varchar(20) | varchar(20)否 | |空| | |姓氏 | varchar(20) | varchar(20)否 | |空 | | |地址 | varchar(30) | varchar(30)否 | |空| | |城市 | varchar(20) | varchar(20)否 | |空| | |状态| varchar(20) | varchar(20)否 | |空| | |邮政编码 | varchar(20) | varchar(20)否 | |空 | | |电话号码 | varchar(20) | varchar(20)是 | |空| | |创建|日期时间 |否 | |空| | |修改|日期时间 |否 | |空 | | +----------------+-------------+------+-----+---------+--------+

我还附上了错误的屏幕截图。 enter image description here

最佳答案

正如您从日志中看到的那样,“\N”就像转义字符,因此它不适合 varchar。我不明白您为什么要添加相同的字符。还指出了时间戳格式问题。如果您用于主键的任何列本身重复,还要检查现有数据。

关于java - SQOOP 导出失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43088162/

相关文章:

mysql - 错误 sqoop.Sqoop : Got exception running Sqoop: java. lang.RuntimeException : Could not load db driver class: com. mysql.jdbc.Driver

java - 与java8兼容的最低 hibernate 版本

带有隐藏 key 对的 Hadoop distcp 到 S3a

java - 使用 Java API 在 Hadoop 中移动文件?

hadoop - 如何为单元测试设置HDFS目录时间

hadoop - 如何通过sqoop将sql server中的表导入到hdfs

java - Eclipse Luna 在 Java 调试中挂起

java - 后备默认意图只能匹配 1 个以上的单词

java - 将 List<Subclass> 传递给需要 List<SuperClass> 的方法

hadoop - Oozie工作流程中的Sqoop操作错误