踩坑——Sqoop报错ERROR tool.ExportTool: Error during export

@羲凡——只为了更好的活着

踩坑——Sqoop报错ERROR tool.ExportTool: Error during export

控制台打印的报错是

19/04/19 20:17:09 ERROR mapreduce.ExportJobBase: Export job failed!
19/04/19 20:17:09 ERROR tool.ExportTool: Error during export: 
Export job failed!
	at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:445)
	at org.apache.sqoop.manager.MySQLManager.upsertTable(MySQLManager.java:145)
	at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:73)
	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)

画龙点睛遇到这个报错说明你的mysql和hive的字段不对应或者数据格式有出入
解决思路:
第一步:完整的检查mysql和hive表的结构(字段名称和数据类型)是否一致。
第二步:查看数据有没有导入?如果数据没有导入,请在检查第一步操作,可以将mysql和hive中的时间类型都改成string或varchar类型试一下。如果有导入,但是导入的数据不全或者不对。说明肯定是你的数据类型和实际的数据不一致。下面分两种情况。详见以下三步。
第三步:在mysql到hive中,请务必检查你的数据中是否包含hive建表默认的换行符 \n(LINES TERMINATED BY '\n’)。如果有,则sqoop语句中加上 hive-delims-replacement 或者 hive-drop-import-delims,如下代码

#!/bin/bash
/usr/local/package/sqoop-1.4.7.bin/bin/sqoop import \
--connect jdbc:mysql://ip:3306/mysql_DB \
--username root \
--password 1q2w3e4r \
--table mysql_Table \
--delete-target-dir \
--hive-delims-replacement , \
--hive-import \
--hive-overwrite \
--hive-database hive_DB \
--hive-table hive_Table \
--hive-partition-key ymday \
--hive-partition-value 20190419 \
--fields-terminated-by '\t' \
-m 1

第四步:在mysql到hive中,请务必检查你的数据中是否包含hive建表常用的字段分隔符 \t(FIELDS TERMINATED BY '\t’)。如果有,则sqoop语句中 fields-terminated-by 参数不能用 \t,代码如下图
踩坑——Sqoop报错ERROR tool.ExportTool: Error during export_第1张图片
第五步:在hive到hive中,如果有很多空列,有时也会报如上错误,则sqoop语句中加上 input-null-stringinput-null-non-string,如下代码
切记^A,在linux的vi中用Ctrl+v 和Ctrl+a 生成,不能直接拷贝下面的^A
切记^A,在linux的vi中用Ctrl+v 和Ctrl+a 生成,不能直接拷贝下面的^A
切记^A,在linux的vi中用Ctrl+v 和Ctrl+a 生成,不能直接拷贝下面的^A

#!/bin/bash
/usr/local/package/sqoop-1.4.7.bin/bin/sqoop export \
--connect "jdbc:mysql://ip:3306/report_db?useUnicode=true&characterEncoding=utf-8" \
--username root \
--password 1q2w3e4r \
--table mysql_table \
--columns name,age \
--update-key name \
--update-mode allowinsert \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
--export-dir "/hive/warehouse/dw_db.db/hive_table/ymday=20190419/*" \
--input-fields-terminated-by '^A' \
-m 1

====================================================================

@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流

你可能感兴趣的:(ETL)