​​记一个Datax现存问题!

  • A+
所属分类:SQL技巧

​​记一个Datax现存问题!

​​记一个Datax现存问题!

目录

复现

解决

原理

增补

复现

docker run --name datax-issue -p 27017:27017 -d mongo:4.0.4  docker exec -it datax-issue /bin/bash  mongo 
use datax  db.getCollection("gps").insert( {     longitude: 34.9016151428223,     latitude: NaN } ); 
wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz  tar xf datax.tar.gz && cd datax  vim job/job.json 
{     "job": {         "setting": {             "speed": {                 "channel": 1             }         },         "content": [             {                 "reader": {                     "name": "mongodbreader",                     "parameter": {                         "address": [                             "127.0.0.1:27017"                         ],                         "dbName": "datax",                         "collectionName": "gps",                         "column": [                             {                                 "name": "longitude",                                 "type": "double"                             },                             {                                 "name": "latitude",                                 "type": "double"                             }                         ]                     }                 },                 "writer": {                     "name": "streamwriter",                     "parameter": {                         "print": true                     }                 }             }         ]     } } 
python bin/datax.py job/job.json 
com.alibaba.datax.common.exception.DataXException: Code:[Framework-13], Description:[DataX插件运行时出错, 具体原因请参看DataX运行结束时的错误诊断信息 .].  - java.lang.NumberFormatException     at java.math.BigDecimal.<init>(BigDecimal.java:497)     at java.math.BigDecimal.<init>(BigDecimal.java:383)     at java.math.BigDecimal.<init>(BigDecimal.java:809)     at com.alibaba.datax.common.element.DoubleColumn.<init>(DoubleColumn.java:30)     at com.alibaba.datax.plugin.reader.mongodbreader.MongoDBReader$Task.startRead(MongoDBReader.java:128)     at com.alibaba.datax.core.taskgroup.runner.ReaderRunner.run(ReaderRunner.java:57)     at java.lang.Thread.run(Thread.java:748) 

解决

git clone https://github.com/alibaba/DataX.git && cd DataX  vim mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/MongoDBReader.java 
//TODO deal with Double.isNaN() if(Double.isNaN((Double) tempCol)) {     record.addColumn(new StringColumn(null)); } else {     record.addColumn(new DoubleColumn((Double) tempCol)); } 
mvn -U clean package assembly:assembly -Dmaven.test.skip=true 
  • 然后将这里编译生成的mongodbreader-0.0.1-SNAPSHOT.jar替换下载包中相应*.jar
python bin/datax.py job/job.json 
34.9016151428223    null 任务启动时刻                    : 2020-09-25 09:52:40 任务结束时刻                    : 2020-09-25 09:52:51 任务总计耗时                    :                 10s 任务平均流量                    :                1B/s 记录写入速度                    :              0rec/s 读出记录总数                    :                   1 读写失败总数                    :                   0 

原理

  • JShell (Java 9 REPL Read Eval Print Loop) = Java 9新增的一个交互式的编程环境工具
/Library/Java/JavaVirtualMachines/jdk-11.0.8.jdk/Contents/Home/bin/jshell |  Welcome to JShell -- Version 11.0.8 |  For an introduction type: /help intro  jshell> double ZERO = 0; ZERO ==> 0.0  jshell> ZERO / ZERO; $2 ==> NaN  jshell> Math.sqrt(-1); $3 ==> NaN  jshell> /exit |  Goodbye 

增补

  • 问题1: Double无法转换成Integer错误
// mongodbreader/src/main/java/com/alibaba/datax/plugin/reader/mongodbreader/util/CollectionSplitUtil.java -       int docCount = result.getInteger("count"); +       int docCount = result.getDouble("count").intValue(); 
  • 问题2: job执行时卡住不动且无报错
// channel 配置成1 根本原因待定位 "channel": 1 
  • 问题3: 保持服务器上任务持续执行
sudo apt install -y screen  screen -S ots  cd ~/datax  python bin/datax.py job/local2ots.json // 接着关闭客户端即可  screen -r ots // 此时可以恢复终端任务 

