记录工作点滴,也希望能给看到帖子的朋友提供点思路.
问题描述:
使用python脚本定时执行sqoop任务,每次总有几个任务会失败,但是每次失败的又不一定一样.
报错的内容是导入数据时列类型不匹配.期待的是decimal,得到的是string.
根本原因:
原因是在写python脚本时有设置sqoop的workspace.多个任务的sqoop workspace设置的同一个.
每次失败的都不是同一个任务是因为这几个任务的前置依赖执行结束时间很接近,但执行结束先后顺序不固定.
我们几个不同的库中存在名字相同的表.通过查看sqoop源码发现,sqoop每次生成的mr编译的class会存放到sqoop workspace中,以表明命名.如果有相同名字的表格,而且两个任务的调度时间挨的很近,会造成生成的mr.jar还未执行就被替换掉了.
当被替换掉jar报的任务执行的时候,会根据名字加载到其他库同名表格生成的jar,造成了数据类型不匹配.
解决办法:
扫描二维码关注公众号,回复:
3484760 查看本文章
根据自己的实际情况,为每个类型的数据库(数据源库)设置不同的sqoop workspace.