構建技術中臺——基於SQL的批流一體化ETL

2020-12-25 EAWorld

轉載本文需註明出處:微信公眾號EAWorld,違者必究。

本文介紹了 SparkSQL 和 Flink 對於批流支持的特性以及批流一體化支持框架的難點。在介紹批流一體化實現的同時,重點分析了基於普元 SparkSQL-Flow 框架對批流支持的一種實現方式。希望對大家的工作有所幫助,也希望能對 DatasetFlow 模型作為框架實現提供一些啟發。

目錄:

1.SparkSQL 和 Flink 對於批流支持的特性介紹

2.基於SparkSQL-Flow的批量分析框架

3.基於SparkStreaming SQL模式的流式處理支持

4.對於批流一體化ETL的思考

一、SparkSQL 和 Flink

對於批流支持的特性介紹

關於流和批的一些爭論

對於廣泛使用的Spark和新秀Flink,對於批和流實現方式上,以及在論壇和一些文章上,對批和流都有不同看法。批是流的特例 還是 流是批的特例?

1.從批的角度看,流是多個批次一份一份的進行。無限個這樣批次構成整個流處理流程,類如SparkStreaming的處理模式;

2.從流的角度看,批是流的有限流處理。它只不過在某個時間點,完成某個條件停止了而已;類如 Flink 的處理模式;

Spark 和 Flink 都具有流和批處理能力,但是他們的做法是截然相反。Spark Streaming是把流轉化成一個個小的批來處理,這種方案的一個問題是我們需要的延遲越低,額外開銷佔的比例就會越大,這導致了Spark Streaming很難做到秒級甚至亞秒級的延遲。Flink是把批當作一種有限的流,這種做法的一個特點是在流和批共享大部分代碼的同時還能夠保留批處理特有的一系列的優化。數據倉庫早期以及大數據早期都是從批處理開始的,所以很多系統都是從批處理做起,包括Spark。在批處理上Spark有著較深的積累,是一個比較優秀的系統。隨著技術的發展,很多原來只有批處理的業務都有了實時的需求,流處理將會變得越來越重要,甚至成為一些數據分析的主要場景,如實時管控、預警相關。

Spark 和 Flink 的異同點

Flink 早期僅支持流式處理,這幾年的Flink無論從API組織,還是運行方式,還是多樣性都越來越像Spark。

批和流是數據融合的兩種應用形態

傳統的數據融合通常基於批模式。在批的模式下,我們會通過一些周期性運行的ETL JOB,將數據從關係型資料庫、文件存儲向下遊的目標資料庫進行同步,中間可能有各種類型的轉換。

與批模式相比相比, 其最核心的區別是將批量變為實時:輸入的數據不再是周期性的去獲取,而是源源不斷的來自於業務的日誌、消息隊列的消息。進而通過一個實時計算引擎,進行各種聚合運算,產生輸出結果,並且寫入下遊。Spark 和 Flink 都能夠支持批和流兩種概念。只不過像 Flink,其原生就是為流而生,所以在流處理上更自然。

Spark 是有太多包袱,Spark 最早採用 RDD 模型,達到比 MapReduce 計算快 100 倍的顯著優勢,對 Hadoop 生態大幅升級換代。RDD 彈性數據集是分割為固定大小的批數據,自動容錯、位置感知、本地計算、可調度可伸縮等眾多重要特性。RDD 提供了豐富的底層 API 對數據集做操作,為持續降低使用門檻,Spark 社區開始開發高階 API:DataFrame/DataSet,Spark SQL 作為統一的 API,掩蓋了底層,同時針對性地做 SQL 邏輯優化和物理優化。Spark 早期的主要目標是替代 MapReduce,MapReduce 是大數據批處理的核心模型。

二、基於SparkSQL-Flow的

分析框架

何為 SparkSQL-Flow

1.一個由普元技術部提供的基於 SparkSQL 的開發模型;

2.一個可二次定製開發的大數據開發框架,提供了靈活的可擴展 API;

3.一個提供了 對文件,資料庫,NoSQL、流處理等統一的數據開發模式;

4.基於 SQL 的開發語言和 XML 的模板配置,支持 SparkSQL UDF 的擴展管理;

5.支持基於 Spark Standlone,Yarn,Mesos 資源管理平臺;

6.支持多種平臺Kerberos認證(開源、華為、星環)等平臺統一認證;

SparkSQL Flow XML 概覽

用戶只需要定義 Source,Transformer,Target 幾個核心組件:

1.Source 數據源:支持Data、DB、File、NoSQL、MQ 等眾多源;

2.Transformer 為上述定義的數據源和已有的Transformer 間的組合操作,一般為SQL;

3.Target 為輸出目標,支持show、DB、File、NoSQL、MQ 等眾多目標,支持類型基本和源相同;