首先是安装dataX,安装非常简单,只需下载对应的压缩包即可。

下载地址:https://github.com/alibaba/DataX

第一个错误:命令提示符界面出现出现乱码

解决方法:

可以在cmd中输入: CHCP 65001 (切换为UTP8编码-65001 (UTF-8)),然后进行后续操作。

第二个错误:print的问题

  File "datax.py", line 114     print readerRef           ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print(readerRef)? 

切换版本

D:\Users\LENOVO>python --version Python 3.8.2 

D:\java\datax\bin>python --version Python 2.7.18 

第三个问题:连接mysql

2020-10-28 08:02:46.914 [job-0] WARN  DBUtil - test connection of [jdbc:mysql://localhost:3306/ssm] failed, for Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络 环境).].  -  具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.. 2020-10-28 08:02:46.918 [job-0] ERROR RetryUtil - Exception when calling callable, 异常Msg:DataX无法连接对应的数据库,可能原因是:1) 配置的ip/port/database/jdbc错误,无法连接。2) 配置的username/password错误,鉴权失败。请和DBA确认该数据库的 连接信息是否正确。 java.lang.Exception: DataX无法连接对应的数据库,可能原因是:1) 配置的ip/port/database/jdbc错误,无法连接。2) 配置的username/password错误,鉴权失败。请和DBA确认该数据库的连接信息是否正确。         at com.alibaba.datax.plugin.rdbms.util.DBUtil$2.call(DBUtil.java:71) ~[plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]         at com.alibaba.datax.plugin.rdbms.util.DBUtil$2.call(DBUtil.java:51) ~[plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]         at com.alibaba.datax.common.util.RetryUtil$Retry.call(RetryUtil.java:164) ~[datax-common-0.0.1-SNAPSHOT.jar:na]         at com.alibaba.datax.common.util.RetryUtil$Retry.doRetry(RetryUtil.java:111) ~[datax-common-0.0.1-SNAPSHOT.jar:na] 

解决方法:
查看MySQL驱动包
把mysql-connector-java-5.1.34.jar 修改为
mysql-connector-java-8.0.18.jar
添加?serverTimezone=UTC

jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC 

完美结果:

020-10-28 08:19:36.780 [job-0] INFO  OriginalConfPretreatmentUtil - Available jdbcUrl:jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&rewriteBatchedStatements=true. 2020-10-28 08:19:36.836 [job-0] INFO  OriginalConfPretreatmentUtil - table:[menu] has columns:[id,name,pid]. 2020-10-28 08:19:36.900 [job-0] INFO  JobContainer - jobContainer starts to do prepare ... 2020-10-28 08:19:36.900 [job-0] INFO  JobContainer - DataX Reader.Job [mysqlreader] do prepare work . 2020-10-28 08:19:36.902 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] do prepare work . 2020-10-28 08:19:36.906 [job-0] INFO  JobContainer - jobContainer starts to do split ... 2020-10-28 08:19:36.907 [job-0] INFO  JobContainer - Job set Channel-Number to 3 channels. 2020-10-28 08:19:36.936 [job-0] INFO  SingleTableSplitUtil - split pk [sql=SELECT MIN(id),MAX(id) FROM menu] is running... 

第四个错误 mysql2mysql

首先也要更新驱动

2020-10-28 09:59:52.876 [job-0] ERROR RetryUtil - Exception when calling callable, 即将尝试执行第1次重试.本次重试计划等待[1000]ms,实际等待[1001]ms, 异常Msg:[Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).].  -  具体错误信息为:java.sql.SQLException: No suitable driver found for ["jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC&useUnicode=true&characterEncoding=gbk"]&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&rewriteBatchedStatements=true] 

                        "jdbcUrl": [ 			    "jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8" 			] 

修改为

                        "jdbcUrl": "jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC&useUnicode=true&chara

 

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

​​记一个Datax现存问题!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

  • 我的微信
  • weinxin
  • 我的知识星球
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: