粗糧廠的基于spark的通用olap之間的同步工具項目

粗糧廠的基于spark的通用olap之間的同步工具項目

  • 1 項目背景
  • 2 項目實現
    • 2.1 實現原理
    • 2.2 細節要點
  • 3 抽樣說明
  • 4 項目運行狀態
    • 4.1 運行速度
    • 4.2 項目吞吐
    • 4.3 穩定性

說的比較簡單,有需要的可以留言,我不斷補充完善

1 項目背景

我們公司內部的需要一款,能在不同的olap之間做數據傳遞與拷貝,例如 iceberg到doris,到mysql,甚至到kafka的,這么一個數據同步工具,要盡可能簡單,盡可能維護容易。所以有了這么一個項目的誕生,目前可以實現,通過一條簡短的shell命令,實現不同數據庫與存儲之間的數據拷貝。

目前這套方案,在公司內部已經部署4個數據團隊,服務對象產品+數據研發 超過100人,直接使用使用的業務對象,超過 4000人。

2 項目實現

2.1 實現原理

目前的實現是通過spark來實現,分為兩個部分:

  • 1 寫入同步信息:同步任務記錄,是一個很簡單的,通過shell 傳參,調用一個spark任務,執行一個簡單的,數據插入動作,將 數據源表,目標,持有人,過濾或想要保留的字段,數據篩選項等一些信息,傳入spark任務中,并將數據寫入一個mysql中保存。其中源表與目標表,通過 catalog__database__schema__tablename的方式保存,并維護了一套catalog,通過前綴就可以知道數據在哪個引擎的哪個表中。
  • 2 讀取同步信息:一個常駐的,死循環的spark任務,會定期遍歷mysql,會篩選出目前符合條件的,未過期的,同步任務,使用ExecutionContext 和 Future ,來并發執行同步任務,通過源信息,與反射 ,維護一個連接的配置項,來做隔離,保證數據傳入時,不會涉及隱私信息

2.2 細節要點

  • 并發部分,可以通過【讀取同步信息】 任務部分啟動時,動態傳參,來控制數據流量
  • 在任務中,維護了3個列表,分別保證,同一個任務只會執行一次,同一個目標表,同一時間只有一個任務在寫入,任務執行超過配置時間,會自動殺死,并允許新的任務調起,這樣就可以保證不會觸發目標的鎖,并控制重復提交
  • 通過對不同傳入參數解析,對于每個目標引擎單獨部署獨立的同步任務,做到資源隔離
  • spark任務 每個并發執行有做到很好的異常捕獲,發生問題時,可以調用報警接口,發送信息到持有人飛書中;對于常駐的 【讀取同步信息】整體任務監控,做到2天殺死重新啟動,并每5分鐘pid判活,保證任務的執行中
  • 任務監控與判斷,對目標數據與原始數據做數據量校驗,對數據過程中的日志做接受,掃描錯誤日志等,保證要給

3 抽樣說明

這里抽樣說明一下 ,iceberg 同步數據到hologres 時的要點,其實整體的使用都相同,不過在開發的時候,可以根據不同的引擎做不同的細節調整 : 例入hologres

  • 使用spark-connector-hologres的連接器寫入數據,連接器會先在hologres引擎中創建臨時表,數據寫入完成后,再做insert overwrite動作,因為分布式存儲的問題,所以就需要在代碼里手動執行set hg_experimental_force_sync_replay = on; 來保證元數據在不同節點的同步
  • 使用hologres連接器,對原始數據量做判斷,超過1千萬的,執行serverless,也就是后被隱藏能源!
  • 增加1次的任務重試,減少因為元數據不同步導致的表不存在的bug
  • 目標數據是視圖的方式,也有分區表,可以在代碼中做判斷并刷新視圖,保證數據插入可以兼容

總的來說,可以根據不同的業務目標庫與使用方法,做單獨的優化迭代,保證到每次的同步都是最優的選項

4 項目運行狀態

還是以iceberg 到 hologres 為例,某個實例的spark資源情況為 180個 Executor,每個4G,16G的DM,參數配置為:

