| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 慌了! Apache Sqoop正式退役? -> 正文阅读 |
|
[大数据]慌了! Apache Sqoop正式退役? |
意外发现前两天打算迁移一份数据,自然而想到了Apache Sqoop,遂打开Apache官网寻找下载链接,但是竟然没有找到他的踪影。 这不科学啊,前几个月还看到过来着,有点不死心,直接尝试登陆直接https://sqoop.apache.org/ Aapche Sqoop官网
Apache基金会里竟然还有项目退役一说,仔细看了下,原来Apache Sqoop在2021年6月就已经进入Attic了,就是最近的事情。不过,「Attic」是啥啊?并没有听说过;进入到Attic的项目会咋样?,我们继续探索下。 Apache Attic介绍 Apache Attic原来就相当于Apache的小黑屋,如果Apache托管的项目长时间不活跃(超过2年没有release新版本,没有committer、contributer并且没有未来roadmap),就会选择将项目移动到Attic中,这也就相当于Apache的项目管理了,掌管整个项目的生命周期。
目前将Sqoop做数据迁移工具公司不在少数,当Sqoop移动到Attic后,单单使用来说是完全不受影响的;Apache Attic依旧会提供代码库的下载;但是不会再修复任何的bug,release新版本了,并且也不会再重启社区。 看到这里其实就没有这么慌了,我们还能继续用,不过如果遇到问题,我们只能自己建个分支去fix了,从侧面来说,也能说明Sqoop在某个角度是成功的,毕竟曾经成为Apache顶级项目,如果真的是长时间没有release,有可能是他确实已经够成熟了。 准备关闭Attic页面的时候,顺便扫了一眼在Attic中的项目,基本都不认识,但也看到几个熟悉的身影,如Chukwa,Sentry,Eagle。相信也有不少公司在使用,比如我们公司还在使用Sentry。换个角度,现在技术快速更迭太迅速了,随着时间流逝,没准过些年Hadoop、Spark也有可能没落呢。以后的事情又谁知道呢?没辙,继续学吧,今天我们先来聊聊Sqoop。 Sqoop定位和现状简单来说Sqoop的定位就是Hadoop生态存储和结构化存储之间的数据迁移。我们比较常见的场景就是HDFS/HBase/Hive和MySql/Oracle之间的数据互导。Sqoop作为数据传输的桥梁,通过定义MapReduce的InPutFormat和OutPutFormat来对接源存储和目的存储。
Sqoop架构简图 目前Sqoop总体有两大版本分为Sqoop1和Sqoop2,Sqoop1的最新release是1.4.7;Sqoop2的最新release是1.99.7;这里如果大家使用的话推荐使用Sqoop1,而Sqoop2虽然增加了CLI和Rest api,但实际上是一个半成品,跟Sqoop1也完全不兼容,并且无论是CDH还是之前Apache都是不建议生产使用的,自己随便玩玩还可以。本篇主要介绍的版本还是基于Sqoop1. Sqoop迁移原理核心逻辑整个Sqoop的迁移过程,都会对应着一个MapReduce作业,实际上只有Map阶段,而迁移大致分为5个部分,如下所示。 Sqoop逻辑简图 「Initializer」:整个Sqoop迁移的初始化阶段,完成迁移前的准备工作,如连接数据源,创建临时表,添加依赖的jar包等。 「Partitioner」:源数据分片,根据作业并发数来决定源数据要切分多少片。 「Extractor」:开启extractor线程,内存中构造数据写入队列之中; 「Loader」:开启loader线程,从队列中读取数据并写入对应后端; 「Destroyer」:整个迁移的收尾工作,断开sqoop与数据源的连接,完成资源回收; 流程解析当迁移任务启动后,首先会进入初始化部分,使用JDBC检查导入的数据表,检索出表中的所有列以及列的数据类型,并将这些数据类型映射为Java数据类型,在转换后的MapReduce应用中使用这些对应的Java类型来保存字段的值,在每次Sqoop的任务执行时,代码生成器使用这些信息来创建对应表的类,用于保存从表中抽取的记录,即xxxx.java文件。紧接着Partitioner会根据--split-by或者-m指定整个任务的分片数量,如不指定默认是4个分片(每一个partition对应着一个Mapper),然后编译成一个本地Jar包用于提交MapReduce作业。当任务提交到集群后,每个Mapper会分别启动一个Extractor线程和Loader线程,整个MapReduce的InputFormat实际上是通过JDBC读取原端数据写入到Context中,而Loader线程将从Context中读出写入对应的数据作为OutPutFormat迁移的目的端。当任务执行完成后,yarn资源释放,随之Destroyer回收所有与数据源的连接。这里主要讲述的是Import的过程,而export流程与import十分相似,是把数据解析为一条条insert 语句,在此不过多解析。 Sqoop迁移实战恰逢本人正在做Doris到Hive的迁移测试(Doris是一个基本兼容MySQL协议的OLAP引擎),实战围绕Doris的进行展开 迁移前准备
开始迁移
HDFS结果验证
数据导入Hive
「hive普通表方式」
「2.hive外部表方式」
Hive结果验证
其他有意思的功能「增量同步」可以通过sqoop job创建、执行一个sqoop任务:根据增量字段,记录上一次的最大值,每次同步大于该值的数据增量同步数据至hive,创建任务后每次执行会自动更新--last-value的值。
「自定义导入内容」使用 --query参数,用户可以根据需求,自定义所需的内容。
「迁移加速」如果迁移MySQL的数据,可以添加--direct参数,使用MySQL的mysqldump去优化JDBC连接数据库部分。 「未提交数据查询」Sqoop 提供读取 read-uncommitted 事务的能力,只需要带上参数 --relaxed-isolation 即可,功能挺有意思,但这个我还没测试过,如果有试过的同学,可以文末留言。 Sqoop的遗憾总体来说,整个迁移实战的结果是符合预期,Doirs迁移Hive完成。虽然Sqoop功能还强大的,但也有一些小遗憾,如果某个任务失败重试的话,会存在数据重复的问题,这时如果要保证一致性语义,需要通过额外去重操作完成;此外Sqoop迁移过程中,数据实时写入兼容性还不太好。虽然Sqoop2看着规划是挺香的,很遗憾不了了之了,由衷希望Sqoop的社区可以再续往日辉煌。 Bash wishes!!! 「往期原创推荐」 「往期最佳实践」 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:32:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |