返回介绍

2.2 数据转换

发布于 2024-10-03 15:40:35 字数 5697 浏览 0 评论 0 收藏 0

全链路跟踪:SPM 法~A.B.C.D.E 分别对应于站点.页面 ID.页面模块.索引.UUID

Apache Sqoop

Sqoop 简介与架构

Sqoop:SQL–to–Hadoop

正如 Sqoop 的名字所示:Sqoop 是一个用来将关系型数据库和 Hadoop 中的数据进行相互转移的工具,可以将一个关系型数据库(例如 mysql、Oracle) 中的数据导入到 Hadoop.

表格 7 Sqoop1 与 Sqoop2 比较

比较Sqoop1Sqoop2
架构仅仅使用一个 Sqoop 客户端引入了 Sqoop server 集中化管理 connector,以及 rest api,web,UI,并引入权限安全机制
部署部署简单,安装需要 root 权限,connector 必须符合 JDBC 模型架构稍复杂,配置部署更繁琐
使用命令行方式容易出错,格式紧耦合,无法支持所有数据 类型,安全机制不够完善,例如密码暴漏多种交互方式,命令行,web UI,rest API,conncetor 集中化管理,所有的链接安装在 Sqoop s erver 上,完善权限管理机制,connector 规范化,仅仅负责数据的读写

备注:sqoop1 和 sqoop2 并不兼容。

image-20191204222258355

图 19 Sqoop1 架构

说明:sqoop1 架构主要由三个部分组成:Sqoop client、HDFS/HBase/Hive、Database。用户向 Sqoop 发起一个命令之后,这个命令会转换为一个基于 Map Task 的 MapReduce 作业。Map Task 会访问数据库的元数据信息,通过并行的 Map Task 将数据库的数据读取出来,然后导入 Hadoop 中。 当然也可以将 Hadoop 中的数据,导入传统的关系型数据库中。它的核心思想就是通过基于 Map Task(只有 map)的 MapReduce 作业,实现数据的并发拷贝和传输,这样可以大大提高效率。

Sqoop 使用要点

# sqoop import 导入示例:
sqoop import \ --connect jdbc:mysql://db.dajiangtai.net:3306/djtdb_hadoop \
--username sqoop \
--password sqoop \
--table user \        # 要读取的数据库表
--target-dir /junior/sqoop/ \     #可选,不指定目录,数据默认导入到/user 下
--where "sex='female'" \     #可选,过滤从数据库中要导入的数据。
--as-sequencefile \          #可选,不指定格式,数据格式默认为 Text 文本格式
--num-mappers 10 \          #可选,指定 Map 任务的并发度。这个数值不宜太大
--null-string '\\N' \       #可选
--null-non-string '\\N'    #可选

表格 8 sqoop 常用参数

 参数含义
增量导入 import--incremental [append lastmodified] 
--check-column [column]检查的字段作为判断条件,字段不能是字符串类型,一般为时间或数值类型 
--last-value [value]如果是时间:则为此日期之后的才导入;如果是数值,则大于此值的才导入。 
sqoop import--compress对导入数据压缩,默认压缩算法是 gzip
 -m, --num-mappers指定 Map 任务的并发度
 --split-by分隔字段,可用于并行查找(与-m 配合使用),一般用于主键。
 --target-dir指定数据目录,一般配合分区字段使用
覆盖导入--delete-target-dir导入前先删除目录目录
导出 export--Dsqoop.export.records.per.statement=10指定每次导入 10 条数据
 --batch指定是批量导入
--update-key id更新已有数据 
--update-key id --update-mode allowinsert数据存在更新;不存在插入 

备注:

  1. 导入时--delete-target-dir 和-- incremental 参数不能并用。
  2. 导入分区表,需要创建有分区的表,分区 有按日期、范围、列表等。示例如下
CREATE TABLE `YDDT` (
 `ID` string,
 `YDJC_ID` string,
 `YDDT_DATA_TYPE` string,
 `YDDT_BUSSINESS_NOW` bigint,

 `YDDT_USER_NOW` bigint,
 `YDDT_COLLECT_TIME` string,
 `YDDT_CREATOR` string,
 `YDDT_DATE` string,
 `BACK` string
) PARTITIONED BY (day int) row format delimited fields terminated by '\t';

导入表

sqoop import --connect jdbc:mysql://172.20.13.50:3306/TestBigDate --username root \
--password 123456 --table YDDT_2017_06_01 -m 3 \
--target-dir /user/hive/warehouse/dxyjpt.db/yddt/day=20170601 \
--fields-terminated-by '\t'
# 标记表的分区信息
alter table yddt add partition(day='20170601')
location '/user/hive/warehouse/dxyjpt.db/yddt/day=20170601'

# 删除分区数据
ALTER TABLE yddt DROP IF EXISTS PARTITION(day='20170604')

禁止明文密码:

  • -P:sqoop 命令行最后使用 -P,此时提示用户输入密码
  • –password-file:指定一个密码保存文件,读取密码。我们可以将这个文件设置为只有自己可读的文件,防止密码泄露。

空字符串处理: –null-string–null-non-string :同时使用可以将数据库中的空字段转化为 \N ,因为数据库中字段为 null,会占用很大的空间。

OGG

Oracle GoldenGate(OGG) Oracle 数据转换。

  • OGG 是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化(数据量只有日志的四分之一左右)。
  • OGG 能够实现大量交易数据的实时捕捉,变换和投递,实现源数据库与目标数据库的数据同步,保持最少 10ms 的数据延迟。

基本架构

Oracle GoldenGate 主要由如下组件组成

组件说明
Manager不管是源端还是目标端必须并且只能有一个 Manager 进程,可以启动、关闭、监控其他进程的健康状态,报告错误事件、分配数据存储空间,发布阀值报告等,其作用: 1:监控与启动 GoldenGate 的其它进程 2:管理 trail 文件及 Reporting
ExtractExtract 进程运行在数据库源端上,它是 Golden Gate 的捕获机制,可以配置 Extract 进程来做如下工作: 1:初始数据装载:对于初始数据装载,Extract 进程直接从源对象中提取数据 2:同步变化捕获:保持源数据与其它数据集的同步。初始数据同步完成后,Extract 进程捕获源数据的变化;如 DML 变化、 DDL 变化等
ReplicatReplicat 进程是运行在目标端系统的一个进程,负责读取 Extract 进程提取到的数据(变更的事务或 DDL 变化)并应用到目标数据库,就像 Extract 进程一样,也可以配置 Replicat 进程来完成如下工作: 1:初始化数据装载:对于初始化数据装载,Replicat 进程应用数据到目标对象或者路由它们到一个高速的 Bulk-load 工具上; 2:数据同步,将 Extract 进程捕获到的提交了的事务应用到目标数据库中;
CollectorCollector 是运行在目标端的一个后台进程,接收从 TCP/IP 网络传输过来的数据库变化,并写到 Trail 文件里
Trails为了持续地提取与复制数据库变化,GoldenGate 将捕获到的数据变化临时存放在磁盘上的一系列文件中,这些文件就叫做 Trail 文件
Data PumpsData Pump 是一个配置在源端的辅助的 Extract 机制,Data Pump 是一个可选组件,如果不配置 Data Pump,那么由 Extract 主进程将数据发送到目标端的 Remote Trail 文件中;如果配置了 Data Pump,会由 Data Pump 将 Extract 主进程写好的本地 Trail 文件通过网络发送到目标端的 Remote Trail 文件中

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文