sqoop从hive导入mysql时死锁问题

文章讲述了在将新数据源指标从Hive导入MySQL时遇到死锁问题,发现是由于指标键过长导致索引冲突。通过调整SQOOP的并行度设置为1以及考虑使用SparkSQL以提高数据传输稳定性来解决该问题。
摘要由CSDN通过智能技术生成

项目场景:

新来了一批数据源洗成指标要从hive导入到mysql中.生成的指标key是由数据源+产品编号+数据表名+维度的md5的前8位拼接而成.
例:指标key是baidu1001monthreportas55fef6ret 这样大约30个字符到45个字符之前不定.

问题描述

大约一次性导入10万条数据,数据在用sqoop从hive导到mysql时总是会报死锁问题.

Caused by: java.sql.SQLException: Deadlock found when trying to get lock; try restarting transaction

原因分析:

这个sqoop脚本之前一直是可以使用的,用这个脚本导出别的数据源的大数据量指标也是没有问题的.那么问题就出在这个数据源指标的key上.
我也尝试用其他方式去导出这部分数据,比如用sparksql写个脚本去抽取这部分数据,结果没有问题.
那么原因就出在sqoop上了,尝试去寻找了一下方法,sqoop脚本可以添加一些参数来限制数据传输的并行度.


解决方案:

–num-mappers 1 指定sqoop并行度为1

个人思考了一下原因,可是是指标key过长导致的这个问题.之前指标的key大约25个字符左右从来没出现过这个问题.过长的key导致mysql插入索引时大量数据写入一个索引下导致索引冲突引起的死锁,
之后会把sqoop脚本替换成sparksql写的脚本来完善数据传输的稳定性.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值