CloudCanal x Hive 構建高效的實時數倉

来源:https://www.cnblogs.com/clougence/p/18047006/hive_dst_change_data_capture_writer
-Advertisement-
Play Games

CloudCanal 最近對於全周期數據流動進行了初步探索,打通了 Hive 目標端的實時同步,為實時數倉的構建提供了支持,這篇文章簡要做下分享。 ...


簡述

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 示例介紹其使用。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • linux伺服器文件實時同步 1 背景說明 在做系統集群部署時,涉及到兩個或多個伺服器之間文件同步.在軟體層面linux服務環境找到以下兩種同步方式 利用linux NFS功能將網路共用文件掛載成本地目錄 採用文件監聽,實時推送 伺服器資源如下 伺服器1 10.2.4.51 ,作為主伺服器 伺服器2 ...
  • 關於88e1111 phy模塊的配置說明 1、前言 ​ 本次主要是參考了88e1111的phy晶元的數據手冊,對於88e1111這款經典的 10M/100M/1000M 乙太網晶元的一些基礎軟體硬體配置做一些說明,拋磚引玉,有不對之處,請多多指教。 2、88e1111 phy晶元的硬體相關 1、ph ...
  • STM32SPIFLASH讀寫 1.1 SPI註意事項 SPI是同步通信,即通信雙方每次信息交互必會帶有一問一答,這代表在正常的單核MCU(例如STM32)中很難實現軟體模擬的雙向SPI通信(TFT屏幕一類的外設不算,那些頂多屬於單向SPI),因為無法同時發送和接收數據。而在STM32中,硬體實現同 ...
  • 在使用yum工具安裝gcc的時候,報出了signature hdr data: BAD, no. of btyes(9088) out of range 的問題 這是由於centos8中rpm工具存在的一個bug,在校驗安裝包頭部大小的時候,應當限製為64M,但是實際限制了64k 這個問題存在於 r ...
  • 本文分享自華為雲社區《RDS for MySQL Serverless公測上線:彈性伸縮,最高可降成本超80%》,作者:GaussDB 資料庫。 隨著科技的快速發展,我們正在迅速步入一個全新的數字化時代。數字化時代,數據是最寶貴的資源。資料庫作為存儲數據的倉庫,重要性更是不言而喻。 一、業務背景及痛 ...
  • 最近碰到一個 case,值得分享一下。 現象就是一個 update 操作,在 mysql 客戶端中執行提示 warning,但在 java 程式中執行卻又報錯。 問題重現 mysql> create table test.t1(id int primary key, c1 datetime);Que ...
  • SpringData是Spring中數據操作的模塊,包含對各種資料庫的集成,其中對Redis的集成模塊就叫做SpringDataRedis。 技術支持 提供了對不同Redis客戶端的整合(Lettuce和Jedis) 提供了RedisTemplate統一API來操作Redis 支持Redis的發佈訂 ...
  • MySQL 8.0.x中,我們如果按安全規範配置了賬號密碼過期策略的話,那麼如何查看賬號密碼還有多長時間就會過期;如何做好賬號密碼過期監控;以及提前及時處理賬號密碼過期問題就是DBA必須處理的一些事情。這裡簡單討論一下這些事情。個人經驗僅供參考,如有不足或錯誤的地方,敬請指正一二。這篇文章的具體測試 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...