大数据生产环境 sqoop datax

news/2024/7/7 22:54:37

在日常大数据生产环境中,经常会有集群数据集和关系型数据库互相转换的需求,在需求选择的初期解决问题的方法————数据同步工具就应运而生了。此次我们选择两款生产环境常用的数据同步工具进行讨论

Sqoop

通常数据开发岗位的朋友都会较早的接触这款工具,因为Sqoop的设计初衷就是在Hadoop和DB(关系型数据库)、大型机(Oracle服务机)之间搭建桥梁,斩断数据同步的隔阂。该项目起步于2009年,最早是Hadoop的一个三方模块的存在,后来社区开发者为了能够快速部署和使用,同时也为了开发人员能够更快速的迭代开发,最终成为Apache基金会的顶级项目。

核心机制

Sqoop是基于MR的分布式数据同步工具,使用MR完成数据的导入和导出,依赖计算框架的能力,可以实现并行操作以及容错能力

  • 导入
    在读取数据库文件时,sqoop底层逐行读取,导入过程的输出是一组文件,其中包含导入的表或数据集副本,因为
    底层使用的是MR并行处理,所以这一过程会产生多个文件(序列化二进制文件或逗号分割的文本文件)。导入的过程
    由JAVA类控制,此类可将数据与序列化文件进行序列化和反序列化。同时开放的接口可以使用其他工具解析分隔记录
    数据。

  • 导出
    当MR或Hive生成的查询处理结果生成结果集时,可以使用其导入关系型数据库。Sqoop将HDFS文件并行读取一组文本文件,将它们解析记录,并将它们插入到数据库表中作为新行,供外部程序或用户进行查询。

特点

  • 分布式可水平扩展
  • 运行模式基于MR
  • 依赖hadoop生态圈,某些业务场景下限制多
  • 负载默认均匀分布,若不人为修改,某些状况下会导致负载倾斜
  • 对压缩文件支持不友好
  • 启动速度相对较慢

DataX

DataX是阿里开源的一个异构数据源离线同步工具,用于在关系型数据库、HDFS、Hive、ODPS(阿里云组件)、HBase、DRDS、ADS、TableStore(OTS)、FTP等各种异构数据源之间做稳定高效的数据同步。从官方给出的定义不难看出这一数据同步框架面向更多数据场景,目前离线同步数据源已支持DB2、Kafka等工具。

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

框架设计


DataX在设计之初就将同步理念抽象成框架+插件的形式.框架负责内部的序列化传输,缓冲,并发,转换等而核心技术问题,数据的采集(Reader)和落地(Writer)完全交给插件执行

DataX Framework提供了简单的接口与插件交互,提供简单的插件接入机制,只需要任意加上一种插件,就能无缝对接其他数据源。经过不停的迭代,当前DataX已经有了比较全面的插件体系,包括主流的RDBMS,NOSQL以及大数据计算系统

核心模块介绍:

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

特点

  • 单线程多进程,不支持分布式
  • 数据转换功能丰富,可在传输过程中脱敏、过滤
  • 传输速度可控,具备信息统计功能
  • 可以进行数据校验

总结

对比两者的特点,不难发现Sqoop依赖于Hadoop生态对HDFS、Hive支持友善,在处理数仓大表的速度相对较快,但不具备统计和校验能力。而DataX无法分布式部署,可以在传输过程中进行过滤,并且可以统计传输数据的信息,因此在业务场景复杂(表结构变更)更适用,同时对于不同的数据源支持更好。且DataX的开源版本目前只支持单机部署,需要依赖调度系统实现多客户端,同时不支持自动创建表和分区。


http://lihuaxi.xjx100.cn/news/663674.html

相关文章

2023.1.16 (一) 上午 关于人口老龄化的研究——老龄化的式子表示及建国以来的老龄化情况

2023.1.16(一)上午 关于人口老龄化的研究——老龄化的式子表示及建国以来的老龄化情况前言定义建模模型细节代码实现.in文件.out文件前言 今天研究一个简单一点的问题,预计2023.1.18正式结题做PPT展示。 定义 老龄人: 60岁≤ 的人 老龄化&…

JavaScript 变量提升和函数提升

文章目录JavaScript 变量提升和函数提升作用域变量提升函数提升变量提升和函数提升的优先级JavaScript 变量提升和函数提升 作用域 在JavaScript中,一个变量的定义与调用都是会在一个固定的范围中的,这个范围我们称之为作用域。 作用域可以分为&#…

WhatsApp居然有3个版本?深度详解区别!外贸圈获客神器用起来!

近两年,外贸圈用WhatsApp来营销获客,越来越火。不少走在前头的外贸人,已经尝到了甜头。但也有不少后来者,站在门外张望的时候,整个人都是蒙圈的。❓听说动不动要整几十个账号,还要花老长时间养号&#xff1…

《Linux Shell脚本攻略》学习笔记-第三章

3.1 简介 Unix为所有的设备和系统功能提供了文件形式的借口。可以通过这些特殊文件直接访问设备以及系统功能。 3.2 生成任意大小的文件 创建特定大小的文件最简单的方法就是利用dd命令。dd命令会克隆给定的输出内容,然后将一模一样的一份副本写入输出。 if表示输入…

【代码随想录】哈希表-golang

哈希表 from 代码随想录 hash表解法可以是slice,map…,目的是将时间复杂度降为O(1) 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 排序 思路:直接重新声明字符的字节形式,然后对其进行…

冒泡排序算法的实现和优化~

冒泡排序算法: 算法思想: 反复扫描待排序记录序列,在扫描的过程中,顺次比较相邻的两个元素的大小,若逆序就交换位置 文字描述该算法: 以升序为例: 依次比较数组中相邻两个元素大小&#xf…

win10录屏文件在哪?如何找到录制后的文件

在工作和学习中,我们会遇到需要使用录屏工具录制电脑屏幕的情况,很多小伙伴在录制完win10电脑屏幕之后,找不到录制的视频文件。win10录屏文件在哪?今天小编教大家如何找到电脑录屏文件和录制win10电脑屏幕的方法,如果您…

Microsoft Graph PowerShell v2 发布公开预览版 - 新的身份验证方法,支持解除阻塞场景,脚本迁移工具

本篇接前一篇继续介绍,有些事情耽搁了所以发晚了。 为更多场景提供新的身份验证方法 1. 托管标识 在编写自动化脚本时,一个常见的挑战是管理用于保护服务之间通信的秘密、凭据、证书和密钥。允许模块获取受 Azure Active Directory 保护的 Azure 资源…