關於sqoop導出數據到mysql導出一半的時候出錯的解決方案(:Data truncation: Data too long for column 'BORROWERNAME' at row 88)


最近在做數據遷移的工作,使用到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類型。我再檢查一下具體的字段長度。這里主要是想說解決這種問題的方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM