如果要從0到1學(xué)習(xí)和引入,作者建議直接上最好的,,比如 ETL 工具傳統(tǒng)的那些就沒必要學(xué)了,,直接學(xué) StreamSets 或者 WaterDrop 即可;實(shí)時(shí)計(jì)算直接學(xué) Flink 即可不用看 Spark 了,;眾多的 OLAP 我們直接學(xué) ClickHouse 或者 Doris 即可其它的也不用看了,;調(diào)度嘛直接 DS 就好了。 0x00 前言ETL 是數(shù)據(jù)倉庫的重要組成部分,,但 ETL 也可以獨(dú)立存在的,。本篇我會(huì)集中起來給大家介紹一些常用的 ETL 工具或者類 ETL 的集成、同步,、計(jì)算,、流程控制工具。 第一部分 0x01 傳統(tǒng) ETL 工具DataStageIBM WebSphere DataStage(下面簡稱 DataStage )是一套專門對(duì)多種操作數(shù)據(jù)源的數(shù)據(jù)抽取,、轉(zhuǎn)換和維護(hù)過程進(jìn)行簡化和自動(dòng)化,,并將其輸入數(shù)據(jù)集市或數(shù)據(jù)倉庫目標(biāo)數(shù)據(jù)庫的集成工具,可以從多個(gè)不同的業(yè)務(wù)系統(tǒng)中,,從多個(gè)平臺(tái)的數(shù)據(jù)源中抽取數(shù)據(jù),,完成轉(zhuǎn)換和清洗,裝載到各種系統(tǒng)里面,。其中每步都可以在圖形化工具里完成,,同樣可以靈活地被外部系統(tǒng)調(diào)度,提供專門的設(shè)計(jì)工具來設(shè)計(jì)轉(zhuǎn)換規(guī)則和清洗規(guī)則等,,實(shí)現(xiàn)了增量抽取,、任務(wù)調(diào)度等多種復(fù)雜而實(shí)用的功能。其中簡單的數(shù)據(jù)轉(zhuǎn)換可以通過在界面上拖拉操作和調(diào)用一些 DataStage 預(yù)定義轉(zhuǎn)換函數(shù)來實(shí)現(xiàn),,復(fù)雜轉(zhuǎn)換可以通過編寫腳本或結(jié)合其他語言的擴(kuò)展來實(shí)現(xiàn),,并且 DataStage 提供調(diào)試環(huán)境,可以極大提高開發(fā)和調(diào)試抽取,、轉(zhuǎn)換程序的效率,。Datastage 操作界面 Datastage 包含四大部件:Administrator,、Manager、Designer,、Director,。 InformaticaInformatica PowerCenter 用于訪問和集成幾乎任何業(yè)務(wù)系統(tǒng),、任何格式的數(shù)據(jù),,它可以按任意速度在企業(yè)內(nèi)交付數(shù)據(jù),具有高性能,、高可擴(kuò)展性,、高可用性的特點(diǎn)。它提供了一個(gè)可視化的,、擁有豐富轉(zhuǎn)換庫的設(shè)計(jì)工具,,這個(gè)轉(zhuǎn)換庫使數(shù)據(jù)轉(zhuǎn)換變成一個(gè)簡單的“拖拽”過程,用戶不需在組件時(shí)編寫腳本語言,??梢酝ㄟ^簡單的操作,完成需求,。使用 PowerCenter,,轉(zhuǎn)換組件能夠被合并到 mapping 對(duì)象中,獨(dú)立于他們的數(shù)據(jù)源和目標(biāo),,有近 20 種數(shù)據(jù)轉(zhuǎn)換組件和近百個(gè)函數(shù)可以調(diào)用,,同時(shí)可以調(diào)用外部的過程和程序,實(shí)現(xiàn)復(fù)雜的轉(zhuǎn)化邏輯,。 Informatica 操作界面 Informatica 的開發(fā)分為六個(gè)步驟: 有興趣更詳細(xì)了解的可以參考這篇文章: https://blog.csdn.net/water_0815/article/details/76512470 KettlePentaho Data Integration,,是一款國外免費(fèi)開源的、可視化的,、功能強(qiáng)大的 ETL 工具,。由于其開源、免費(fèi),、跨平臺(tái),、資料文檔豐富等特點(diǎn)獲得了一大批忠實(shí)粉絲。 Kettle 六大特點(diǎn): Kettle 操作界面 Kettle 的執(zhí)行分為兩個(gè)層次:Job 和 Transformation。這兩個(gè)層次的最主要的區(qū)別在于數(shù)據(jù)的傳遞和運(yùn)行方式,。 在Kettle 中Job 的JobEntry是串行執(zhí)行的,故Job中必須有一個(gè)Start的JobEntry,;Transformation 中的 Step 是并行執(zhí)行的,。 Kettle 也提供了豐富的組件,主要分為十大類:腳本組件,、映射組件,、統(tǒng)計(jì)組件、連接組件,、查詢組件,、流程組件、應(yīng)用組件,、轉(zhuǎn)換組件,、輸出組件,、輸入組件。 有興趣更詳細(xì)了解的可以參考 Kettle 官方文檔,,很詳細(xì)的: https://www./category/base ODI,、Data ServiceODI(Oracle Data Integrator)是 Oracle 公司提供的一種數(shù)據(jù)集成工具,能高效地實(shí)現(xiàn)批量數(shù)據(jù)的抽取,、轉(zhuǎn)換和加載,。ODI 可以實(shí)現(xiàn)當(dāng)今大多數(shù)的主流關(guān)系型數(shù)據(jù)庫(Oracle、DB2,、SQL Server,、MySQL、SyBase)的集成,。 ODI 提供了圖形化客戶端和 Agent(代理)運(yùn)行程序,。客戶端軟件主要用于對(duì)整個(gè)數(shù)據(jù)集成服務(wù)的設(shè)計(jì),,包括創(chuàng)建對(duì)數(shù)據(jù)源的連接架構(gòu),、創(chuàng)建模型及反向表結(jié)構(gòu)、創(chuàng)建接口,、生成方案和計(jì)劃等,。Agent 運(yùn)行程序是通過命令行方式在 ODI 服務(wù)器上啟動(dòng)的服務(wù),對(duì) Agent 下的執(zhí)行計(jì)劃周期性地執(zhí)行,。 ODI 的常見應(yīng)用場景: SAP Data Services 軟件能夠提高整個(gè)企業(yè)的數(shù)據(jù)質(zhì)量。利用出色的數(shù)據(jù)整合,、數(shù)據(jù)質(zhì)量管理和數(shù)據(jù)清理功能,,你能夠從企業(yè)的所有結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)中挖掘價(jià)值;將數(shù)據(jù)轉(zhuǎn)化為隨時(shí)可用的可靠資源,,從中獲取業(yè)務(wù)洞察,,并利用這些洞察簡化流程提高效率。 傳統(tǒng)數(shù)倉時(shí)代,,DataStage 和 Informatica 占據(jù)了絕大多數(shù)市場份額,,Kettle 在中小型 ETL 應(yīng)用場景上也有廣泛應(yīng)用,ODI 和 DS 等 ETL 工具反而使用的不多,。 雖然這些傳統(tǒng) ETL 工具曾經(jīng)風(fēng)靡全球,,是經(jīng)過生產(chǎn)檢驗(yàn)的,并且產(chǎn)品化程度極高,,但都面臨著云時(shí)代的巨大沖擊,,以前不想擁抱不擁抱云,現(xiàn)狀只能擁抱空氣了,。這些當(dāng)時(shí)的巨頭如今市場規(guī)模越來越小,,除去非常傳統(tǒng)老舊的項(xiàng)目,新的項(xiàng)目已經(jīng)很少使用了,,只有開源,、云、SAAS 模式才是出路,。 0x02 集成同步組件Sqoop,、DataXSqoop,SQL-to-Hadoop 即 “SQL到Hadoop 和 Hadoop 到 SQL ”,。是 Apache 開源的一款在 Hadoop 和關(guān)系數(shù)據(jù)庫服務(wù)器之間傳輸數(shù)據(jù)的工具,。主要用于在 Hadoop 與關(guān)系型數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)轉(zhuǎn)移,可以將一個(gè)關(guān)系型數(shù)據(jù)庫( MySQL ,Oracle 等)中的數(shù)據(jù)導(dǎo)入到 Hadoop 的 HDFS 中,,也可以將 HDFS 的數(shù)據(jù)導(dǎo)出到關(guān)系型數(shù)據(jù)庫中,。 Sqoop 的工作機(jī)制: Sqoop 命令的本質(zhì)是轉(zhuǎn)化為 MapReduce 程序。Sqoop 分為導(dǎo)入(import)和導(dǎo)出(export),,策略分為 table 和 query ,,模式分為增量和全量。 Sqoop 的優(yōu)點(diǎn): DataX 是阿里巴巴集團(tuán)內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具/平臺(tái),實(shí)現(xiàn)包括 MySQL,、Oracle,、SqlServer、Postgre,、HDFS,、Hive、ADS,、HBase,、TableStore(OTS)、MaxCompute(ODPS),、DRDS 等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能,。 開源地址:https://github.com/alibaba/DataX 數(shù)據(jù)交換通過 DataX 進(jìn)行中轉(zhuǎn),,任何數(shù)據(jù)源只要和 DataX 連接上即可以和已實(shí)現(xiàn)的任意數(shù)據(jù)源同步。 核心組件: 從一個(gè) JOB 來理解 Datax 的核心模塊組件: DataX 優(yōu)點(diǎn) Sqoop 和 DataX 都是非常流行的來源大數(shù)據(jù)離線同步工具,,相比傳統(tǒng) ETL 工具易用性肯定會(huì)差很多(傳統(tǒng)工具基本都能實(shí)現(xiàn)零代碼開發(fā)純圖形界面操作),,但由于天然具備的大數(shù)據(jù)處理能力而迅速得到普及。 DataX 面世晚了許多,,所以擁有比 Sqoop 更多,、更全、更強(qiáng)的功能,,從而被廣泛接受和使用,。Sqoop 是 Hadoop 生態(tài)系統(tǒng)的重要一員問世比較早了,由于功能簡單穩(wěn)定成熟,,甚至今年05月06日 Apache 董事會(huì)宣布終止 Apache Sqoop 項(xiàng)目,。當(dāng)然這里的中止并非不讓用了,只是不在維護(hù)更新代碼了,,當(dāng)然再次之前 Sqoop 代碼已經(jīng)三年沒有更新了,。 Flume,、CanalFlume 是 Cloudera 提供的一個(gè)高可用的,高可靠的,,分布式的海量日志采集,、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume 支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,,用于收集數(shù)據(jù);同時(shí),,F(xiàn)lume 提供對(duì)數(shù)據(jù)進(jìn)行簡單處理,,并寫到各種數(shù)據(jù)接受方(可定制)的能力。 當(dāng)前 Flume 有兩個(gè)版本 Flume 0.9X 版本的統(tǒng)稱 Flume-og,,F(xiàn)lume1.X 版本的統(tǒng)稱 Flume-ng,。由于 Flume-ng 經(jīng)過重大重構(gòu),與 Flume-og 有很大不同,,使用時(shí)請(qǐng)注意區(qū)分,。 提示 官方這個(gè)圖的 Agent4 的 Sink 畫錯(cuò)了,不應(yīng)該是 Avro Sink ,,應(yīng)該是 HDFS Sink ,。 上圖是 Flume 設(shè)置多級(jí) Agent 連接的方式傳輸 Event 數(shù)據(jù)。也支持扇入和扇出的部署方式,,類似于負(fù)載均衡方式或多點(diǎn)同時(shí)備份的方式,。 Flume 工作的機(jī)制: Flume 優(yōu)勢: Canal 是阿里巴巴旗下的一款開源項(xiàng)目,,純 Java 開發(fā),。基于數(shù)據(jù)庫增量日志解析,,提供增量數(shù)據(jù)實(shí)時(shí)訂閱和消費(fèi),,目前主要支持了 MySQL,也支持 mariaDB,。 很多大型的互聯(lián)網(wǎng)項(xiàng)目生產(chǎn)環(huán)境中使用,,包括阿里、美團(tuán)等都有廣泛的應(yīng)用,,是一個(gè)非常成熟的數(shù)據(jù)庫同步方案,,基礎(chǔ)的使用只需要進(jìn)行簡單的配置即可。 github 地址:https://github.com/alibaba/canal 當(dāng)前的 Canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x Canal 是通過模擬成為 MySQL的 slave 的方式,,監(jiān)聽 mysql 的 binlog 日志來獲取數(shù)據(jù),,binlog 設(shè)置為 row 模式以后,不僅能獲取到執(zhí)行的每一個(gè)增刪改的腳本,,同時(shí)還能獲取到修改前和修改后的數(shù)據(jù),,基于這個(gè)特性,Canal 就能高性能的獲取到 MySQL 數(shù)據(jù)數(shù)據(jù)的變更,。 Flume 和 Canal 都是適用于特定場景下的大數(shù)據(jù)同步組件,,通常用于實(shí)時(shí)數(shù)據(jù)處理場景: DTS、GoldenGateDTS(Data Transmission Service)是阿里云提供的一種數(shù)據(jù)傳輸服務(wù),,功能非常強(qiáng)大,。支持 RDBMS、NoSQL,、OLAP,、Kafka 等各種數(shù)據(jù)源間的數(shù)據(jù)交互,集數(shù)據(jù)同步,、遷移,、訂閱、集成,、加工于一體,助您構(gòu)建安全,、可擴(kuò)展,、高可用的數(shù)據(jù)架構(gòu)。 Oracle GoldenGate 軟件提供了一個(gè)單一的平臺(tái),,這個(gè)平臺(tái)可以為任何企業(yè)環(huán)境實(shí)現(xiàn)秒一級(jí)的災(zāi)難備份,。GoldenGate 是一種基于日志的結(jié)構(gòu)化數(shù)據(jù)復(fù)制方式,它通過解析源數(shù)據(jù)庫在線日志或歸檔日志獲得數(shù)據(jù)的增刪改變化(數(shù)據(jù)量只有日志的四分之一左右),,再將這些變化應(yīng)用到目標(biāo)數(shù)據(jù)庫,,實(shí)現(xiàn)源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫同步、雙活,。 DTS 和 GoldenGate 不同時(shí)期誕生兩款收費(fèi)的數(shù)據(jù)同步工具或服務(wù),,都能夠?qū)崿F(xiàn)異構(gòu)數(shù)據(jù)間的實(shí)時(shí)同步。 ColdenGate 誕生于傳統(tǒng)數(shù)倉時(shí)期,,后來被 Oracle收購了以閉源軟件工具的形式售賣,,通常在關(guān)系型數(shù)據(jù)庫間實(shí)現(xiàn)實(shí)時(shí)同步。DTS 誕生于阿里云,,以一種 SAAS 服務(wù)的形式對(duì)外售賣,,支持目前市面上幾乎所有的數(shù)據(jù)源之間的實(shí)時(shí)同步,可以完全替代 Cannal,。 ColdenGate 主要提供的是后臺(tái)功能好像沒有前端頁面,,但 DTS 跟現(xiàn)在大多數(shù)付費(fèi)版的大數(shù)據(jù)組件一樣提供一套 web 版本的操作和進(jìn)度查看頁面。 Maxwell,、DSG這兩個(gè)數(shù)據(jù)同步工具我也沒聽過,,只是群友們有提到過,這里列出來也給大家個(gè)參考,。 Maxwell 是一個(gè)能實(shí)時(shí)讀取 MySQL 二進(jìn)制日志 binlog,,并生成 JSON 格式的消息,,作為生產(chǎn)者發(fā)送給 Kafka,Kinesis,、RabbitMQ,、Redis、Google Cloud Pub/Sub,、文件或其它平臺(tái)的應(yīng)用程序,。 常見應(yīng)用場景: ETL、維護(hù)緩存,、收集表級(jí)別的 dml 指標(biāo),、增量到搜索引擎、數(shù)據(jù)分區(qū)遷移,、切庫 binlog 回滾方案等,。 官網(wǎng):http:// GitHub 地址:https://github.com/zendesk/maxwell Maxwell 主要提供了下列功能: 除了Maxwell外,,目前常用的MySQL Binlog解析工具主要有阿里的 Canal,、mysql_streamer 。 DSG-RealSync Oracle 數(shù)據(jù)庫同步復(fù)制及容災(zāi)技術(shù),。與傳統(tǒng)的數(shù)據(jù)復(fù)制技術(shù)不同,,DSG RealSync 技術(shù)是針對(duì)數(shù)據(jù)庫提供了基于邏輯的交易復(fù)制方式。該方式通過直接捕獲源數(shù)據(jù)庫的交易,,將數(shù)據(jù)庫的改變邏輯復(fù)制到目標(biāo)系統(tǒng)數(shù)據(jù)庫中,,實(shí)現(xiàn)源系統(tǒng)和目標(biāo)系統(tǒng)數(shù)據(jù)的一致性。 該技術(shù)在復(fù)制上存在以下幾個(gè)特點(diǎn): 有興趣了解的可以參考這篇文章: https://www.cnblogs.com/oracle-dsg/archive/2010/05/27/1745477.html 但說實(shí)話,,大清早亡了,開源技術(shù)那么多,,我們不見得非要使用這些古老的技術(shù)組件了,。 第二部分 承上,我們接著介紹兩種新型 ETL 工具,、大數(shù)據(jù)發(fā)展不同階段產(chǎn)生的六種主要計(jì)算引擎,、五種流程控制組件,。 最后我們簡單討論兩個(gè)話題: 0x01 新型 ETL 工具 傳統(tǒng) ETL 工具,通常工具化程度很高,,不需要編程能力且提供一套可視化的操作界面供廣大數(shù)據(jù)從業(yè)者使用,,但是隨著數(shù)據(jù)量的激增,跟關(guān)系型數(shù)據(jù)庫一樣只能縱向擴(kuò)展去增加單機(jī)的性能,,這樣數(shù)據(jù)規(guī)模的增長跟硬件的成本的增長不是線性的,。而新型 ETL 工具天然適應(yīng)大數(shù)據(jù)量的同步集成計(jì)算,且支持實(shí)時(shí)處理,,但缺點(diǎn)也很明顯,,就是工具化可視化程度低,搭建配置難度也比傳統(tǒng) ETL 工具要高,,并且需要數(shù)據(jù)從業(yè)者具備一定的程序開發(fā)功底而傳統(tǒng)數(shù)倉環(huán)境中的數(shù)據(jù)人絕大多數(shù)是不懂開發(fā)的,。 但相信隨著大數(shù)據(jù)技術(shù)的進(jìn)一步成熟,終究還會(huì)走向低代碼和 SQL 化的方向上去的,。那時(shí)候少部分人負(fù)責(zé)組件/平臺(tái)的開發(fā)和維護(hù),,大部分人使用這些組件去完成業(yè)務(wù)開發(fā)。 StreamSetsStreamsets 是由 Informatica 前首席產(chǎn)品官 Girish Pancha 和 Cloudera 前開發(fā)團(tuán)隊(duì)負(fù)責(zé)人 Arvind Prabhakar 于 2014 年創(chuàng)立的公司,總部設(shè)在舊金山,。 Streamsets 產(chǎn)品是一個(gè)開源,、可擴(kuò)展、UI很不錯(cuò)的大數(shù)據(jù) ETL 工具,,支持包括結(jié)構(gòu)化和半/非結(jié)構(gòu)化數(shù)據(jù)源,,拖拽式的可視化數(shù)據(jù)流程設(shè)計(jì)界面。Streamsets 利用管道處理模型(Pipeline)來處理數(shù)據(jù)流,。你可以定義很多 Pipeline,,一個(gè) Pipeline 你理解為一個(gè) Job 。 Streamsets 旗下有如下三個(gè)產(chǎn)品: StreamSets 開發(fā)頁面 在管道的創(chuàng)建上分為了三個(gè)管道: 管道創(chuàng)建好后,會(huì)根據(jù)需要去選擇對(duì)應(yīng)的組件信息,。 主要有以下幾類組件: WarterDropWaterdrop 項(xiàng)目由 Interesting Lab 開源,是一個(gè)非常易用,,高性能,、支持實(shí)時(shí)流式和離線批處理的海量數(shù)據(jù)處理產(chǎn)品,架構(gòu)于 Apache Spark 和 Apache Flink 之上,。 Spark 固然是一個(gè)優(yōu)秀的分布式數(shù)據(jù)處理工具,,但是直接使用 Spark 開發(fā)是個(gè)不小的工程,需要一定的 Spark 基礎(chǔ)以及使用經(jīng)驗(yàn)才能開發(fā)出穩(wěn)定高效的 Spark 代碼,。除此之外,,項(xiàng)目的編譯,、打包、部署以及測試都比較繁瑣,,會(huì)帶來不少的時(shí)間成本和學(xué)習(xí)成本,。 除了開發(fā)方面的問題,數(shù)據(jù)處理時(shí)可能還會(huì)遇到以下不可逃避的麻煩: Waterdrop 誕生的目的就是為了讓 Spark 的使用更簡單,,更高效,,并將業(yè)界使用 Spark 的優(yōu)質(zhì)經(jīng)驗(yàn)固化到 Waterdrop 這個(gè)產(chǎn)品中,明顯減少學(xué)習(xí)成本,,加快分布式數(shù)據(jù)處理能力在生產(chǎn)環(huán)境落地,。 gitHub 地址: https://github.com/InterestingLab/waterdrop 軟件包地址: https://github.com/InterestingLab/waterdrop/releases 文檔地址: https://interestinglab./waterdrop-docs/ 項(xiàng)目負(fù)責(zé)人 Gary(微信: garyelephant) , RickyHuo(微信: chodomatte1994) Waterdrop 架構(gòu) Waterdrop 使用場景: Waterdrop 的特性: 0x02 計(jì)算引擎上邊兩種新型 ETL 工具的出現(xiàn)簡化了數(shù)據(jù)處理操作,,同步,、集成,、計(jì)算可以統(tǒng)一在一個(gè)工具內(nèi)完成且有不錯(cuò)的界面可以使用,,但對(duì)于一些更加復(fù)雜靈活的場景不一定能夠支撐。大數(shù)據(jù)場景下計(jì)算引擎還是主流,,并且衍生出了許許多多的組件,。我們這里無法一一列舉,就分別挑選不同時(shí)期被廣泛使用的幾個(gè)做介紹吧,。MapReduceMapReduce 將復(fù)雜的,、運(yùn)行于大規(guī)模集群上的并行計(jì)算過程高度地抽象到了兩個(gè)函數(shù):Map 和 Reduce。它采用“分而治之”策略,,一個(gè)存儲(chǔ)在分布式文件系統(tǒng)中的大規(guī)模數(shù)據(jù)集,,會(huì)被切分成許多獨(dú)立的分片(split),,這些分片可以被多個(gè) Map 任務(wù)并行處理。 MapReduce 工作流程,,來源于網(wǎng)絡(luò) 不同的 Map 任務(wù)之間不會(huì)進(jìn)行通信 不同的 Reduce 任務(wù)之間也不會(huì)發(fā)生任何信息交換 用戶不能顯式地從一臺(tái)機(jī)器向另一臺(tái)機(jī)器發(fā)送消息 所有的數(shù)據(jù)交換都是通過 MapReduce 框架自身去實(shí)現(xiàn)的 MapReduc 是 Hadoop 組件里的計(jì)算框架模型,,另外還有分布式存儲(chǔ)組件 HDFS、資源管理組件 Yarn,。一開始計(jì)算和資源管理是耦合在一起的,,Hadoop 2.0 才將其拆分開,這大大增加 Hadoop 使用的靈活性,。 MapReduce 的缺陷: TezHadoop(MapReduce/Yarn、HDFS) 雖然能處理海量數(shù)據(jù),、水平擴(kuò)展,,但使用難度很大,而 Hive 的出現(xiàn)恰好解決這個(gè)問題,,這使得 Hive 被迅速的推廣普及成為大數(shù)據(jù)時(shí)代數(shù)據(jù)倉庫組件的代名詞(存儲(chǔ)使用 hdfs,,計(jì)算使用 MapReduce。Hive 只是一個(gè)殼根據(jù)自身維護(hù)的表字段跟底層存儲(chǔ)之間映射關(guān)系 Hcatlog,,對(duì)用戶提交的 SQL 進(jìn)行解析,、優(yōu)化,然后調(diào)用底層配置的執(zhí)行引擎對(duì)底層數(shù)據(jù)進(jìn)行計(jì)算),。 為解決 Hive 執(zhí)行性能太差的問題,,在計(jì)算引擎方面出現(xiàn)了 Tez,數(shù)據(jù)存儲(chǔ)方面出現(xiàn)了 ORC(一種專門針對(duì) Hive 開發(fā)的列式存儲(chǔ)壓縮格式,。當(dāng)然 HDFS 本身也有一些存儲(chǔ)壓縮格式,,另外還有一個(gè)比較流行的列示存儲(chǔ)格式 Parquet)這也使得 Hive 的性能有了質(zhì)的提升。 MR 與 Tez 的比較,,來源于網(wǎng)絡(luò) MapReduce 每一步都會(huì)落磁盤,,這大大影響力執(zhí)行效率 Tez 是 Apache 開源的支持 DAG (有向無環(huán)圖,,Directed Acyclic Graph)作業(yè)的計(jì)算框架。它把 Map/Reduce 過程拆分成若干個(gè)子過程,,同時(shí)可以把多個(gè) Map/Reduce 任務(wù)組合成一個(gè)較大的 DAG 任務(wù),,減少了 Map/Reduce 之間的文件存儲(chǔ)。同時(shí)合理組合其子過程,,也可以減少任務(wù)的運(yùn)行時(shí)間,。加上內(nèi)存計(jì)算 Tez 的計(jì)算性能實(shí)際上跟 Spark 不相上下。 Tez 直接源于 MapReduce 框架,,核心思想是將 Map 和 Reduce 兩個(gè)操作進(jìn)一步拆分,,即 Map 被拆分成Input、Processor,、Sort,、Merge和Output, Reduce 被拆分成 Input,、Shuffle,、Sort、Merge,、Processor 和 Output 等,,這樣,這些分解后的元操作可以任意靈活組合,,產(chǎn)生新的操作,,這些操作經(jīng)過一些控制程序組裝后,可形成一個(gè)大的 DAG 作業(yè),。 Spark ,、FlinkApache Spark 是一個(gè)圍繞速度、易用性和復(fù)雜分析構(gòu)建的大數(shù)據(jù)處理框架,,用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎,,致力于一個(gè)組件滿足大數(shù)據(jù)處理和分析的所有計(jì)算場景。 Spark 是當(dāng)今最流行的分布式大規(guī)模數(shù)據(jù)處理引擎,,被廣泛應(yīng)用在各類大數(shù)據(jù)處理場景,。2009 年,美國加州大學(xué)伯克利分校的 AMP 實(shí)驗(yàn)室開發(fā)了 Spark,。2013 年,,Spark 成為 Apache 軟件基金會(huì)旗下的孵化項(xiàng)目,。而現(xiàn)在,,Spark 已經(jīng)成為了該基金會(huì)管理的項(xiàng)目中最活躍的一個(gè)。 SparkUI Stage 頁面 Spark 應(yīng)用場景: Spark 數(shù)據(jù)結(jié)構(gòu): RDD,、DataFrame,、DataSet 對(duì)比 Spark 數(shù)據(jù)結(jié)構(gòu)發(fā)展歷史: Flink 起源于 2008 年柏林理工大學(xué)一個(gè)研究性項(xiàng)目,, 在 2014 年被 Apache 孵化器所接受,然后迅速地成為了 ASF(Apache Software Foundation)的頂級(jí)項(xiàng)目之一,。德國人對(duì) Flink 的推廣力度跟美國人對(duì) Spark 的推廣差的比較遠(yuǎn),,直到 2019 年阿里下場才使得 Flink 在國內(nèi)得到廣泛應(yīng)用,并且以很高的頻率進(jìn)行版本迭代,。 Flink 組件棧 基于流執(zhí)行引擎,,F(xiàn)link 提供了諸多更高抽象層的 API 以便用戶編寫分布式任務(wù): 如上所述,,F(xiàn)link 等于說是把 Spark 的功能重新實(shí)現(xiàn)了一遍,區(qū)別在于 Spark 是由批入流 Flink 是由流入批。由于起步較晚,,F(xiàn)link 能夠大量吸收 Hadoop,、Spark 的優(yōu)秀經(jīng)驗(yàn),,憑借更高層次的抽象,、更簡潔的調(diào)用方式、高的吞吐,、更少的資源占用,,在實(shí)時(shí)計(jì)算、實(shí)時(shí)數(shù)倉等場景迅速超越了 Spark,。但 Flink 想要完全超越 Spark 還有很長的路要走,,比如對(duì) SQL 的支持、批流一體的實(shí)現(xiàn),、機(jī)器學(xué)習(xí),、圖計(jì)算等等。 對(duì)于數(shù)據(jù)開發(fā)者來說,,Spark 比 MapReduce 支持的場景更廣使用起來也容易的多,,F(xiàn)link 相比 Spark 同樣更易用了。所以往后大數(shù)據(jù)開發(fā)的門檻將會(huì)越來越低:完全 SQL 化,、低代碼甚至?xí)駛鹘y(tǒng) ETL 工具一樣無代碼,。大數(shù)據(jù)從業(yè)者未來的路該怎么走?這是個(gè)值得思考的問題,。 ClickHouse ,、DorisClickHouse 是 Yandex 在 20160615 開源的一個(gè)數(shù)據(jù)分析的 MPP 數(shù)據(jù)庫。并且在 18 年初成立了 ClickHouse 中文社區(qū),,應(yīng)該是易觀負(fù)責(zé)運(yùn)營的,。
Apache Doris 是一個(gè)現(xiàn)代化的 MPP 分析型數(shù)據(jù)庫產(chǎn)品,百度開源并貢獻(xiàn)給 Apache 社區(qū)。僅需亞秒級(jí)響應(yīng)時(shí)間即可獲得查詢結(jié)果,,有效地支持實(shí)時(shí)數(shù)據(jù)分析,。Apache Doris 的分布式架構(gòu)非常簡潔,易于運(yùn)維,,并且可以支持 10PB 以上的超大數(shù)據(jù)集,。 Apache Doris 可以滿足多種數(shù)據(jù)分析需求,例如固定歷史報(bào)表,,實(shí)時(shí)數(shù)據(jù)分析,,交互式數(shù)據(jù)分析和探索式數(shù)據(jù)分析等。令您的數(shù)據(jù)分析工作更加簡單高效,! ClickHouse 確實(shí)是一個(gè)非常優(yōu)秀的產(chǎn)品,。但為了獲得查詢時(shí)的高性能我們放棄了一些東西: Doris 的誕生試圖去解決 ClickHouse 的這些問題,,讓我們拭目以待吧。 0x03 流程控制組件流程控制(也稱工作流,、任務(wù)流)是 ETL 重要的組成部分,,通常是以 DAG 的方式配置,每次調(diào)用都會(huì)沿著有向無環(huán)圖從前往后依次執(zhí)行直至最后一個(gè)任務(wù)完成,。流程控制可以在 ETL 工具內(nèi)配置,,也可以在調(diào)度系統(tǒng)配置。傳統(tǒng) ETL 工具基本上都是單機(jī)版的,,如果 ETL 的任務(wù)節(jié)點(diǎn)分布在多個(gè)服務(wù)器上,,整體的流程依賴就會(huì)變的復(fù)雜起來(跨服務(wù)器的調(diào)度無法解決,就只剩下兩種方法了:預(yù)估前置依賴完成時(shí)間,、監(jiān)控前置依賴運(yùn)行狀態(tài)比如將運(yùn)行狀態(tài)寫入數(shù)據(jù)庫等),,這時(shí)候使用調(diào)度工具里的流程控制功能就是最優(yōu)解。 HudsonHudson 是一個(gè)可擴(kuò)展的持續(xù)集成引擎,,是 SUN 公司時(shí)期就有的 CI 工具,,后來因?yàn)?ORACLE 收購 SUN 之后的商標(biāo)之爭,創(chuàng)始人 KK 搞了新的分支叫 Jenkins ,。今天的Hudson還在由ORACLE 持續(xù)維護(hù),,但風(fēng)頭已經(jīng)遠(yuǎn)不如社區(qū)以及CloudBees 驅(qū)動(dòng)的 Jenkins。 主要用于: Hudson 操作界面 Hudson 擁有的特性包括: Hudson 是我們?cè)缙跀?shù)倉項(xiàng)目中使用的一個(gè)調(diào)度工具,,當(dāng)然 Hudson 還有其它的一些功能,,但我們用到的僅僅是調(diào)度。由于 ETL 系統(tǒng)整體的復(fù)雜性,,源端數(shù)據(jù)匯總集成,、數(shù)倉分層計(jì)算、數(shù)據(jù)推送到外部系統(tǒng),,我們分別部署在了三臺(tái)服務(wù)器上,,這時(shí)候 Hudson 就起到了跨服務(wù)器調(diào)度依賴控制的作用。 Airflow,、 Azkaban,、OozieAirflow 是一個(gè)可編程,調(diào)度和監(jiān)控的工作流平臺(tái),,基于有向無環(huán)圖(DAG),,Airflow 可以定義一組有依賴的任務(wù),按照依賴依次執(zhí)行,。Airflow 提供了豐富的命令行工具用于系統(tǒng)管控,,而其 web 管理界面同樣也可以方便的管控調(diào)度任務(wù),并且對(duì)任務(wù)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控,,方便了系統(tǒng)的運(yùn)維和管理,。 上圖以及以下兩段文字來源于公眾號(hào):數(shù)據(jù)社 主要有如下幾種組件構(gòu)成: 具體執(zhí)行流程: Azkaban 是由 Linkedin 開源的一個(gè)批量工作流任務(wù)調(diào)度器,。用于在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作和流程,。Azkaban 定義了一種 KV 文件格式來建立任務(wù)之間的依賴關(guān)系,并提供一個(gè)易于使用的 web 用戶界面維護(hù)和跟蹤你的工作流,。 Azkaban 操作界面 Oozie 起源于雅虎,,主要用于管理與組織 Hadoop 工作流。Oozie 的工作流必須是一個(gè)有向無環(huán)圖,,實(shí)際上 Oozie 就相當(dāng)于 Hadoop 的一個(gè)客戶端,,當(dāng)用戶需要執(zhí)行多個(gè)關(guān)聯(lián)的 MR 任務(wù)時(shí),只需要將 MR 執(zhí)行順序?qū)懭?workflow.xml,,然后使用 Oozie 提交本次任務(wù),,Oozie 會(huì)托管此任務(wù)流。 以上三個(gè)組件都是在大數(shù)據(jù)環(huán)境下使用的調(diào)度工具,,Oozie 屬于非常早期的調(diào)度系統(tǒng)了并且深度服務(wù)于 Hadoop 生態(tài)目前使用的很少了,,Azkaban 目前也使用的不多,Airflow 還有一定的市場,。 DolphinSchedulerApache DolphinScheduler 是一個(gè)分布式,、去中心化、易擴(kuò)展的可視化 DAG 工作流任務(wù)調(diào)度系統(tǒng),,其致力于解決數(shù)據(jù)處理流程中錯(cuò)綜復(fù)雜的依賴關(guān)系,,使調(diào)度系統(tǒng)在數(shù)據(jù)處理流程中開箱即用。 DolphinScheduler 于 2019 年 8 月 29 日 進(jìn)入 Apache 孵化器,,于 2021 年 4 月 9 日成為 Apache 頂級(jí)項(xiàng)目,。 DolphinScheduler 操作界面 DolphinScheduler 提供了許多易于使用的功能,可加快數(shù)據(jù) ETL 工作開發(fā)流程的效率,。其主要特點(diǎn)如下: 0x04 總結(jié)這么多組件我們?cè)撊绾尉駬?/span>寫到這里,,計(jì)劃中的 ETL 工具以及類 ETL 組件已經(jīng)全部介紹完了,但我只是挑了不同時(shí)期比較流行的很少一部分,,剛數(shù)了下有 26 個(gè),。 工具組件這么多,做為技術(shù)人肯定是學(xué)不完的,,經(jīng)??吹揭恍┖啔v羅列了一二十個(gè),大而全哪哪都不精這樣的人市場上是沒啥競爭力的,。所以我們必須聚焦,,在數(shù)據(jù)處理的全流程,每一類型選取其中一種組件深入學(xué)習(xí)并努力在生產(chǎn)實(shí)踐中運(yùn)用,。在特定的場景,,多種工具其實(shí)實(shí)現(xiàn)的功能大體是類似的,無非是后起的在性能,、穩(wěn)定性,、易用性上會(huì)比早出現(xiàn)的好很多。 如何快速將工具引入生產(chǎn)實(shí)踐當(dāng)我們選好一個(gè)新的組件后,從入門到精通大致需要以下三個(gè)過程: 最后,,我們舉個(gè)例子吧:一個(gè)項(xiàng)目需要使用一個(gè)之前沒用過的 ETL 工具,我們?nèi)绾文軌蛟趦芍軆?nèi)達(dá)到生產(chǎn)應(yīng)用的水平呢,? 首先我們需要搞明白我們需要 ETL 系統(tǒng)做什么,? 正常來說,,所有 ETL 工具都是能夠支持以上功能的,我們需要找到它們(否則就得盡快尋找補(bǔ)救方案),,然后就能正常的進(jìn)行 ETL 開發(fā)了,。我們需要使用新的工具先讓系統(tǒng)穩(wěn)定、準(zhǔn)確的跑起來,,同時(shí)能夠提供有效的自動(dòng)化運(yùn)行監(jiān)控,,性能優(yōu)化是下一步該做的事情。 |
|