数据同步工具DataX

ops/2024/10/20 8:54:45/

目录

1.概要

2.简介

3.DataX处理异构数据源

4.DataX的框架

5.DataX的核心架构

6.DataX的安装

7.DataX的使用案例

8.mysql同步到mysql案例


1.概要

        本篇文件将介绍一款数据同步工具DataX的原理,安装,以及使用。

2.简介

        官网连接:https://github.com/alibaba/DataX

        DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

        异构数据源就是指数据结构、存取方式、形式不一样的数据源,对于异构数据源的数据

处理起来一般是很麻烦的比如,数据格式和结构的差异、数据语义的不一致、数据访问接口的

多样性、数据存储的位置和数据管理的方式等等都使得异构数据源交互起来很困难。

3.DataX处理异构数据源

        官方的设计理念

        

        不难看出对于一般的异构数据源同步问题只能使用复杂的网状同步链路,DataX设计理念就是将自身作为一个中间载体,数据源只需要与DataX进行连接即可,降低了各个数据源直接的耦合性

4.DataX的框架

        DataX使用FrameWork+Plugin的方式进行架构,也就是插件化的架构方式,这里插件具体就是Reader和Writer一个负责采集数据发送给FrameWork,一个负责从FrameWork中取数据并写入到目的端。

        这里重点说一下FrameWork,它连接了reader和writer作为一个数据传输通道,处理缓冲,流控,并发,数据转换等核心技术问题,比如下游写的比较慢就可以在FrameWork中进行缓冲,同时可以控制数据的流量和流速,如果下游消费能力比较强也可以多线程并发的形式同时写数据,同时对于不同的数据源,FrameWork能自动转换数据存储格式。

5.DataX的核心架构

1.用户提交的任务首先会被封装成一个DataX的Job作业

2.之后根据不同的数据源的特性制定切分策略,例如,对于关系型数据库,可以通过指定切分主键(splitPK)来将数据表切分成多个部分,每个部分由一个Task负责同步

3.DataX Job会调用Scheduler模块,根据配置的并发数量,一般一个并发默认处理5个Task,所以会将Task重新组合成TaskGroup组任务。

4.每个Task启动后会启动Reader—>Channel—>Writer的线程来完成任务同步工作。

5.DataX作业运行后,Job监控TaskGroup模块任务,所有的TaskGroup任务完成后Job成功退出,否则,异常退出,进程退出值非0

6.DataX的安装

  • 下载DataX压缩包 DataX下载地址 
  •  解压tar -zxvf  datax.tar.gz    -C    {YOUR_DATAX_HOME}
  •  $ cd  {YOUR_DATAX_HOME}/bin 
  •  可以看到一个DataX.py 这就是用来执行job的datax脚本
  • DataX自检脚本
  • python {YOUR_DATAX_HOME}/bin/datax.py{YOUR_DATAX_HOME}/job/job.json
  • 执行后可以看到结果显示一系列日志信息,表示安装成功

7.DataX的使用案例

    DataX需要用户编写一个json文件,内容大致就是reader和writer的配置
    官方提供了不同数据源的模板,我们以mysql写入到hdfs为例

    python datax.py -r mysqlreader -w hdfswriter   执行后显示模板

    

{"job": {"content": [{"reader": {"name": "streamreader", "parameter": {"column": [], "sliceRecordCount": ""}}, "writer": {"name": "streamwriter", "parameter": {"encoding": "", "print": true}}}], "setting": {"speed": {"channel": ""}}}
}

8.mysql同步到hdfs案例

        DataX提供了两种同步方式一种是以配置为主的TableMode,另外一种是以sql为主的QuerySQLMode

        TableMode

  • 注意同步到hdfs的目标路径必须已经存在,否则同步失败
  • hdfs配置列是为例后续在hive或者spark使用方便,保证数据一致性

    

