数据同步工具DataX

news2024/11/15 11:16:44

目录

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.coloradmin.cn/o/2038968.html

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

相关文章

STL经典案例(二)——公司招员工

需求:公司招了十个员工ABCDEFGHIJ,公司有五个部门,公司随机给这十个员工分配薪水,并且随机将这十名员工分配到不同的部门。 员工类中成员属性为姓名和工资,成员方法为设置姓名、设置工资、获得姓名、获得工资 部门有五…

Electron 开发桌面应用程序用于对接USB Audio Class协议

开发用于对接USB Audio Class协议的Electron桌面应用程序是一个复杂的任务,可能涉及多个开源库和项目的组合。以下是一些开源项目和库,它们可以帮助你实现这个目标: 1. Electron Electron 是一个用于构建跨平台桌面应用程序的框架。你可以使…

【云原生】Prometheus Pushgateway使用详解

目录 一、前言 二、Pushgateway概述 2.1 什么是Pushgateway 2.1.1 Pushgateway在Prometheus中的位置 2.2 为什么需要Pushgateway 2.3 Pushgateway作用 2.4 Pushgateway 工作原理 2.5 Pushgateway 使用场景 2.6 Pushgateway 优缺点 三、Pushgateway 部署 3.1 二进制安…

[C#]基于C# winform结合llamasharp部署llama3中文的gguf模型

【llmasharp源码】 https://github.com/SciSharp/LLamaSharp 【测试模型】 https://www.modelscope.cn/pooka74/LLaMA3-8B-Chat-Chinese-GGUF.git 【测试通过环境】 vs2019 netframework4.7.2 llamasharp0.15.0 cuda11.7.1cudnn8.8.0 注意测试发现使用cpu推理非常卡&a…

Stable Diffusion绘画 | ControlNet应用-SoftEdge(软边缘):让转绘更柔和

SoftEdge(软边缘) Canny(硬边缘) 有时候捕捉的细节过多,其实有时候并不需要那么多的细节。 例如下图中,围巾上的网格细节全部都被捕捉下来了: 切换到「SoftEdge(软边缘)」,它只重点抓取轮廓边缘,而且线条会比 Canny …

优购电商小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商品分类管理,商品信息管理,留言板管理,订单管理,系统管理 微信端账号功能包括:系统首页,商品信息&#xf…

入门 PyQt6 看过来(项目)26 在线购物-主页面

功能导航页面很简单,就几个按钮功能。效果如下图: 1 主界面 ​ 包含 “商品选购”、”下单结算“、”销售分析“四个按钮以及“功能导航”标题。 2 工程目录 首先先创建工程目录及子目录: ​ 3 代码 主窗口文件为Main.py,其…

第2章 C语言基础知识

第2章 C语言基础知识 1.printf()函数 在控制台输出数据,需要使用输出函数,C语言常用的输出函数为printf()。 printf()函数为格式化输出函数,其功能是按照用户指定的格式将数据输出到屏幕上。 printf(“格式控制字符串”,[输出列表]); 格式控…

C++ 124类和对象_运算符重载_赋值

C 124类和对象_运算符重载_赋值 学习内容 解决自定义对象之间赋值是因析构函数重复释放内存时引发的异常问题 结果 代码 #include<iostream> using namespace std;//cout 在这里&#xff0c;没有它会报错//类和对象_运算符重载_赋值 //学习内容 //解决自定义对…

【Qt】Qt窗口 | 菜单栏QMenuBar

文章目录 一. 菜单栏二. 代码创建&使用菜单栏1. 创建菜单栏2. 在菜单栏中添加菜单3. 创建菜单项4. 在菜单项之间添加分割线5. 添加快捷方式6. 菜单/菜单项添加图标7. 添加子菜单 三. 图形化创建菜单栏 窗口 Qt 中窗口是通过QMainWindow类实现的 QMainWindow 是一个为用户提…

React使用useRef ts 报错

最近在写自己的React项目&#xff0c;我在使用useRef钩子函数的时候发现 TS2322: Type MutableRefObject<HTMLDivElement | undefined> is not assignable to type LegacyRef<HTMLDivElement> | undefined Type MutableRefObject<HTMLDivElement | undefined&g…

代码随想录算法训练营第十五天(一)| 110.平衡二叉树 (优先掌握递归)257. 二叉树的所有路径

110.平衡二叉树 题目&#xff1a; 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;fa…

vuex的原理和使用方法

简介 Vuex 是 Vue.js 应用的状态管理模式&#xff0c;它为应用内的所有组件提供集中式的状态&#xff08;数据&#xff09;管理。可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。 Vuex的构成 state&#xff1a;state 是 Vuex 的数据中心&#xff0c;也就是说state是用来…

【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】

一个加速语言模型生成的方法 现在语言模型的一个弊端speculative decoding预言家预测的问题 speculative decoding 模块的实现方法NAT Non-autoregressive模型压缩使用搜索引擎 一些更复杂些的speculative decoding 实现方式 speculative decoding 是一个适用于目前生成模型的加…

软件运维实施维保方案(Doc完整版原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产…

NodeJS:查看、设置 nodejs 堆内存

一、查看nodejs 堆内存 vite.config.ts 从Node.js v10.0.0开始&#xff0c;v8模块被引入&#xff0c;允许你访问V8引擎的一些内部特性&#xff0c;包括堆内存统计信息。 import v8 from v8 // 可用内存总量 console.log(Total available heap size: ${v8.getHeapStatistics()…

2024年优秀的网站建设公司推荐

如今&#xff0c;高达 48% 的用户认为&#xff0c;判断企业信誉的首要因素是其网站设计。我整理了一份 2024 年全球顶级网站设计公司名单。 企业为什么要投资网站设计和开发&#xff1f; 数字平台或社交媒体在当前情况下取得了飞跃&#xff0c;帮助企业上以数字方式推广他们的…

【数据结构】顺序表——赋源码(结尾)

目录 1. 线性表 2. 顺序表 2.1 概念与结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3 动态顺序表的实现 正文 1. 线性表 线性表&#xff08; linear list &#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#x…

停止项目大小调整,开始搜索层自动缩放!

作者&#xff1a;来自 Elastic Matteo Piergiovanni&#xff0c;John Verwolf 我们新的 serverless 产品的一个关键方面是允许用户部署和使用 Elastic&#xff0c;而无需管理底层项目节点。为了实现这一点&#xff0c;我们开发了搜索层自动扩展&#xff0c;这是一种根据我们将在…

华为路由的AAA是什么?

1.AAA及用户管理概述 华为路由的AAA是Authentication(认证)、‌Authorization(授权)和Accounting(计费)的简称&#xff0c;‌是一种提供认证、‌授权和计费的安全管理机制。‌ AAA作为一种网络安全管理机制&#xff0c;‌主要提供以下功能和服务&#xff1a;‌ 认证&#xff…