记一个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
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
THE END
二维码
共有 0 条评论