4.用戶可以在Properties定義一些變量,作為Source/Transformer/Target 的宏替換;

SparkSQL Flow 適合的場景

1.批量 ETL;

2.非實時分析服務;

3.流式 ETL;

支持從多種獲得數據源:

1.支持文件:JSON、TextFile(CSV)、ParquetFile、AvroFile

2.大數據:Hive、HDFS

3.支持RDBMS資料庫:PostgreSQL、 MySQL、Oracle

4.支持 NOSQL 資料庫:Hbase、MongoDB、Redis

5.Streaming:JMS、AMQP、Kafka、Socket

三、基於SparkStreaming

SQL模式的流式處理支持

SparkSQL-Flow 流式處理支持

ALL in SQL 的設計,能給數據開發人員提供極大方便,複雜SQL的表達能力也不弱。

SparkSQL-Flow 流式處理和批處理的配置沒什麼不同,定義一個流式 Source,如Kafka。流或批模式是由 Source 的實現決定。SparkSQL-Flow 在加載底層 SPI 來識別該 Source 是 Streaming 模式,還是批處理模式。加載時,配置的 Source 中有任意一個是 Streaming 類型,則認為是流處理模式。

SparkSQL-Flow流處理過程中的關聯

在 ETL 或者一些實時流處理中,我們常常需要對數據做一些關聯,如字典表關聯、欄位轉義等操作。這在 數據處理業務場景中很常見。

我們在 Flow XML 中定義多個Source,這樣在流處理過程中,流可以在任意 Transformer 中關聯其他 Source 表中的欄位。另外,我們可以對作為關聯的 Source(Transformer的結果亦可) 做 cache 處理,這樣根據 Spark 的模式,該表處於內存中,且整個Job 運行時不會再次觸發該Source 的 Stage,可以提高性能。

除了使用 Select ... Join 的方式關聯,還可以使用自定義 UDF 的方式關聯欄位,UDF 中可以有轉換、調用資料庫、可以調用 RESTApi 等等。

四、對於批流一體化ETL的思考

Kettle ETL 工具

提到 ETL 不得不提 Kettle。批、流、數據源、多樣性 大多數設計的ETL工具在他面前都相形見絀。

Kettle 作業是生成了一個 dbr 文件,該 dbr 本質上是 Kettle 支持的特有規範的一種 XML,Kettle 是實現了執行該 XML 規範的一種解釋器。

但是 Kettle 的缺點很明顯,他的數據處理都是 Local 模式,對於大數據系統,把數據拉到運行節點再計算缺陷是很明顯的。並且作業無法並行化,雲化,無法利用大規模集群的算力。

DataX

DataX 是阿里開源的一個異構數據源離線同步工具,致力於實現包括關係型資料庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構數據源之間穩定高效的數據同步功能。

DataX設計理念

DataX本身作為數據同步框架,將不同數據源的同步抽象為從源頭數據源讀取數據的Reader插件,以及向目標端寫入數據的Writer插件,理論上DataX框架可以支持任意數據源類型的數據同步工作。同時DataX插件體系作為一套生態系統, 每接入一套新數據源該新加入的數據源即可實現和現有的數據源互通。

DataX 理論上也支持流處理,不過他的處理方式跟 Spark 類似,流是當做無限的批來處理。如果了解SpringBatch的話,DataX 更像是多線程的 SpringBatch 的架構。DataX 沒有提供設計器,他提供了豐富的Reader和Writer和易擴展的插件系統。和 Kettle一樣,DataX 也需要把數據拉到本地計算,並不具有分布式處理能力。

理想中的批流一體ETL

具有如 Kettle 般的算子表達能力,又具有完全的大數據處理能力。

SparkSQL-Flow 是基於Spark架構,天生具有分布式、本地計算、完全SQL開發的批流一體化計算框架。

數據中臺之批流融合框架和產品

框架、計算平臺:

1.Spark

2.Flink

3.Datax

4.SparkSQL-Flow

相關產品:

1.DataWorks

2.DataPipeline

DataWorks: DataWorks(數據工場,原大數據開發套件)是阿里雲重要的PaaS(Platform-as-a-Service)平臺產品,為您提供數據集成、數據開發、數據地圖、數據質量和數據服務等全方位的產品服務,一站式開發管理的界面,幫助企業專注於數據價值的挖掘和探索。

DataPipeline: 批流一體的數據融合平臺 .主要用於各類數據融合、數據交換場景。支持大數據、分布式、水平擴展、圖形化設計器的數據交換平臺。

SparkSQL-Flow實現了一個以SparkSQL為基礎,以XML為載體的一種批流解釋器。在國內某大型保險內供數項目所使用。大大減少了Spark程序開發難度,並且有預留了Spark原生優化。且以SQL的方式開發數據大大降低了業務梳複雜度以及保證了供數、驗數算法口徑的一致性。