--conf spark.sql.catalog.iceberg_zjyprc_hadoop.cache-enabled=false
--conf spark.sql.adaptive.coalescePartitions.initialPartitionNum=30
--conf spark.network.timeout=180000
--conf spark.slow.shuffle.fetch.time.blacklist.threshold=60000
--conf spark.speculation=false
--conf spark.excludeOnFailure.enabled=false
--conf spark.task.maxFailures=1

4.1 運行速度

目前 5000w條數級別的數據量,大概需要 16-17分鐘,而且這里面有一半的時間時因為hologres連接器在內部重新shuffle,如果目標是mysql之類的,速度會提高至少一半

4.2 項目吞吐

目前每日同步 9000張表,總數據量大概 1-2T左右,基本可以滿足業務需求

4.3 穩定性

通過上述的監控與定期重啟,配合計算引擎的升級,同步迭代工具的使用,例如hologres 支持了insert overwrite 命令,可以實現寫cpu打滿也不會影響讀的使用,同步迭代最新版本,可以保證業務的高可用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96139.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 時間戳

在C#中,獲取當前時間的毫秒級時間戳可以通過多種方式實現。以下是幾種常見的方法:方法1:使用DateTime和DateTimeOffsetlong timestamp (long)(DateTimeOffset.Now.ToUnixTimeMilliseconds()); Console.WriteLine(timestamp);方法2&#xff1…

【牛客刷題】REAL792 小O的平面畫圓

文章目錄 一、題目介紹 1.1 輸入描述 1.2 輸出描述 1.3 示例 二、算法設計思路 2.1 核心問題分析 2.2 圖解兩個圓的位置關系 2.2.1. 相離 (Separate) 2.2.2. 外切 (Externally Tangent) 2.2.3. 相交 (Intersecting) 2.2.4. 內切 (Internally Tangent) 2.2.5. 包含 (Containing)…

uniapp:微信小程序使用Canvas 和Canvas 2D繪制圖形

一、Canvas 畫布 canvas 組件 提供了繪制界面,可以在之上進行任意繪制 功能描述 Canvas 畫布。2.9.0 起支持一套新 Canvas 2D 接口(需指定 type 屬性),同時支持同層渲染,原有接口不再維護。 二、Canvas 和Canvas 2D 區…

word如何轉換為pdf

pip install pywin32import os import win32com.client import pythoncom # 新增:用于處理COM線程 import sysdef docx_to_pdf(docx_path, pdf_pathNone):"""將Word文檔轉換為PDF格式,修復退出時的COM錯誤"""if not os.p…

服務器Linux防火墻怎樣實現訪問控制

在互聯網世界里,Linux服務器就像一座城池,而防火墻便是城池的守衛者。沒有防火墻,外部的任何流量都能毫無阻攔地進入服務器;而有了防火墻,就可以像設關卡一樣,對進出城門的人進行盤查和控制。對企業運維人員來說&#…

【原創理論】Stochastic Coupled Dyadic System (SCDS):一個用于兩性關系動力學建模的隨機耦合系統框架

【原創理論】Stochastic Coupled Dyadic System (SCDS):一個用于兩性關系動力學建模的隨機耦合系統框架 作者:[望月,GPT5,GPT-O3,Gemini2.5pro] 分類: 人工智能 理論模型 交叉學科 系統科學 人性 愛情 標簽: 關系動力…

星圖云開發者平臺新功能速遞 | 微服務管理器:無縫整合異構服務,釋放云原生開發潛能

在構建現代數字化應用的過程中,開發者常常面臨一個關鍵挑戰:如何高效、安全地集成和復用既有的復雜服務或自有業務系統?這些服務可能是核心算法引擎、遺留業務邏輯模塊,或是特定的SaaS能力。傳統方式下,將它們融入新的…

數據結構:構建 (create) 一個二叉樹

目錄 問題的本質——什么信息才能唯一確定一棵樹? 推導“最佳拍檔”——哪兩種遍歷序列能行? 遞歸思想——如何構建一棵樹? 第1步:確定整棵樹的根節點 第2步:劃分左右子樹的成員 第3步:遞歸構建左右子…

【STM32】HAL庫中的實現(五):ADC (模數轉換)

