暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DATAX报错处理

IT那活儿 2024-05-13
1611
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!   

报错一
报错:java.lang.NumberFormatException: multiple points

1.1 故障描述

使用DATAX工具从oracle库同步10张表至oceanbase数据库。

工作原理:使用oraclereader读取插件从oracle库读取数据,通过oceanbasev10writer写插件将数据写入到oceanbase数据库。

写入数据时,DATAX日志报错:

java.lang.NumberFormatException: multiple points

1.2 问题分析

开始分析DATAX运行日志,通过下面的日志可以判断,DATAX已经连到oracle并开始准备往oceanbase写数据,说明json文件没有问题。

继续往下分析:

从第5行datax代码报错开始查看,发现是oceanbasev10writer\src\main\java\com\alibaba\datax\plugin\writer\oceanbasev10writer\task\ConcurrentTableWriterTask.java 包中有报错,打开oncurrentTableWriterTask的jar包。

查看136行的源代码:

观察上下文代码,Float.valueOf() 是用于截取有效位数,这段代码目的是要比较OceanBase的版本号是否>=2.1,进而将OBflag重置为ture。

查询当前oceanbase数据库的版本号是:

查询老版本oceanbase数据库的版本号是:

发现oceanbase数据库升级版本后,新版本version值中加入了字母和特殊字符从而导致版本判断失败,导致程序执行报错。

1.3 故障处理

当前使用的datax版本是v202205,查看最新的源码,发现版本判断部分的代码已经弃用,我们可以把136行版本判断的代码注释,不再进行版本判断直接开始操作。或者使用最新的datax版本替换旧版本。

替换jar包后,重新发起datax同步,datax日志显示不再判断version,程序会继续运行。

拓展:

源码中lastIndexOf()和Float.valueOf()的用法,以老版本为例,版本号:3.2.1,执行此处源码后得到结果如下:

新版本号:3.2.3.2 ,执行结果如下:


报错二

报错:使用Oceanbasev10Reader插件新功能readByPartition同步报错。

2.1 故障描述

Datax新版本Oceanbasev10Reader插件增加了一个新功能。

能名称:readByPartition。

功能描述:对分区表是否按照分区切分任务。和oracle的数据泵导出方式一样了,oracle数据泵导出分区表时同样是按照分区同时抽取数据,这样能极大提升数据抽取效率。

编写json开始测试,json格式如下:

"reader": {
  "name": "oceanbasev10reader",
  "parameter": {
    "username": "USER1",
    "password": "PWD1",
    "column": ["*"],
    "readByPartition": "true",
    "connection": [
      {
  "jdbcUrl":[ "||_dsc_ob10_dsc_||obqf:qf||_dsc_ob10_dsc_||jdbc:oceanbase://1.1.1.1:8888/name"],
        "table": [
            "TABLE1"
         ]
      }
    ]
  }
}

发起同步后,却同步失败了。查看日志:

2.2 故障处理

发现源库和目标库已登录成功,在目标库已经执行了presql操作,说明登录部分是没有问题的。

源库的列查看部分也是正常的,问题出在读取分区部分。

查看源码:

问题很明显了,当前主机使用的DATAX版本和报错一中的版本是同一版本,也是由于版本判断前提过不去导致分区查询失败,进程不能继续推进导致。

处理方法:

  • 屏蔽版本判断部分的代码;

  • 在datax 官网下载最新tar包进行替换。


END


本文作者:辛志梁(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论