Sqoop常见报错及解决方式

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表名 \
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清平乐的技术博客

你的鼓励是我最大创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值