什么是 ADC(模數轉換器) ADC(Analog to Digital Converter)是將 模擬信號(電壓)轉換成數字信號(數值) 的器件。 在 STM32 中,ADC 通常具有以下特性:特性描述分…

智慧校園中IPTV融合對講:構建高效溝通新生態

在智慧校園的建設浪潮里,IPTV融合對講系統宛如一顆璀璨的新星,以其獨特的功能和強大的優勢,為校園的溝通與管理帶來了全新的變革,構建起一個高效、便捷、智能的溝通新生態。從日常溝通層面來看,IPTV融合對講系統打破了…

智能合約里的 “拒絕服務“ 攻擊:讓你的合約變成 “死機的手機“

你有沒有遇到過手機突然卡死,點什么都沒反應的情況?在區塊鏈世界里,智能合約也可能遭遇類似的 "罷工"—— 這就是 "拒絕服務攻擊"(Denial of Service,簡稱 DoS)。今天用大白話講講合約…

安全設計-防止非法移機

前言我們的設備在實際使用過程中,在我們的巡查機制粒度下,發現依然有設備被非法移動到其他非計劃點位。因此,我們需要設計一套及時預警,但是對客戶無感,不影響業務辦理的防范機制。1.方案設計交互圖2.方案說明 2.1方案…

OpenHarmony之三方庫適配深度實踐:從移植到合規的全鏈路指南

1. 為什么要做三方庫適配?——更深層的價值分析 維度 現狀痛點 預期收益 深度價值 生態 成熟開源庫無法直接運行 復用 10+ 年開源沉淀,提升功能覆蓋率 避免生態碎片化:通過標準化適配流程,確保不同廠商對同一庫的實現一致 性能 JS 層重實現耗 CPU 原生 C/C++ 加速 3~10 倍 …

2025年09月計算機二級MySQL選擇題每日一練——第一期

計算機二級中選擇題是非常重要的,所以開始寫一個每日一題的專欄。 答案及解析將在末尾公布! 今日主題:MySQL 基礎概念 1、以下關于數據庫的特點中,描述正確的是( ) A. 數據無冗余 B. 數據不可共享&#xff…

JAVA字符串操作——在藍橋杯的基本應用

我們來系統地梳理一下 Java 中的字符串操作。Java 的字符串操作非常豐富,主要涉及到 String、StringBuilder 和 StringBuffer 這三個核心類。 目錄 一、核心類簡介 二、String 類的常用操作 1. 創建字符串 2. 獲取基本信息 3. 比較字符串 4. 查找與判斷 5. 轉…

【深度學習基礎】PyTorch Tensor生成方式及復制方法詳解

目錄PyTorch Tensor生成方式及復制方法詳解一、Tensor的生成方式(一)從Python列表/元組創建(二)從NumPy數組創建(三)特殊初始化方法(四)從現有Tensor創建(五)…

動態規劃:入門思考篇

1. 簡單類比 假如我們要求全國人數,那么我們只要知道各個省的人數,然后將各個省的人數相加即可,要想知道各個省的人數,只要將這個省下面所有的市人數相加即可,同樣,如果想要知道各個市的人數,只…

小楊的 X 字矩陣(舉一反三)-洛谷B3865 [GESP202309 二級]

題目描述 小楊想要構造一個 X 字矩陣( 為奇數),這個矩陣的兩條對角線都是半角加號 ,其余都是半角減號 - 。例如,一個 55 的 X 字矩陣如下: --- --- ---- --- --- 請你幫小楊根據給定的 打印出對應的“X …

數據組合與合并:Pandas 數據整合全指南 +缺失值處理

數據組合與合并:Pandas 數據整合全指南在進行數據分析之前,數據清洗與整合是關鍵步驟。 遵循“整潔數據”(Tidy Data)原則: 每個觀測值占一行每個變量占一列每種觀測單元構成一張獨立的表格 整理好數據后,常…

c#聯合halcon的基礎教程(案例:亮度計算、角度計算和缺陷檢測)(含halcon代碼)

目錄 1.環境配置 2.案例一:亮度計算 halcon代碼: 主界面代碼: 3.案例二: 角度計算 halcon代碼: 主界面代碼: 4.案例三:缺陷檢測 halcon代碼: 主界面代碼: 通過…