sqoop将oracle数据导入到hive报错:Error: java.io.IOException: SQLException in nextKeyValue

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


问题

sqoop将oracle数据导入到hive报错:Error: java.io.IOException: SQLException in nextKeyValue


提示:以下是本篇文章正文内容,下面案例可供参考

一、问题是什么导致的?

1、字段属性不匹配
2、日期格式问题
3、资源不足
错误截图:
在这里插入图片描述

二、验证问题

导入语句:

/export/servers/sqoop/bin/sqoop import \
--connect jdbc:oracle:thin:@192.168.xxx.xx:1521/zhuting \
--username root \
--password 123456 \
--target-dir  /data1/zhuting/db/ODS_R_PRO_PRODUCT/2022-06-09 \
--hive-drop-import-delims  \
--null-string '\\N' \
--null-non-string '\\N' \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by '\001' \
--query  "select SKUID,SKU,MAINSKU,NAME_CN,NAME_EN,COSTPRICE,PURPRICE,WEIGHT,PACKWEIGHT,PURUSERID,PURUSERNAME,DEVELOPUSERID,DEVELOPUSERNAME,FIRSTSUPPLIERID,FIRSTSUPPLIERNAME,WAITORDERNUM,BENUM,USERTIME,CHECKTIME,ORDERNUM,STATUS,KEYWORD_CN,
KEYWORD_EN,PREPACKID,PREPACKNAME,DESCR,QCDESCR,USER_ID,USERNAME,CATALOGUEID,CATALOGUENAME,PIC1,PIC2,PIC3,CUSTSTATUS_ID,CUSTSTATUS_NAME,PURDAY,ONEDAYNUM,TORTCLASS,DECLAREDPRICE,STOCKOUT_QTY,TBD_QTY,STORAGE_ID,STORAGE_NAME,
LOCATION_ID,LOCATION_NAME,INVENTORY,ALERTDAY,ALERTNUM,PURPRICE2,YESTERDAYSALES,DISABLEFLAG,ISABLESEE,ISABLETIME,LOCATION_BAK,FIRSTSUPPLIERLINK,NEWORDERSKUNUM,NEWBENUM,SEVEN_DAYS,THIRTY_DAYS,SIXTY_DAYS,NINTY_DAYS,
INVENTORY_TURNOVER,CUTPRICETIME,ONE_DAYS,TWO_DAYS,THREE_DAYS,FOURTEENTH_DAYS,TWENTYEIGHT_DAYS,DEVLINEABBR,ORIGINALSTATUS,SPECIMENTIME,QUALITY,FIFTEEN_DAYS,ISCUSTOMIZATION,CUSTOMIZATIONTIME,SUPPLYERID,SUPPLYERNAME,
DEVELOPUSERREALNAME,DEPRECIATEDAYS,PROPACKID,PROPACKNAME,OVERSEAS_INVENTORY,OFFERID_1688,SPECID,ACTUAL_LENGTH,ACTUAL_WIDTH,ACTUAL_HEIGHT,PRETEND_LENGTH,PRETEND_WIDTH,PRETENDL_HEIGHT,INITIAL_SORTING,ALIMINPURQTY,SORTING_MODE,
SORTINGQTY,INITIAL_SORTING_COST,WAREHOUSE_SORTING_COST,NPURPRICE,INITIAL_PURPRICE,PROFREIGHT,CSORTINGPRICE,SORTINGFEE,UPDATEFLAG,EXPRESSFLAG,DECNAME,SPECIDVALUE,ISFILE,LOGISTICS_STATUS,PROCUREMENT_STATUS,ENDECNAME from R_PRO_PRODUCT where 1=1 and \$CONDITIONS"

方法:
1、如果报错中有涉及到字段或者字段值的,就查看是否是字段属性不匹配
2、有时候是时间字段错误数据,mysql会报这种错,具体文章:https://www.freesion.com/article/7184430494/
3、我首先是在原oracle主库测试,使用部分字段,看能否导入,结果10个字段可以导入,但是多加一个11个字段导入失败,将第11个字段放在sql最前面,可以导入,排除字段问题,将第11个字段的值固定写为1,导入成功,判断是oracle数据库资源不够,让DBA查询oracle后台资源,表示磁盘利用率已达到100%,所以导入过程会失败,切换到oracle从库,同步的语句可以导入,所以根本原因是磁盘资源不足,要么优化程序,减少磁盘利用率,要么切换到其他备份数据库,不要使用主库,主库连接比较多,资源可能不够。参考文章:https://www.136.la/java/show-98705.html


总结

遇到问题可以从以下几方面来检查,一定要仔细查看报错日志,日志本身看不出问题,就从数据本身、数据结构、程序逻辑、集群资源等方面一一检查!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值