DataX:一个开源的离线数据同步工具

DataX 是一个异构数据源离线同步(ETL)工具,实现了包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高效的数据同步功能。它也是阿里云 DataWorks 数据集成功能的开源版本。

在这里插入图片描述

为了解决异构数据源同步问题,DataX 将复杂的网状的同步链路变成了星型数据链路,DataX 作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到 DataX,便能跟已有的数据源做到无缝数据同步。

体系原理

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

在这里插入图片描述

其中,

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

DataX 开源版本支持单机多线程模式完成同步作业运行,以下是一个 DataX 作业生命周期的时序图:

在这里插入图片描述

其中涉及的核心模块和流程如下:

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

举例来说,用户提交了一个 DataX 作业,并且配置了 20 个并发,目的是将一个 100 张分表的 MySQL 数据同步到 MaxCompute 里面。 DataX 的调度决策思路是:DataX Job 根据分库分表切分成了 100 个子任务;根据 20 个并发,DataX 计算共需要分配 4 个 TaskGroup;4个任务组平分切分好的 100 个子任务,每一个任务组负责以 5 个并发共计运行 25 个子任务。

数据源

经过多年的积累,DataX 目前已经有了比较全面的插件体系,主流的 RDBMS 数据库、NOSQL、大数据计算系统都已经接入。DataX 目前支持数据如下:

  • 关系型数据库:包括 MySQL、Oracle、OceanBase、SQL Server、PostgreSQL、DRDS、金仓、高斯以及通用的 RDBMS 等;
  • 阿里云数仓数据存储:包括 MaxCompute、AnalyticDB for MySQL、ADS、OSS、OCS、Hologres、AnalyticDB for PostgreSQL 等;
  • 阿里云中间件:数据总线 DataHub、日志服务 SLS;
  • 图数据库:阿里云 Graph Database、Neo4j;
  • NoSQL:阿里云 OTS、Hbase、Phoenix、MongoDB、Cassandra 等;
  • 数仓数据存储:StarRocks、Apache Doris、ClickHouse、Databend、Hive、SelectDB 等;
  • 无结构化数据存储:TxtFile、FTP、HDFS、Elasticsearch;
  • 时序数据库:OpenTSDB、TSDB、TDengine。

DataX 框架提供了简单的插件接入机制,只需要任意加上一种插件,就能无缝对接其他数据源。插件开发可以参考以下文章:

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

快速体验

通过 GitHub 或者直接输入以下网址下载 DataX 工具包:

http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

解压之后进入 bin 目录即可运行作业,作业通过配置文件进行设置,可以通过以下命令查看配置模板:

$ cd  {YOUR_DATAX_HOME}/bin$  python datax.py -r streamreader -w streamwriter
DataX (UNKNOWN_DATAX_VERSION), From Alibaba !
Copyright (C) 2010-2015, Alibaba Group. All Rights Reserved.
Please refer to the streamreader document:https://github.com/alibaba/DataX/blob/master/streamreader/doc/streamreader.md Please refer to the streamwriter document:https://github.com/alibaba/DataX/blob/master/streamwriter/doc/streamwriter.md Please save the following configuration as a json file and  usepython {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json 
to run the job.{"job": {"content": [{"reader": {"name": "streamreader", "parameter": {"column": [], "sliceRecordCount": ""}}, "writer": {"name": "streamwriter", "parameter": {"encoding": "", "print": true}}}], "setting": {"speed": {"channel": ""}}}
}

其中,-r 用于指定 Reader,-w用于指定 Writer,示例中两个都是 streamreader。安装目录下的 plugin 子目录包含了所有的 Reader 和 Writer。

job 目录提供了一个默认的作业配置 job.json,使用以下命令运行示例作业:

$ python datax.py ../job/job.json2025-05-17 15:00:02.135 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2025-05-17 15:00:02
任务结束时刻                    : 2025-05-17 15:00:22
任务总计耗时                    :                 20s
任务平均流量                    :               545/s
记录写入速度                    :           5000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