{

    "job": {

        "content": [

            {

                "reader": {

                    "name": "mysqlreader",

                    "parameter": {

                        "column": [

                            "id",

                            "name",

                        ],

                        "where": "id>=3",

                        "connection": [

                            {

                                "jdbcUrl": [

                                    "jdbc:mysql://hadoop102:3306/test"

                                ],

                                "table": [

                                    "test_tablename"

                                ]

                            }

                        ],

                        "password": "root",

                        "splitPk": "",

                        "username": "root"

                    }

                },

                "writer": {

                    "name": "hdfswriter",

                    "parameter": {

                        "column": [

                            {

                                "name": "id",

                                "type": "bigint"

                            },

                            {

                                "name": "name",

                                "type": "string"

                            }

                        ],

                        "compress": "gzip",

                        "defaultFS": "hdfs://hadoop102:8020",

                        "fieldDelimiter": "\t",

                        "fileName": "table_province",

                        "fileType": "text",

                        "path": "/table_province",

                        "writeMode": "append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": 1

            }

        }

    }

}

         QuerySQLMode

                mysql源写sql就可以了

{

    "job": {

        "content": [

            {

                "reader": {

                    "name": "mysqlreader",

                    "parameter": {

                        "connection": [

                            {

                                "jdbcUrl": [

                                    "jdbc:mysql://hadoop102:3306/gmall"

                                ],

                                "querySql": [

                                    "select id,name from test_tablename where id>=3"

                                ]

                            }

                        ],

                        "password": "root",

                        "username": "root"

                    }

                },

                "writer": {

                    "name": "hdfswriter",

                    "parameter": {

                        "column": [

                            {

                                "name": "id",

                                "type": "bigint"

                            },

                            {

                                "name": "name",

                                "type": "string"

                            }

                        ],

                        "compress": "gzip",

                        "defaultFS": "hdfs://hadoop102:8020",

                        "fieldDelimiter": "\t",

                        "fileName": "table_province",

                        "fileType": "text",

                        "path": "/table_province",

                        "writeMode": "append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": 1

            }

        }

    }

}


http://www.ppmy.cn/ops/93888.html

相关文章

基于vue框架的XXXX勤工助学管理系统vl6ft(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 开题报告内容 基于Vue框架的勤工助学管理系统 开题报告 一、研究背景与意义 随着高等教育的普及,学生群体日益庞大,勤工助学作为缓解学生经济压力、提升实践能力的重要途径,在高校中得到了广泛推广。然而,传…

SQLALchemy 的介绍

SQLALchemy 的介绍 基本概述主要特点使用场景安装与配置安装 SQLAlchemy配置 SQLAlchemy示例:使用 SQLite 数据库连接到其他数据库 结论 总结 SQLAlchemy是Python编程语言下的一款开源软件,它提供了SQL工具包及对象关系映射(ORM)工…

15.3 模型评估与调优

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…

十七、访问者模式

文章目录 1 基本介绍2 案例2.1 Element 接口2.2 Vehicle 抽象类2.3 Car 类2.4 Jeep 类2.5 VehicleCollection 类2.6 Action 抽象类2.7 Repair 类2.8 Drive 类2.9 Client 类2.10 Client 类的运行结果2.11 总结 3 各角色之间的关系3.1 角色3.1.1 Element ( 元素 )3.1.2 ConcreteE…

Docker安装Nacos(详细教程)

Docker安装Nacos的步骤相对直接,但需要注意一些细节以确保安装成功。以下是一个详细的安装步骤指南: 1. 安装Docker 首先,确保你的系统中已经安装了Docker。如果尚未安装,你可以通过访问Docker的官方网站或使用包管理器&#xf…

http请求和响应

是的,HTTP 请求和响应在发送之前通常都需要进行序列化。序列化是将数据结构或对象转换为适合传输的格式的过程。在 HTTP 通信中,数据的序列化和反序列化是关键步骤。 1. HTTP 请求的序列化 请求头部: 包括请求方法(如 GET、POST&#xff09…

计算机网络-网络层

负责在不同的网络之间转发数据包,基于数据包的 IP地址转发,每个数据包可以按照不同路径传输。网络层不负责丢包重传,以及数据包之间数据顺序的的问题。 网络设备 路由器工作在第三层:网络层,能看到网络层的地址&…

20240810从串口查看荣品RK3588S-AHD开发板出厂预置的Android的版本

20240810从串口查看荣品RK3588S-AHD开发板出厂预置的Android的版本 2024/8/10 16:46 1、通过串口: console:/ # console:/ # getprop ro.build.version.release 13 console:/ # 【请严重注意,adb的那条USB2.0的公公线,一定要插到蓝色的USB3…