【解决问题的还得是看源码来得快】Datax脏数据配置问题解决

背景

        最近在用Datax进行数据测试,从sql server的数据输出到Doris,Doris安装在虚拟机上,只有3G内存,FE和BE同时安装在一起,由于内存过于小,在数据导入的时候想通过输出速率的方式解决问题,同时也解决脏数据限制配置的问题。

        脏数据限制会报错,如下图所示:

脏数据条数检查不通过,限制是[0]条,但实际上捕获了[1]条

        网上找了一下没有比较明确的文档,所以直接下载Datax的源码进行搜索。

排查过程

        源码中进行全文搜索可以发现是在com.alibaba.datax.core.util.ErrorRecordChecker#checkRecordLimit  中报了错误

 

        随着源码进行向上追溯,可以发现最终recordLimit 参数是在

com.alibaba.datax.core.util.ErrorRecordChecker#ErrorRecordChecker(com.alibaba.datax.common.util.Configuration)  中设置的

 public static final String DATAX_JOB_SETTING_ERRORLIMIT_RECORD = "job.setting.errorLimit.record";

 解决方案

        这个时候我们就能够知道,json配置文件中的record配置项就是脏数据的限制条件。

 完工。

### DataX脏数据的处理方法及解决方案 DataX在处理脏数据时,提供了多种模式和配置选项,以确保数据传输过程中能够有效识别、过滤和处理脏数据。以下是关于DataX脏数据处理的相关内容: #### 1. 脏数据定义与处理机制 在大量数据传输过程中,由于类型转换错误、格式不匹配等原因,可能会导致部分数据无法正常传输,这些数据被DataX认为是脏数据DataX可以实现对脏数据的精确过滤、识别、采集和展示,并提供多种处理模式[^1]。 #### 2. 配置脏数据处理方式 DataX支持通过配置文件来指定脏数据的处理方式。常见的配置项包括: - **`dirtyPath`**:指定脏数据的存储路径。例如,可以通过设置`dirtyPath`将脏数据写入到指定的文件中。 - **`maxDirtyCount`**:设置允许的最大脏数据数量。当脏数据数量超过此值时,任务会终止。 - **`writeMode`**:指定写入模式,例如覆盖或追加。 以下是一个示例配置文件片段,展示了如何配置脏数据处理: ```json { "setting": { "speed": { "channel": 5 }, "errorLimit": { "record": 100, "percentage": 0.01 } }, "dirtyPath": "/path/to/dirty/data" } ``` 上述配置中,`errorLimit`用于限制脏数据的数量或百分比,超出限制后任务将停止执行[^1]。 #### 3. 脏数据的过滤与预处理 为了避免脏数据的产生,可以在数据源端进行预处理。例如,通过SQL语句过滤掉不符合条件的数据。这种方法可以减少传输过程中的错误,从而提高性能[^2]。 #### 4. 容错机制与重试策略 DataX在设计上具备较强的容错能力,尤其是在3.0版本中,进一步完善了框架和插件的稳定性。它支持线程级别、进程级别(暂未开放)以及作业级别的多层次局部/全局重试机制,确保任务在遇到网络闪断、数据源不稳定等问题时仍能稳定运行[^3]。 #### 5. 数据转换功能 DataX还提供了丰富的数据转换功能,可以在数据传输过程中完成脱敏、补全、过滤等操作。此外,用户还可以通过自定义Groovy函数实现更复杂的数据转换逻辑,从而减少脏数据的产生。 ### 示例代码 以下是一个简单的DataX JSON配置示例,展示了如何配置脏数据路径和错误限制: ```json { "job": { "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "root", "password": "password", "column": ["id", "name"], "connection": [ { "jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/test"], "table": ["test_table"] } ] } }, "writer": { "name": "streamwriter", "parameter": { "print": true } } } ], "setting": { "errorLimit": { "record": 100, "percentage": 0.01 }, "dirtyPath": "/tmp/dirty_data" } } } ``` #### 注意事项 - 如果脏数据过多,可能导致内存溢出问题。此时可以通过增加内存分配或优化SQL查询来解决。 - 推荐在数据源端进行预处理,以减少传输过程中的错误。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值