第3.6章:StarRocks数据导入——DataX StarRocksWriter

一、Datax

1.1 DataX 3.0概述

 DataX3.0是一个异构数据源离线同步工具,可以方便的对各种异构数据源进行高效的数据同步。   其github地址为:

https://github.com/alibaba/DataX/blob/master/introduction.mdicon-default.png?t=N7T8https://github.com/alibaba/DataX/blob/master/introduction.md

GitCode - 开发者的代码家园icon-default.png?t=N7T8https://gitcode.com/alibaba/datax/overview

1.2 DataX3.0框架设计

DataX将复杂的网状的同步链路变成了星型数据链路,DataX自身作为中间传输载体负责连接各种数据源,解决了异构数据源同步问题。Datax采用的是

   DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中:

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer:Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

1.3 DataX3.0核心架构

    DataX 3.0 开源版本支持单机多线程模式完成同步作业运行。基于DataX作业生命周期的时序图,从整体架构设计角度来阐述DataX各个模块相互关系。

1.3.1 核心模块介绍

  • DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
  • DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
  • 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
  • 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
  • DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0。

 1.3.2 DataX调度流程

     用户提交了一个DataX作业,并且配置了DataX Channel并发数为20个,需求是将一个100张分表的mysql数据同步到starrocks里面, 则DataX的调度决策思路是:

  • DataXJob根据分库分表切分成了100个Task。
  • 根据20个并发,DataX计算共需要分配4个TaskGroup。
  • 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

二、StarRocksWriter

   DataX基于StarRocks开发的StarRocksWriter插件支持MySQL、Oracle等数据库中的数据导入至 StarRocks。在底层实现上,StarRocksWriter内部将各种reader读取的数据进行缓存攒批(以csv或 json格式),之后采用Stream Load 方式批量导入至 StarRocks。总体的数据流是Source -->Reader -->DataX channel --> Writer ---> StarRocks

 官网文章地址:

使用 DataX 导入 | StarRocks

三、创建配置文件

 为导入作业创建 JSON 格式配置文件, 这里列举几种Datax同步脚本。

(1)同步oracle数据至starrocks:oracle2starrocks.json

{
  "job": {
    "setting": {
      "speed": {
        "channel": 1
      },
      "errorLimit": {
        "record": 0,
        "percentage": 0
      }
    },
    "content": [
      {
        "reader": {
          "name": "oraclereader",
          "parameter": {
            "username": "root",
            "password": "root",
            "connection": [
              {
                "querySql": [
                  "select fid,f_diccode,concat(substr(qhcode,1,2),'0000') as partition_no from nannd.test1"
                ],
                "jdbcUrl": [
                  "jdbc:oracle:thin:@192.168.22.115:1521/init"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "starrockswriter",
          "parameter": {
            "username": "root",
            "password": "root",
            "database": "",
            "table": "test2",
            "column": [
              "fid",
              "f_diccode",
              "partition_no"
            ],
            "preSql": ["truncate table des.test2"],
            "postSql": [],
            "jdbcUrl": "jdbc:mysql://192.168.10.103:9030",
            "loadUrl": [
              "192.168.10.101:8030",
              "192.168.10.102:8030",
              "192.168.10.103:8030"
            ],
            "loadProps": {
              "format": "json",
              "strip_outer_array": true
            }
          }
        }
      }
    ]
  }
}
  • OracleReader的配置说明见:

 https://github.com/alibaba/DataX/blob/master/introduction.md

https://github.com/alibaba/DataX/blob/master/oraclereader/doc/oraclereader.md

  • StarRocksWriter的配置说明见:官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值