美文网首页
记一个Datax现存问题

记一个Datax现存问题

作者: 诺之林 | 来源:发表于2020-09-25 10:55 被阅读0次

目录

复现

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现存问题

    目录 复现[#%E5%A4%8D%E7%8E%B0] 解决[#%E8%A7%A3%E5%86%B3] 原理[#%E...

  • DataX添加告警功能

    前言 公司的DataX已经用了2年多了,性能以及基本功能上没有太大问题。但是有一个问题一直困扰着我,就是DataX...

  • DataX问题集锦

    从MySql中读数据时报错:Unable to load authentication plugin 'cachi...

  • CSV使用DataX导入数据库脏数据问题

    功能需求:网页上传csv文件通过DATAX导入数据库 环境:有主备文件同步导入工具:DataX 问题日志: 验证寻...

  • DataX Vs Sqoop

    DataX https://github.com/alibaba/DataX/wiki/DataX-all-dat...

  • 超声现存问题

    1、超三、超四、超五机器老旧,漏诊,误诊率增高,导致超声检查质量下降;同时因为图像显示模糊,反复扫查浪费时间,B超...

  • 读书|《浮生六记》之《闺房记乐》

    《浮生六记》原有六记,现存四记:《闺房记乐》、《闲情记趣》、《坎坷记愁》、《浪游记快》 读完《闺房记乐》,一个鲜活...

  • DataX 3.0简介 安装及使用

    DataX3.0离线同步工具介绍 一. DataX3.0概览 ​DataX 是一个异构数据源离线同步工具,致力于实...

  • 2020-03-18

    大数据技术之DataX 版本:V1.0 第1章概述 1.1 什么是DataX DataX是阿里巴巴开源的一个异构...

  • 如何用DataX自定义KuduWriter插件

    如何用DataX自定义KuduWriter之前,先了解一下什么是DataX,它能做什么事 DataX DataX ...

网友评论

      本文标题:记一个Datax现存问题

      本文链接:https://www.haomeiwen.com/subject/uhbxuktx.html