报错:
2023-12-20 11:43:35,533 INFO mapreduce.Job: map 25% reduce 0%
2023-12-20 11:43:38,608 INFO mapreduce.Job: Task Id : attempt_1703031779275_0015_m_000001_1, Status : FAILED
Error: java.io.IOException: Can't export data, please check failed map task logs
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:799)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
Caused by: java.lang.RuntimeException: Can't parse input data: '王五'
at t_user2.__loadFromFields(t_user2.java:292)
at t_user2.parse(t_user2.java:230)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83)
... 10 more
Caused by: java.lang.NumberFormatException: For input string: "王五"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at t_user2.__loadFromFields(t_user2.java:284)
... 12 more
2023-12-20 11:43:43,738 INFO mapreduce.Job: Task Id : attempt_1703031779275_0015_m_000002_1, Status : FAILED
Error: java.io.IOException: Can't export data, please check failed map task logs
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:799)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
Caused by: java.lang.RuntimeException: Can't parse input data: '张三'
at t_user2.__loadFromFields(t_user2.java:292)
at t_user2.parse(t_user2.java:230)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83)
... 10 more
Caused by: java.lang.NumberFormatException: For input string: "张三"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at t_user2.__loadFromFields(t_user2.java:284)
... 12 more
2023-12-20 11:43:47,802 INFO mapreduce.Job: Task Id : attempt_1703031779275_0015_m_000000_1, Status : FAILED
Error: java.io.IOException: Can't export data, please check failed map task logs
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:799)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
Caused by: java.lang.RuntimeException: Can't parse input data: '李四'
at t_user2.__loadFromFields(t_user2.java:292)
at t_user2.parse(t_user2.java:230)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83)
... 10 more
Caused by: java.lang.NumberFormatException: For input string: "李四"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at t_user2.__loadFromFields(t_user2.java:284)
... 12 more
原因:
t_user2
表有三个字段:id
和 age
是整数类型,而 name
是字符串类型。
根据之前的错误信息,看起来在 t_user2
类的 __loadFromFields
方法中,尝试将字符串 "张三" 解析为整数时发生了 NumberFormatException
。这是因为 name
字段是字符串类型,不应该在 __loadFromFields
方法中被解析为整数。
解决:
-
排除
name
字段: 在 Sqoop 导出命令中使用--columns
选项指定要导出的列,排除name
字段。sqoop export --connect <your_connection_string> \ --username <your_username> \ --password <your_password> \ --export-dir <your_export_directory> \ --input-fields-terminated-by ',' \ --table <your_table> \ --columns "id,age" \ --input-null-string '' \ --input-null-non-string '0'
-
指定字段映射: 在 Sqoop 导出命令中使用
--map-column-java
选项明确指定字段映射。sqoop export --connect <your_connection_string> \ --username <your_username> \ --password <your_password> \ --export-dir <your_export_directory> \ --input-fields-terminated-by ',' \ --table <your_table> \ --map-column-java "id=Integer,name=String,age=Integer" \ --input-null-string '' \ --input-null-non-string '0'
-
这样 Sqoop 将知道如何正确地映射数据类型,避免将字符串字段解析为整数。