DataX -- 配置解析

大軍發表於2021-11-26

DataX是阿里的異構資料來源離線同步工具,詳細的介紹和使用可以參考官網介紹Quick Start。DataX系列主要是更詳細的介紹整個執行的原理。

Configuration

DataX配置的解析包括job.json、core.json、plugin.json這三個檔案。這三個json檔案都是多層級的json配置的,比如一個a.b.c=d的json,我們如果通過json獲取,一般是先通過a這個key獲取到b.c的json,然後再通過b這個key獲取到c的josn,最後通過c這個key獲取到d,這樣程式碼寫起來就很繁瑣。

DataX提供了一個Configuration的類,可以直接把json進行壓平,我們通過下面的例子來看看。

public static String JSON = "{'a': {'b': {'c': 'd'}}}";

public static void main(String[] args) {
    Configuration configuration = Configuration.from(JSON);
    System.out.println(configuration.get("a.b"));
    System.out.println(configuration.get("a.b.c"));
    System.out.println(configuration.get("a.b.d"));
}

執行結果如下,可以看到通過Configuration可以很方便的獲取到json的多層級的資料。除了get,還有合併merge、根據String型別取值getString、獲取必填項getNecessaryValue等方法,這裡就不一一介紹了。

{"c":"d"}
d
null

job.json

job.json是作業的配置檔案,在任務執行之前,通過引數把配置檔案的全路徑傳入,所以名稱是可以自定義的。

主要配置的內容包括job.content.reader、job.content.writer以及job.setting.speed,reader和writer可以參考每個對應模組裡resources/plugin_job_template.json這個檔案,也可以通過命令直接獲取,這種方式做Quick Start裡有示例。主要是指定用哪個reader進行讀取資料,哪個writer進行寫入資料,以及reader和writer的相關配置資訊。

setting.speed主要的流速的控制,這個後面再來詳細講解。

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "streamreader",
          "parameter": {
          }
        },
        "writer": {
          "name": "streamwriter",
          "parameter": {
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 5
      }
    }
  }
}

core.json

全路徑是在DATAX_HOME/conf/core.json,配置一些全域性的資訊,比如taskGroup的channel個數,型別轉換就是這裡配置的。

{
    "entry": {
        "jvm": "-Xms1G -Xmx1G",
        "environment": {}
    },
    "common": {
        "column": {
            "datetimeFormat": "yyyy-MM-dd HH:mm:ss",
            "timeFormat": "HH:mm:ss",
            "dateFormat": "yyyy-MM-dd",
            "extraFormats":["yyyyMMdd"],
            "timeZone": "GMT+8",
            "encoding": "utf-8"
        }
    },
    "core": {
        "dataXServer": {
            "address": "http://localhost:7001/api",
            "timeout": 10000,
            "reportDataxLog": false,
            "reportPerfLog": false
        },
        "transport": {
            "channel": {
                "class": "com.alibaba.datax.core.transport.channel.memory.MemoryChannel",
                "speed": {
                    "byte": -1,
                    "record": -1
                },
                "flowControlInterval": 20,
                "capacity": 512,
                "byteCapacity": 67108864
            },
            "exchanger": {
                "class": "com.alibaba.datax.core.plugin.BufferedRecordExchanger",
                "bufferSize": 32
            }
        },
        "container": {
            "job": {
                "reportInterval": 10000
            },
            "taskGroup": {
                "channel": 5
            },
            "trace": {
                "enable": "false"
            }

        },
        "statistics": {
            "collector": {
                "plugin": {
                    "taskClass": "com.alibaba.datax.core.statistics.plugin.task.StdoutPluginCollector",
                    "maxDirtyNumber": 10
                }
            }
        }
    }
}

plugin.json

plugin.json的全路徑是DATAX_HOME/plugin/reader/streamreader/plugin.json,這個streamreader和上面job.json裡是對應的關係。載入後,還會加一個屬性path,這個是外掛的實際路徑。

這個檔案主要的內容就是name和class,class就是執行時要用到的外掛類。由於會有reader和writer,所以這裡會載入兩個plugin.json。

{
    "name": "streamreader",
    "class": "com.alibaba.datax.plugin.reader.streamreader.StreamReader",
    "description": {
        "useScene": "only for developer test.",
        "mechanism": "use datax framework to transport data from stream.",
        "warn": "Never use it in your real job."
    },
    "developer": "alibaba"
}

以上job.json、core.json、plugin.json這三個檔案載入後會通過merge方法進行合併,所以最終得到的Configuration就是這些檔案的合併資訊,後面就是通過Configuration來啟動外掛。

相關文章