最近在做數據遷移的工作,使用到sqoop的導入和導出工具,具體操作是將hive當中的數據查詢出來插入到新的表當中,然后將數據又導入到mysql的關系型數據庫當中。
我將數據插入到hive將的一個新的表當中,但是那插入到一半的時候數據就插入不進去了,一直納悶怎么可能插入一半就插不進去了那,說來也奇怪。於是就去看yarn上面的相關的日志發現報了如下的錯誤:
2018-09-10 08:28:21,009 INFO [IPC Server handler 14 on 60348] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Diagnostics report from attempt_1536298905044_0080_m_000001_0: Error: java.io.IOException: Can't export data, please check failed map task logs at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:122) 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: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.io.IOException: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'BORROWERNAME' at row 88 at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.write(AsyncSqlRecordWriter.java:233) at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.write(AsyncSqlRecordWriter.java:46) at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:664) at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89) at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112) at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:90) ... 10 more
從上面的報錯肯定是在數據插入到mysql當中的時候的字段太長,數據庫的長度太短造成的。但是我原來的數據類型是varchar(100) 存一個名字的長度足夠了啊。怎么就插入不進去了,於是我將長度再調大一點,發現還是不行。
那我只能改數據類型了,於是我將之前的數據類型由原來varchar(100)改為了text類型。然后再去執行sqoop的導出的時候,這個時候就可以了。所以遇到這種問題。處理的方式主要兩種吧:
(1)檢查數據的長度;
(2)改數據的字段類型。


至於為什么要改成text類型。我再檢查一下具體的字段長度。這里主要是想說解決這種問題的方法。
