1.java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver
原因:[SQOOP_HOME]/lib/
下缺少mysql驱动包
2.Caused by: java.lang.RuntimeException: Can’t parse input data: '800 1 620025 塑料油箱 ';java.io.IOException: Can’t export data, please check failed map task logs
原因:此问题出现在hive导出到关系数据库,原因为hive表的存储格式问题。
sqoop无法导出parquet文件或者ORC格式到关系型数据库,否则会报错,修改方案:
方式1:原表改为普通的textfile存储类型的表。
:方式2:把要导出的数据存到一个临时表,然后再把数据导出。
3.sqoop从mysql导入到hive的时候,mysql中的null值,导入到hive之后变为null字符串
sqoop命令上加入
–null-non-string ‘\N’
–null-string ‘\N’ \
一定要是\N,双反斜杠这种会把mysql中的null值转换成hive中的NULL值,大写的NULL在hive中就对应空值。
4.sqoop 导入过程中报错
ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLException: The connection property ‘zeroDateTimeBehavior’ acceptable values are: ‘CONVERT_TO_NULL’, ‘EXCEPTION’ or ‘ROUND’. The value ‘convertToNull’ is not acceptable.
原因:
上面的报错信息可以得出zeroDateTimeBehavior可以接受的值是CONVERT_TO_NULL’, ‘EXCEPTION’ or ‘ROUND’
解决办法:在connect参数中指定一下zeroDateTimeBehavior值类型
--connect jdbc:mysql://xxxxx:3306/ry_bi?zeroDateTimeBehavior=CONVERT_TO_NULL
5.sqoop从mysql导入hive数据,时间数据全都多了13个小时
问题原因:mysql时区问题
排查:mysql>show variables like ‘%time_zone%’;
用于查看mysql中的时区 可以看到time_zone | SYSTEM,
mysql中的时区是随系统时区,这时如果你的系统时区显示CST时区,就有可能会出现这种情况,因为CST时区可以同时代表四个时区
两种解决方法:
a、mysql>set global time_zone='+8:00';
直接设置mysql全局的时区为东八区,这种方法是要对全局影响的
b、jdbc:mysql://{0}:3306/{1}?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone='Asia/Shanghai'
在sqoop通过jdbc连接数据库的时候加上时区限制,这种方法只对当前会话生效
6.ERROR sqoop.Sqoop: Got exception running Sqoop: org.kitesdk.data.DatasetNotFoundException: Descriptor location does not exist: hdfs://XXX/.metadata
原因:此报错多为从hive导出到关系型数据库导致。原因为hive表为parquet格式。需要
添加--hcatalog
参数
--hcatalog-database hive库名 \
--hcatalog-table hive表名 \