首页 > 其他分享 >CloudCanal x Hive 构建高效的实时数仓

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

时间:2024-03-01 14:48:04浏览次数:14  
标签:数仓 CloudCanal HDFS 临时 写入 Hive Schema

简述

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

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

基于临时表的增量合并方式

Hive 目标端写入方式和 Doris
相似,需要在目标表上额外添加一个 __op(0:UPSERT,1:DELETE)字段作为标记位,实际写入时会先将源端的变更先写入临时表,最终合并到实际表中。

CloudCanal 的设计核心在于,每个同步表对应两张临时表,通过交替合并的方式,确保在一张临时表进行合并时,另一张能够接收新变更,从而提升同步效率和并发性。

image.png

Hive 提供了两种合并方式:INSERT OVERWRITE(所有版本均支持),MERGE INTO(Hive 2.2.0 之后支持且需要是 ACID 表)

-- INSERT OVERWRITE 语法
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  [ROW FORMAT row_format] [STORED AS file_format]
SELECT ... FROM ...

-- MERGE INTO 语法
MERGE INTO <target table > AS T USING < source expression / table > AS S
ON <boolean expression1>
    WHEN MATCHED [AND <boolean expression2>] THEN
UPDATE SET <set clause list>
    WHEN MATCHED [AND <boolean expression3>] THEN
DELETE
    WHEN NOT MATCHED [AND <boolean expression4>] THEN INSERT VALUES<value list>

任务级的临时表

在大数据场景下,多表汇聚的情况十分普遍,CloudCanal 在构建临时表时,利用源端的订阅 Schema Table 信息,创建不同的临时表。

通过这种方式,无论是相同或不同的任务、相同或不同的 Schema(源端)、相同或不同的 Table(源端),都能将数据写入不同的临时表,最终合并到同一个实际表中,互相之间不会产生影响。

image.png

基于 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

    image.png
    image.png

创建同步任务

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

    image.png

  • 任务创建第四步,点击 配置分区键

  • 选择 分区键类型 以及 HDFS 文件类型

    image.png
    image.png

  • 点击下一步,创建任务即可

    image.png

未来方向

文件 Append 写入方式

目前 HDFS 文件写入处理,是每批数据写到一个文件中,并不会处理历史数据文件,更加合理的方式是基于历史文件进行 Append
追加,写满之后再切换为下一个文件。

提供参数优化 MR 处理速度

目前 CloudCanal 并没有提供参数入口用于优化 MR 处理速度,而是自动使用用户所配置的,未来 CloudCanal 将提供一个参数入口用于用户自定义每一个
MR Job 的处理并行度等优化参数。

支持 MERGE INTO 合并方式

目前 CloudCanal 仅支持 INSERT OVERWRITE 的合并方式,这种方式更为通用,而 MERGE INTO 此种合并方式速度更快,但限制较多,未来
CloudCanal 也会支持此种合并方式。

支持自定义分区键

目前 CloudCanal 仅支持按照日期选择分区键,目前暂时不支持更多分区键的选择,未来 CloudCanal 会提供更多分区键的选择。

总结

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

标签:数仓,CloudCanal,HDFS,临时,写入,Hive,Schema
From: https://www.cnblogs.com/clougence/p/18047006/hive_dst_change_data_capture_writer

相关文章

  • 数仓的等待视图中,为什么会有Hashjoin-nestloop
    本文分享自华为云社区《GaussDB(DWS)等待视图之Hashjoin-nestloop》,作者:Arrow0lf。1.业务场景众所周知,GaussDB(DWS)中有3种常见的join方式:HashJon/MergeJoin/NestLoop但在有一些场景中,等待视图中等待状态会显示为:HashJoin-nestloop,如下图所示。这种表示什么含义?2.基本原理......
  • Trino(PrestoSQL)和HiveSQL的时间格式转换对比
    1.获取当前时间--hiveselectfrom_unixtime(unix_timestamp());-->2021-01-0622:53:16--精确到今天的时分秒selectfrom_unixtime(unix_timestamp('2021-12-0713:01:03'),'yyyy-MM-ddHH:mm:ss');-->2021-12-0713:01:03--精确到今天的时分秒指定格式selectcurrent......
  • 数仓实践丨从CU入手优化HStore表
    本文分享自华为云社区《GaussDB(DWS)存储引擎:从CU入手优化HStore表》,作者:yd_261437590。1.前言适用版本:【8.2.1(及以上)】HStore同时拥有处理传统TP场景的事务能力和强大的数据分析能力,但是强大的数据分析能力很可能被小CU问题给破坏,另外,将多个CU排序可以增加HStore的数据聚......
  • Hive insert into 竟然覆盖了原来的数据
      本文章向大家介绍Hiveinsertinto竟然覆盖了原来的数据,主要包括Hiveinsertinto竟然覆盖了原来的数据使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 问题:在使用hive的insertinto往表里插入数据时,却发现原来的数......
  • Apache DolphinScheduler数仓任务管理规范
    前言:大数据领域对多种任务都有调度需求,以离线数仓的任务应用最多,许多团队在调研开源产品后,选择ApacheDolphinScheduler(以下简称DS)作为调度场景的技术选型。得益于DS优秀的特性,在对数仓任务做运维和管理的时候,往往比较随意,或将所有任务节点写到一个工作流里,或将每个逻辑节点单独......
  • 数仓分层
    数仓分层概念:原始--->明细--->汇总(按汇总程度进行划分轻度汇总、中度汇总、重度汇总)(如:按天汇总、按累计n天汇总、特征宽表)Sql查询语句复杂,引入分层,可以方便问题定位,复杂问题简单化。......
  • pyspark集成访问hive数据踩坑记录
    当前环境anaconda3、python3.9.13、jupyter需要安装的pyspark、py4jpyspark和py4j的离线安装包地址Linksforpyspark(tsinghua.edu.cn)和Linksforpy4j(tsinghua.edu.cn)一开我自己没有仔细的对应版本,找了一个pyspark3.4.1的包正常安装上去了,通过pyspark进入shell可以正......
  • 数据库归档工具 pt-archiver 的使用
    简介pt-archiver属于大名鼎鼎的percona工具集的一员,是归档MySQL大表数据的最佳轻量级工具之一。安装官网下载地址,选择PerconaToolkit版本和操作系统平台,具体如下图解压缩,所有工具都在bin目录下使用注意:pt-archiver操作的表必须有主键/root/test_archiver/pt-3......
  • Hive:构建于 Hadoop 之上、让你像写 SQL 一样编写 MapReduce 程序
    Hive介绍本次我们来聊一聊Hive,它是由Facebook开源的一款基于Hadoop的数据仓库工具,用于解决海量结构化日志的数据统计与分析。Hive通过将结构化的数据映射为一张表,并提供类SQL查询功能,让开发人员能够编写SQL进行数据分析。在介绍Hadoop的时候我们说过,使用MapReduce......
  • 关于hadoop hive中使用hive分区功能
    关于hadoophive中使用hive分区功能很多人习惯了使用第三方的工具去连接hive或者hbase数据库,并且使用其中的sql编辑器进行失去了语句的使用来进行数据的分析等一系列的操作,但是一些shell命令也可以在其中运行例如:12341. sethive.exec.dynamic.partition=true; 2. sethive.ex......