ERROR tool.ExportTool: Error during export: Export job failed!錯誤解析


在使用sqoop導出數據的時候出現了這種報錯。

20/08/27 15:03:05 ERROR tool.ExportTool: Error during export: 
Export job failed!
	at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:439)
	at org.apache.sqoop.manager.SqlManager.exportTable(SqlManager.java:931)
	at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:80)
	at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:99)
	at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
	at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
	at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
	at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
	at org.apache.sqoop.Sqoop.main(Sqoop.java:252)

sqoop的shell命令是這樣的

sqoop export \
--connect jdbc:mysql://cdh00:3306/airquality \
--username root \
--password root \
--table co \
--export-dir hdfs://cdh01:8020/user/hive/warehouse/co \
--input-fields-terminated-by '\001' \

這里的錯誤就是經典的hive和mysql的表結構不對應,有可能你的實際情況和我不一樣,但是按照這個思路去檢查會很輕松找到你的問題根源。
這個問題是sqoop把你的數據往mysql中塞的時候格式不符,他就會返回這個錯誤。處理方式首先就應該檢查兩個表結構是否一致。
hive表結構查詢

desc [表名];

在檢查后我發現兩個表結構是完全一致的,也有可能是hive的分隔符弄錯了(–input-fields-terminated-by ‘\001’),檢查后也沒有問題,hive中確實使用默認的’\001’作為分隔符,那為什么會報錯嘞?

除了hive表結構之外,我們再檢查一下hive的數據,在hdfs/user/hive/warehouse/co中,可以在linux中hadoop fs -cat /user/hive/warehouse/co查看,為了方便我這里選擇在windows中下載查看。
數據節選

201501122002A\N2.105

//我的數據除了前兩條是string,后面都是double類型。
可以看到分隔符確實是"\001",但是double數據中有一個突兀的"\N"。原來是因為hive中的null值默認是按照字符串"\N"存儲的,所以在獲取數據時出現字符串"\N",而"\N"是字符串格式不符合double類型導致報錯。

這里有兩種處理方法,一種是將表結構統一改成varchar類型,但是這樣"\N"就按照字符串存入了,不方便處理。所以加上兩條參數–input-null-string和–input-null-non-string,在sqoop遇到"\N"后按照null進行插入處理。
修改后的sqoop命令

sqoop export \
--connect jdbc:mysql://cdh00:3306/airquality \
--username root \
--password root \
--table co \
--export-dir hdfs://cdh01:8020/user/hive/warehouse/co \
--input-fields-terminated-by '\001' \
--input-null-string '\\N' \
--input-null-non-string '\\N'


免責聲明!

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



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