關於作者:震秦,普元資深開發工程師。專注於大數據開發 8 年,擅長 Hadoop 生態內各工具的使用、優化和部分定製開發。曾參與國內多省市公安項目實施,負責大數據數倉設計、批處理和調度工具實現。

相關焦點

  • Hologres+Flink流批一體首次落地4982億背後的營銷分析大屏
    簡介:本篇將重點介紹Hologres在阿里巴巴淘寶營銷活動分析場景的最佳實踐,揭秘Flink+Hologres流批一體首次落地阿里雙11營銷分析大屏背後的技術考驗。藉此之際,我們將陸續推出雲原生實時數倉雙11實戰系列內容,本篇將重點介紹Hologres在阿里巴巴淘寶營銷活動分析場景的最佳實踐,揭秘Flink+Hologres流批一體首次落地阿里雙11營銷分析大屏背後的技術考驗。
  • 為什麼阿里雲要做流批一體?
    同時,這也意味著 Flink 在阿里的發展已經進入第二個階段,從全鏈路實時化進階到全鏈路流批一體化。技術上,阿里 2019 年收購 Flink 的創始公司 Ververica 後,投入近百名工程師到 Flink 技術研發和社區工作中,在 Flink 基於流實現批計算的能力上做了非常多工作,其中有一些特性優先在雙 11 落地,後續也會全部推進到社區裡。
  • Flink流批一體在阿里雙11首次落地的背後
    Flink 在阿里的發展始於搜索推薦場景,因此搜尋引擎的索引構建以及機器學習的特徵工程都已經是基於 Flink的 批流一體架構。今年雙11,Flink 更進一步,利用流批一體計算能力,助力數據中臺實現更加精準的實時離線交叉數據分析和業務決策。
  • 用於數據分析的各類主流ETL 工具比較,哪種最適合你
    這些通常是基於雲端的解決方案,能夠為現有數據源到雲端數據倉庫的各種數據提供端到端的ETL支持。它們也是針對日益增長的、基於網絡的大數據流量所構建的。 本文將深入分析各種現有ETL工具的優、缺點,並快速瀏覽各種最新的ETL平臺。
  • 基於PLM 的工程機械產品一體化工程變更管理研究*
    林建軍等[5] 從工程變更的需求出發,提出了基於PDM 的工程變更模型和變更流程,並結合PDM 中已有的工作流管理技術和生命周期管理技術,闡述了如何保證變更流程自動化控制和變更數據的正確傳遞與演變的關鍵問題。唐桂軍等[6] 針對企業信息化工程變更管理過程中存在的主要問題,並結合實例提出了工程變更管理的優化過程和基於Windchill 的PDM 系統工程變更管理模型。
  • Flink 流模式跑離線任務
    通常的認識是:Flink 流模式跑流任務,批模式跑批任務,用流模式跑離線任務也是個有意思的事情雖然新版 Flink 已經在 sql
  • 在Pytorch中構建流數據集
    如果我們簡單地按照批處理的方式進行所有的移位和翻轉,那麼批處理中就會充斥著與其他示例過於相似的示例,從而使模型不能很好地泛化。這些低效率的核心原因是,管道是以分段作為基本單元運行,而不是在音軌上運行。這裡就需要依靠Pytorch中的IterableDataset 類從每個音軌生成數據流。
  • 商務智能軟體FineBI的ETL處理
    ETL轉換是指對分布的、異構數據源中的數據,比如說關係數據等底層數據進行一定的轉換,然後將轉換後的資料庫保存在中間層中,成為數據分析的基礎。下面將通過商務智能軟體FineBI介紹。比如說我們想要基於業務包外部的數據表添加一個ETL轉換表至BIdemo業務包中,那麼該如何選擇外部數據表呢?
  • SQL調優--記一次表統計信息未及時更新導致查詢超級慢
    已建立索引未分區當etldate為 '2016-08-12' 及以前的時間時,本查詢5秒出數據,當etldate為 '2016-08-16' 及以後的時間時,本查詢出不來數據。貼上問題sql:做過數據欄位處理,針對本篇主題注意點放在查詢因為日期的選擇不同導致查詢時間變的超級慢,而不是改變sql寫法比如用臨時表,強制索引上。
  • 2020百度雲智峰會「智能中臺」論壇:AI中臺+知識中臺加快落地
    在下午的「智能中臺」主題論壇上,百度智能雲介紹了知識中臺、AI中臺的方案架構與產業實踐,以及以雙中臺為底座建設的智能客服、智能理賠、智能辦公等智能應用。數位來自企業諮詢、電網能源、通訊信息、大健康領域的企業嘉賓分享了構建企業智能中臺的實踐經驗。
  • 破除「中臺」質疑 企業構建數據中臺避坑指南
    也有從技術的角度來探討,自身如何構建技術平臺,迭代提升效率。阿博茨根據為客戶提供服務的經驗,總結了數據中臺的常見誤區和避坑原則:誤區1: 直接對標阿里,盲目抄作業數據中臺為誰而建?數據中臺解決的核心問題是什麼?數據中臺帶來的直接收益是什麼?不結合自身實際業務情況,直接對標阿里,容易直接入坑。
  • 第九屆致遠互聯協同應用大賽走進湖南六建 構建中臺釋放管理潛能
    作為數位化轉型升級先行企業中的一員,湖南六建深諳協同管理的重要價值。為進一步深入和優化組織管理應用,湖南六建基於致遠互聯協同管理平臺,在合同管理、黨務管理、NC集成等多個業務場景實現了數位化管控,並通過構建「數據中臺」,保證了業務數據在各組織應用中的高效流轉和實時更新。
  • 2018年ETL工具比較
    這些通常是基於雲的解決方案,並為ETL從現有數據源到雲數據倉庫的數據提供端到端支持。它們也是為了支持日益增長的基於網絡的數據流列表而構建的。對於這篇文章,我們將深入現有ETL工具的世界 - 通常的嫌疑犯,優點和缺點 - 然後快速瀏覽一下現代ETL平臺。
  • 輕量級數據中臺構建思路
    編輯導語:這幾年不少企業都做起了中臺業務,搭建自己的數據中臺;數據中臺把數據統一之後,會形成標準數據,再進行存儲,形成大數據資產層,進而為客戶提供高效服務;本文作者分享了關於輕量級數據中臺構建思路,我們一起來看一下。
  • 基於中臺架構的「新」國土空間基礎信息平臺——六大關鍵技術能力
    由此可見,加快以大數據、雲計算等信息技術為代表的新基礎設施建設,對提升國家治理能力有著舉足輕重的作用。過硬的技術是信息化建設工作進步的重要支撐,上海數慧一直以來都十分重視新技術的研究和應用。本期系列專題將圍繞基於中臺架構的「新」國土空間基礎信息平臺,為大家帶來六大關鍵技術能力的剖析。
  • 水滴上線CONF醫療知識圖譜 構建健康保障數據中臺
    水滴研發體系相關負責人透露,CONF醫療知識圖譜是水滴正在構建的數據中臺組成部分,也是接下來進一步提升智能問診、特藥推薦等服務質量的基礎。據介紹,醫療知識圖譜不僅能夠應用於醫療AI,還可以在保險理賠、藥品控費、大病籌款的風控等多個領域。
  • 如何構建新時代教師教育一體化體系
    師範生培養院校要整合內部資源,可成立教師教育學院,將教師培訓經驗用於師範生培養;支持師範生參與本院校在職教師培訓課程並計入學分;聘請本院校在職教師培訓中教研經驗豐富的參訓學員擔任師範生校外導師。各地政府要協調整合本區域師範生培養院校優質教育理論資源和中小學優質教學實踐資源,合力推進教師教育一體化發展。各地構建師範生培養院校與中小學合作共贏機制。
  • 【理論高地】構建大灣區一體化綜合交通運輸體系
    破解思路與對策建議構建一體化綜合交通運輸體系,既是《粵港澳大灣區發展規劃綱要》的明確要求,也是構建世界一流灣區的必經之路。基於粵港澳大灣區「一國、兩制、三關稅」的實情,以及當前粵港澳大灣區交通建設在行政壁壘、行業藩籬、服務差異等方面的不足,粵港澳大灣區一體化綜合交通運輸體系建設的總體思路,在於以「人民滿意」為評判標準,打破不同行政地區「各自為政」的孤立隔閡,走「共謀、共建、共治、共享」之路。
  • 一篇文章讓深入理解Flink SQL 時間特性
    前言         基於時間的操作(比如 Table API 和 SQL 中窗口操作),需要定義相關的時間語義和時間數據來源的信息。所以,Table 可以提供一個邏輯上的時間欄位,用於在表處理程序中,指示時間和訪問相應的時間戳。
  • 開放合作中臺 騰訊教育構建智慧高校信息化生態圈
    9月10日,騰訊教育在2020全球數字生態大會上,發布「騰訊智慧高校解決方案」,並宣布開放中臺與眾多教育產業公司合作。騰訊雲高等教育行業副總經理李峪指出,基於此方案,騰訊將繼續做擅長的用戶連接和底層科技支撐,給合作夥伴留出充分空間,共同研發產品、打造解決方案,攜手構建高校信息化生態圈。