关于sqoop增量导⼊过程中,⽂件合并遇到的问题。
今天在多sqoop的增量导⼊操作,遇到下⾯这个问题(报错如下):
2019-01-1214:20:54,332 FATAL [IPC Server handler 0 on 38807] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1546053074766_0445_m_000000_0 - exited :
java.lang.RuntimeException: Can't parse input data: ' sunt in culpa qu'
at FRONTBANK_INCREAT_TABLE.__loadFromFields(FRONTBANK_INCREAT_TABLE.java:321)
at FRONTBANK_INCREAT_TABLE.parse(FRONTBANK_INCREAT_TABLE.java:259)
at org.apache.sqoop.mapreduce.MergeTextMapper.map(MergeTextMapper.java:53)
java valueofat org.apache.sqoop.mapreduce.MergeTextMapper.map(MergeTextMapper.java:34)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:793)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.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:1917)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
at java.sql.Timestamp.valueOf(Timestamp.java:235)
at FRONTBANK_INCREAT_TABLE.__loadFromFields(FRONTBANK_INCREAT_TABLE.java:318)
... 11 more
看到上⾯这个错误,⼀定会时间的问题,其实不然,这就牵扯到sqoop导⼊数据的注意事项。我们知道在sqoop导⼊数据的时候是按照某个特定的分割符号进⾏分割的。
在这⾥我是按照逗号去分割每⼀⾏的字段。当这⼀⾏的数据更新之后我们按照更新时间对数据进⾏进⾏新增,更新操作(这⾥注意不能做删除操作)这个错误是在将增量数据导⼊进来之后,和原始的数据做merge操作的时候出现的,也就是说数据在更新的时候出现的(数据错位)。下⾯分析⼀下这个错误:
这⾥有⼀个逗号,当好我的默认分割符号是逗号,也就是在检查完这⼀⾏数据是更新的数据,然后按照⼀个⼀个字段进⾏匹配的时候,突然将时间赋值给这个字符串的时候就出现问题了
所以才会报 Caused by: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff] 也就是匹配错误的意思。
所以在sqoop导⼊数据的时候分割符号是很重要(sqoop的分隔符是⼀个头疼的事情。解决⽅法就是更换分隔符)
⾄此问题得到解决

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。