其他类型的数据源也可以按照相同的方式进行配置。

除了使用命令行和配置文件的方式运行作业之外,还可以通过图形化的调度工具(例如 DataX-Web、Apache DolphinScheduler)进行管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软家各种copilot的AI产品:Github copilot、Microsoft copilot

背景 大家可能听到很多copilot,比如 Github Copilot,Microsoft Copilot、Microsoft 365 Copilot,有什么区别 Github Copilot:有网页版、有插件(idea、vscode等的插件),都是面向于程序员的。Mi…

SpringMVC04所有注解按照使用位置划分| 按照使用层级划分(业务层、视图层、控制层)

目录 一、所有注解按照使用位置划分(类、方法、参数) 1. 类级别注解 2. 方法级别注解 3. 参数级别注解 4. 字段/返回值注解 二、按照使用层级划分(业务层、视图层、控制层) 1、控制层(Controller Layer&#x…

std::chrono类的简单使用实例及分析

author: hjjdebug date: 2025年 05月 20日 星期二 14:36:17 CST descrip: std::chrono类的简单使用实例及分析 文章目录 1.实例代码:2. 代码分析:2.1 auto t1 std::chrono::high_resolution_clock::now();2.1.1 什么是 system_clock2.1.2 什么是 chrono::time_point?2.1.3 什…

电子电路仿真实验教学平台重磅上线!——深圳航天科技创新研究院倾力打造,助力高校教学数字化转型

在传统电子电路课堂中,实验室的灯光总与高昂的成本、拥挤的设备、反复的耗材损耗相伴,而教师不得不面对这样的现实:有限的硬件资源束缚着教学深度,不可逆的实验风险制约着创新探索,固化的时空场景阻碍着个性化学习。当…

面试真题 - 高并发场景下Nginx如何优化

Nginx是一款高性能的Web服务器和反向代理服务器,以其轻量级、高并发处理能力和稳定性闻名。在面对高并发场景时,合理的配置与优化策略至关重要,以确保服务的稳定性和响应速度。 以下是针对Nginx进行高并发优化的一些关键配置和策略&#xff…

算法与数据结构:质数、互质判定和裴蜀定理

文章目录 质数质数判定质数筛选质因数分解互质判定裴蜀定理 质数 首先回顾「质数」的定义:若一个正整数无法被除了 1 ​和它自身之外的任何自然数整除,则称该数为质数(或素数),否则称该正整数为合数。 根据上述定义&…

代码随想录算法训练营第60期第四十二天打卡

大家好,今天还是继续我们的动态规划里面的背包问题,前面我们主要接触的是0-1背包和完全背包,其实这两个背包问题主要就是看看每一件物品我们是否有多件,如果每一件物品我们只能取一次的话那这样我们就是0-1背包,如果每…

第41天-Python+Qt四屏播放器开发指南

一、技术选型与工具准备 核心库: Pyqt5:Python标准GUI库,构建用户界面 os / sys:文件系统操作 开发环境: pip install pyqt5 最终效果与运行 import sys from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout # 添加缺失的布局管理器 from PyQt5.QtCore impor…

upload-labs通关笔记-第12关 文件上传之白名单GET法

目录 一、白名单过滤 二、%00截断 1、%00截断原理 2、空字符 3、截断条件 &#xff08;1&#xff09;PHP版本 < 5.3.4 &#xff08;2&#xff09;magic_quotes_gpc配置为Off &#xff08;3&#xff09;代码逻辑存在缺陷 三、源码分析 1、代码审计 &#xff08;1&…

Node.js数据抓取技术实战示例

Node.js常用的库有哪些呢&#xff1f;比如axios或者node-fetch用来发送HTTP请求&#xff0c;cheerio用来解析HTML&#xff0c;如果是动态网页的话可能需要puppeteer这样的无头浏览器。这些工具的组合应该能满足大部分需求。 然后&#xff0c;可能遇到的难点在哪里&#xff1f;…

数据结构(3)线性表-链表-单链表

我们学习过顺序表时&#xff0c;一旦对头部或中间的数据进行处理&#xff0c;由于物理结构的连续性&#xff0c;为了不覆盖&#xff0c;都得移&#xff0c;就导致时间复杂度为O&#xff08;n&#xff09;&#xff0c;还有一个潜在的问题就是扩容&#xff0c;假如我们扩容前是10…

【Unity】DOTween的常用函数解释

DOTween插件常用函数解释 1.DOTween.To&#xff08;通用变化动画&#xff09; 解释&#xff1a;将某一个值在一定的时间内变化到另一个值&#xff08;通用的函数&#xff09;&#xff0c;可用于大部分的动画变化 使用示例&#xff1a; using UnityEngine; using DG.Tweenin…

数据结构测试模拟题(1)

1、约瑟夫问题 #include<bits/stdc.h> using namespace std; const int N25; int e[N],ne[N],head-1,idx1; int n,m; void add_to_head(int x){e[idx]x;ne[idx]head;headidx; } void add(int k,int x){e[idx]x;ne[idx]ne[k];ne[k]idx; } int main(){cin>>n>>…

Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)

