FlinkX脏值处理

本文详细介绍了FlinkX在数据同步过程中如何处理脏值,包括配置实例、实现逻辑、脏值写入时机和脏值实例测试。脏值在写入数据时被识别和记录,通过DirtyDataManager进行管理,存储在HDFS上。测试展示了类型转换错误等脏值的捕获和存储方式。

FlinkX脏值处理

在大量数据的传输过程中,必定会由于各种原因导致很多数据传输报错(比如类型转换错误),这种数据DataX认为就是脏数据。

​ – by DataX

配置实例

"dirty": {
   
   
                "path": "/tmp",
                "hadoopConfig": {
   
   
                    "fs.default.name": "hdfs://flinkhadoop:8020",
                    "dfs.nameservices": "ns1",
                    "dfs.ha.namenodes.ns1": "flinkhadoop",
                    "dfs.namenode.rpc-address.ns1.nn1": "hdfs://flinkhadoop:8020",
                    "dfs.ha.automatic-failover.enabled": "true",
                    "dfs.client.failover.proxy.provider.ns1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
                    "fs.hdfs.impl.disable.cache": "true"
                }
            }

我这里的hdfs是一个单机。

实现逻辑

FlinkX的脏值处理逻辑是放在写入数据过程中的。按照脏值的定义,在读取过程中,能读取进来的都是正常的值,但是在写入过程中,以目标源的标准,可能读取的值是存在瑕疵的,所以是脏值。

在脏值处理的过程中,脏值处理器的作用肯定是首当其冲,我们先看一下DirtyManager的定义和初始化过程:

DirtyDataManager

全局视角:

image-20200524170435339

创建
public DirtyDataManager(String path, Map<String, Object> configMap, String[] fieldNames, String jobId) {
   
   
        this.fieldNames = fieldNames;
        location = path + "/" + UUID.randomUUID() + ".txt";
        this.config = configMap;
        this.jobId = jobId;
    }
  1. 可以看出来 location 是根据我们配置的路径+一个uuid生成的txt,其实这样在查看起来的时候不是很方便。
初始化
public void open() {
   
   
        try {
   
   
            FileSystem fs = FileSystemUtil.getFileSystem(config, null);
            Path path = new Path(location
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值