Sqoop1.4.6导出数据到MySQL8.0时报NumberFormatException错误求助
Sqoop 1.4.6导出MySQL 8报错解决方案
根因说明
报错NumberFormatException: For input string: "Redington"是因为Sqoop获取的MySQL表字段顺序和HDFS中CSV文件的字段顺序不匹配,字符串类型的姓名被误映射到数值类型的id字段,触发类型转换失败。修改id为bigint无法解决问题,该故障和字段长度无关。
解决方案
- 显式指定字段匹配顺序
在导出命令中添加--columns参数,严格按照CSV的字段顺序声明表字段,强制匹配关系:
--columns id,first_name,last_name,email
- 修正JDBC连接参数适配MySQL 8
Sqoop 1.4.6默认的元数据读取逻辑不兼容MySQL 8,会导致字段顺序识别错误。在JDBC连接串中添加以下参数,保证能读取到正确的字段顺序:
jdbc:mysql://localhost:3306/school?useInformationSchema=true&serverTimezone=UTC
- 校验导出目录的文件
确认命令中--export-dir指定的/sqoop_data/school/目录下仅存放符合格式的CSV数据文件,删除_SUCCESS、临时文件等无关内容,避免Sqoop读取到异常数据。
修正后的完整命令
sqoop export \ --connect jdbc:mysql://localhost:3306/school?useInformationSchema=true&serverTimezone=UTC \ --username 你的数据库账号 --password 你的数据库密码 \ --table student \ --columns id,first_name,last_name,email \ --export-dir /sqoop_data/school/ \ --input-fields-terminated-by ","
如果以上操作执行后仍报错,检查Sqoop的lib目录下是否放置了MySQL 8.x版本的JDBC驱动包,驱动版本不兼容也会触发元数据读取异常。
内容的提问来源于stack exchange,提问作者bismi
相关产品推荐
相关产品推荐

