文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2.2 数据转换
全链路跟踪:SPM 法~A.B.C.D.E 分别对应于站点.页面 ID.页面模块.索引.UUID
Apache Sqoop
Sqoop 简介与架构
Sqoop:SQL–to–Hadoop
正如 Sqoop 的名字所示:Sqoop 是一个用来将关系型数据库和 Hadoop 中的数据进行相互转移的工具,可以将一个关系型数据库(例如 mysql、Oracle) 中的数据导入到 Hadoop.
表格 7 Sqoop1 与 Sqoop2 比较
比较 | Sqoop1 | Sqoop2 |
---|---|---|
架构 | 仅仅使用一个 Sqoop 客户端 | 引入了 Sqoop server 集中化管理 connector,以及 rest api,web,UI,并引入权限安全机制 |
部署 | 部署简单,安装需要 root 权限,connector 必须符合 JDBC 模型 | 架构稍复杂,配置部署更繁琐 |
使用 | 命令行方式容易出错,格式紧耦合,无法支持所有数据 类型,安全机制不够完善,例如密码暴漏 | 多种交互方式,命令行,web UI,rest API,conncetor 集中化管理,所有的链接安装在 Sqoop s erver 上,完善权限管理机制,connector 规范化,仅仅负责数据的读写 |
备注:sqoop1 和 sqoop2 并不兼容。
图 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 | 数据存在更新;不存在插入 |
备注:
- 导入时--delete-target-dir 和-- incremental 参数不能并用。
- 导入分区表,需要创建有分区的表,分区 有按日期、范围、列表等。示例如下
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 |
Extract | Extract 进程运行在数据库源端上,它是 Golden Gate 的捕获机制,可以配置 Extract 进程来做如下工作: 1:初始数据装载:对于初始数据装载,Extract 进程直接从源对象中提取数据 2:同步变化捕获:保持源数据与其它数据集的同步。初始数据同步完成后,Extract 进程捕获源数据的变化;如 DML 变化、 DDL 变化等 |
Replicat | Replicat 进程是运行在目标端系统的一个进程,负责读取 Extract 进程提取到的数据(变更的事务或 DDL 变化)并应用到目标数据库,就像 Extract 进程一样,也可以配置 Replicat 进程来完成如下工作: 1:初始化数据装载:对于初始化数据装载,Replicat 进程应用数据到目标对象或者路由它们到一个高速的 Bulk-load 工具上; 2:数据同步,将 Extract 进程捕获到的提交了的事务应用到目标数据库中; |
Collector | Collector 是运行在目标端的一个后台进程,接收从 TCP/IP 网络传输过来的数据库变化,并写到 Trail 文件里 |
Trails | 为了持续地提取与复制数据库变化,GoldenGate 将捕获到的数据变化临时存放在磁盘上的一系列文件中,这些文件就叫做 Trail 文件 |
Data Pumps | Data Pump 是一个配置在源端的辅助的 Extract 机制,Data Pump 是一个可选组件,如果不配置 Data Pump,那么由 Extract 主进程将数据发送到目标端的 Remote Trail 文件中;如果配置了 Data Pump,会由 Data Pump 将 Extract 主进程写好的本地 Trail 文件通过网络发送到目标端的 Remote Trail 文件中 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论