CloudCanal x Hive 构建高效的及时数仓

[复制链接]
发表于 2024-5-12 17:27:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
简述

CloudCanal 最近对于全周期数据流动进行了开端探索,买通了
Hive 目的端的及时同步,为及时数仓的构建提供了支持,这篇文章扼要做下分享。

  • 基于临时表的增量合并方式
  • 基于 HDFS 文件写入方式
  • 临时表统一 Schema
  • 使命级的临时表
基于临时表的增量合并方式

Hive 目的端写入方式和 Doris
相似,需要在目的表上额外添加一个 __op(0:UPSERT,1:DELETE)字段作为标记位,实际写入时会先将源端的变动先写入临时表,终极合并到实际表中。
CloudCanal 的设计焦点在于,每个同步表对应两张临时表,通过瓜代合并的方式,确保在一张临时表进行合并时,另一张可以或许接收新变动,从而提升同步效率和并发性。

Hive 提供了两种合并方式:INSERT OVERWRITE(所有版本均支持),MERGE INTO(Hive 2.2.0 之后支持且需要是 ACID 表)
  1. -- INSERT OVERWRITE 语法
  2. INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  3.   [ROW FORMAT row_format] [STORED AS file_format]
  4. SELECT ... FROM ...
  5. -- MERGE INTO 语法
  6. MERGE INTO <target table > AS T USING < source expression / table > AS S
  7. ON <boolean expression1>
  8.     WHEN MATCHED [AND <boolean expression2>] THEN
  9. UPDATE SET <set clause list>
  10.     WHEN MATCHED [AND <boolean expression3>] THEN
  11. DELETE
  12.     WHEN NOT MATCHED [AND <boolean expression4>] THEN INSERT VALUES<value list>
复制代码
使命级的临时表

在大数据场景下,多表汇聚的环境十分普遍,CloudCanal 在构建临时表时,利用源端的订阅 Schema Table 信息,创建差别的临时表。
通过这种方式,无论是相同或差别的使命、相同或差别的 Schema(源端)、相同或差别的 Table(源端),都能将数据写入差别的临时表,终极合并到同一个实际表中,互相之间不会产生影响。

基于 HDFS 文件的写入方式

Hive 是创建在 Hadoop 体系上的数据仓库,而实际的数据存储在 HDFS 中。
如果直接通过 HQL 将增量数据写入 Hive,Hive 会将 HQL 转化为 MR Job,由于每一个 MR Job 处置惩罚速率相对较慢,这将导致增量性能极其差。
CloudCanal 在进行数据写入的时候,选择的是绕过 Hive 这层,直接写入 HDFS 文件系统。
如今支持 HDFS 文件格式:Text、Orc、Parquet。
临时表统一 Schema

基于临时表构建的增量方式,如果临时表分散在差别的 Schema 中,将给 DBA 的管理带来不便。
为了简化管理,CloudCanal 将所有临时表构建在统一的 Schema 下,并答应用户自界说其临时表路径。
示例

预备 CloudCanal

添加数据源


  • 数据源管理 -> 添加数据源, 添加 MySQL、Hive


创建同步使命


  • 选择源端 MySQL 和目的端 Hive,同步的 Schema 和 Table,高级参数含义参考 MySQL -> Hive

  • 使命创建第四步,点击 设置分区键
  • 选择 分区键范例 以及 HDFS 文件范例


  • 点击下一步,创建使命即可

将来方向

文件 Append 写入方式

如今 HDFS 文件写入处置惩罚,是每批数据写到一个文件中,并不会处置惩罚汗青数据文件,更加合理的方式是基于汗青文件进行 Append
追加,写满之后再切换为下一个文件。
提供参数优化 MR 处置惩罚速率

如今 CloudCanal 并没有提供参数入口用于优化 MR 处置惩罚速率,而是自动使用用户所设置的,将来 CloudCanal 将提供一个参数入口用于用户自界说每一个
MR Job 的处置惩罚并行度等优化参数。
支持 MERGE INTO 合并方式

如今 CloudCanal 仅支持 INSERT OVERWRITE 的合并方式,这种方式更为通用,而 MERGE INTO 此种合并方式速率更快,但限制较多,将来
CloudCanal 也会支持此种合并方式。
支持自界说分区键

如今 CloudCanal 仅支持按照日期选择分区键,如今临时不支持更多分区键的选择,将来 CloudCanal 会提供更多分区键的选择。
总结

本篇文章简单介绍 CloudCanal 对于全生命周期的数据流动的开端探索,并通过 MySQL -> Hive 示例介绍其使用。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表