Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志

章节内容

上节我们完成了如下的内容:


Sqoop MySQL迁移到Hive

Sqoop Hive迁移数据到MySQL

编写脚本进行数据导入导出测试

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。

之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。


2C4G 编号 h121

2C4G 编号 h122

2C2G 编号 h123

CDC

全称为:变化数据捕获(Change Data Capture)

我们前面执行的都是全量数据的导入。


如果数据量很小,则采取完全源数据抽取

如果源数据量很大,则需要抽取发生变化的数据,这种数据抽取模式叫:“变化数据捕获”,简称 CDC。

如果CDC是侵入式的,那么操作会给源系统带来性能的影响。


基于时间戳

抽取过程可以根据某些属性列来判断哪些数据是增量的,最常见的属性列有以下两种:


时间戳:最好有两个列,一个插入时间戳,表示何时创建,一个更新时间戳表示最后一次更新时间。

序列:大多数数据库都提供自增功能,表中的列定义成自增的,很容易得根据该列识别新插入的数据

时间戳是最简单且常用的,但是有如下缺点:


不能记录删除记录的操作

无法识别多次更新

不具有实时的能力

基于触发器

当执行:INSERT、UPDATE、DELTE 这些 SQL 语句时,激活数据库的触发器,使用触发器可捕获变更的数据,并把数据保存中间临时表里。

大多数场合下,不允许向操作性数据库里添加触发器,且这种会降低系统性能,基本不会采用。


基于快照

可以通过比较源表和快照表来得到数据的变化,基于快照的CDC可以检测插入、更新、删除等数据,这是相对于时间戳的CDC方案的优点。

缺点就是需要大量的空间。


基于日志

最复杂和没有侵入性的就是基于日志的方式,数据库把每个插入、更新、删除都记录到日志里,解析日志文件,就可以获取相关的信息。

每个关系型数据库:日志格式不一致,没有通用的产品。

阿里巴巴的Canal可以完成MySQL日志文件解析。


Append方式

初始化数据

删除 MySQL 中的数据

-- 删除 MySQL 表中的全部数据
truncate table sqoop.goodtbl;

删除Hive中的数据

-- 删除 Hive 表中的全部数据
truncate table mydb.goodtbl;

重新生成数据

这个SQL是之前章节写的函数方法,如果你第一次看到这里,你可能需要把前边的文章执行一次。

-- 向MySQL的表中插入100条数据
call batchInsertTestData(1, 100);

导入Hive

sqoop import \
--connect jdbc:mysql://h122.wzk.icu:3306/sqoop \
--username hive --password hive@wzk.icu \
--table goodtbl \
--incremental append \
--hive-import \
--fields-terminated-by "\t" \
--hive-table mydb.goodtbl \
--check-column serialNumber \
--last-value 50 \
-m 1

以上参数说明:

  • check-column 用来指定一些列,来检查是否可以作为增量数据进行导入,和关系型数据库自增或时间戳类似。
  • last-value 制定上一次导入检查列指定字段的最大值

检查Hive

我们通过指令查看 Hive 同步了多少数据过来:

select count(*) from mydb.goodtbl;
• 1

继续生成

call batchInsertTestData(200, 1000);

增量导入

sqoop import \
--connect jdbc:mysql://h122.wzk.icu:3306/sqoop \
--username hive --password hive@wzk.icu \
--table goodtbl \
--incremental append \
--hive-import \
--fields-terminated-by "\t" \
--hive-table mydb.goodtbl \
--check-column serialNumber \
--last-value 100 \
-m 1

检查Hive

重新查看Hive,看看目前同步了多少数据过来

select count(*) from mydb.goodtbl;
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
消息中间件 存储 运维
更优性能与性价比,从自建 ELK 迁移到 SLS 开始
本文介绍了 SLS 基本能力,并和开源自建 ELK 做了对比,可以看到 SLS 相比开源 ELK 有较大优势。
56196 241
|
Java API Apache
通用快照方案问题之Feign对日志的记录如何解决
通用快照方案问题之Feign对日志的记录如何解决
95 0
|
SQL 关系型数据库 数据库
实时计算 Flink版产品使用合集之同步PostgreSQL数据时,WAL 日志无限增长,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
消息中间件 Kafka C++
【SLS开源兼容系列】从ES平滑迁移到SLS
当我们考虑把elk的数据链路迁移到sls时,往往希望做到平滑的迁移,减少迁移的代价。本文介绍几种迁移方案,供大家在做elk迁移时参考。
656 4
|
消息中间件 分布式计算 关系型数据库
Sqoop与Kafka的集成:实时数据导入
Sqoop与Kafka的集成:实时数据导入
Sqoop与Kafka的集成:实时数据导入
|
SQL 分布式计算 关系型数据库
Sqoop数据导入到Hive表的最佳实践
Sqoop数据导入到Hive表的最佳实践
|
算法 Apache 数据库
Sqoop的增量数据加载策略与示例
Sqoop的增量数据加载策略与示例
|
分布式计算 Hadoop 关系型数据库
使用Sqoop将数据导入Hadoop的详细教程
使用Sqoop将数据导入Hadoop的详细教程
|
SQL 关系型数据库 MySQL
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
330 0
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
992 2

热门文章

最新文章