一站式服务英文,wordpress 列表多图,网站移动端和PC端自适应怎么做,wordpress模板 门户网站章节内容
上节我们完成了如下的内容#xff1a;
Sqoop MySQL迁移到HiveSqoop Hive迁移数据到MySQL编写脚本进行数据导入导出测试
背景介绍
这里是三台公网云服务器#xff0c;每台 2C4G#xff0c;搭建一个Hadoop的学习环境#xff0c;供我学习。 之前已经在 VM 虚拟机…章节内容
上节我们完成了如下的内容
Sqoop MySQL迁移到HiveSqoop Hive迁移数据到MySQL编写脚本进行数据导入导出测试
背景介绍
这里是三台公网云服务器每台 2C4G搭建一个Hadoop的学习环境供我学习。 之前已经在 VM 虚拟机上搭建过一次但是没留下笔记这次趁着前几天薅羊毛的3台机器赶紧尝试在公网上搭建体验一下。
2C4G 编号 h1212C4G 编号 h1222C2G 编号 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 hivewzk.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;继续生成
call batchInsertTestData(200, 1000);增量导入
sqoop import \
--connect jdbc:mysql://h122.wzk.icu:3306/sqoop \
--username hive --password hivewzk.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;