文章目录 Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)需求方法1:使用Helm覆盖值方法2: 在Lens中临时修改Deployment配置步骤 1: 创建 Docker Registry Secret步骤 2: 在 Deployment 中引用 Secret参考资料Helm配置之为特定Deployment配置特定Docker仓库(覆…

BERT 作为Transformer的Encoder 为什么采用可学习的位置编码

摘要 BERT 在位置编码上与原始 Transformer 论文中的 sin/cos 公式不同&#xff0c;选择了可学习&#xff08;learned&#xff09;的位置嵌入方案。本文将从 Transformer 原始位置编码选项入手&#xff0c;分析 BERT 选择 learned positional embeddings 的四大核心原因&#x…

【Linux 学习计划】-- gcc、g++、动静态库链接

目录 什么是gcc、g gcc、g 相关操作详解 预处理、编译、汇编、链接来源 动静态链接是什么 结语 什么是gcc、g gcc、g其实就是编译器&#xff0c;是帮助我们从.c或者.cc&#xff0c;.cpp文件编译成可执行程序的 其中&#xff0c;我们如果要编译c语言文件的话&#xff0c;…

前端读取本地项目中 public/a.xlsx 文件中的数据 vue3

前端读取本地项目中 public/a.xlsx 文件中的数据 vue3 项目中需要在 Vue3 项目中读取 public/a.xlsx 文件&#xff0c;可以使用 fetch API 来获取文件内容 一、安装 xlsx 首先&#xff0c;你需要安装 xlsx 库&#xff1a; npm install xlsx二、在需要用的页面里引入xlsx im…

MySQL:to many connections连接数过多

当你遇到 MySQL: Too many connections 错误时&#xff0c;意味着当前连接数已达到 MySQL 配置的最大限制。这通常是由于并发连接过多或连接未正确关闭导致的。 一、查看当前连接数 查看 MySQL 当前允许的最大连接数 SHOW VARIABLES LIKE max_connections;查看当前使用的最大…

2024年热门AI趋势及回顾

人工智能的崛起 2024 年可能会被铭记为人工智能不再是一种技术新奇事物&#xff0c;而是成为现实的一年。微软、Salesforce 和 Intuit 等巨头将人工智能融入主流企业解决方案&#xff1b;从文案写作到数据分析&#xff0c;专门的人工智能应用程序和服务如雨后春笋般涌现&#…

LangFlow技术深度解析:可视化编排LangChain应用的新范式 -(2)流编辑器系统

Flow Editor System | langflow-ai/langflow | DeepWiki 流编辑器系统 相关源文件 流编辑器系统是 Langflow 的核心交互式组件&#xff0c;允许用户直观地创建、编辑和管理 LLM 驱动的应用程序。它提供了一个直观的画布&#xff0c;用户可以在其中添加节点、将其与边缘连接并…