久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

數(shù)據(jù)倉庫ETL工具全解

 wuhancar 2022-01-12

傅一平評(píng)語:

這篇文章比較全的介紹了傳統(tǒng)ETL工具、新型ETL工具,、主流計(jì)算引擎及流程控制引擎,。

1、傳統(tǒng)ETL工具包括Datastage,、Informatica PowerCenter,、Kettle、ODI,、Sqoop,、DataX,、Flume、Canal,、DTS,、GoldenGate、Maxwell,、DSG等等,。

2、新型ETL工具包括Streamsets,、Waterdrop等,。

3、主流計(jì)算引擎包括MapReduce,、Tez,、Spark、Flink,、ClickHouse ,、Doris等等。

4,、流程控制(也稱工作流,、任務(wù)流)是 ETL 重要的組成部分,主要包括Hudson,、Airflow,、 Azkaban、Oozie,、DolphinScheduler,。

如果要從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ì)算,、流程控制工具。

  • 第一部分,,主要介紹五種傳統(tǒng) ETL 工具和八種數(shù)據(jù)同步集成工具,。

  • 第二部分,,主要介紹兩種新型 ETL 工具和大數(shù)據(jù)發(fā)展不同階段產(chǎn)生的六種主要計(jì)算引擎。

第一部分

0x01 傳統(tǒng) ETL 工具

Image

DataStage

IBM 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)換程序的效率,。

Image

Datastage 操作界面

  • 對(duì)元數(shù)據(jù)的支持:Datastage 是自己管理 Metadata,不依賴任何數(shù)據(jù)庫,。

  • 參數(shù)控制:Datastage 可以對(duì)每個(gè) job 設(shè)定參數(shù),,并且可以 job 內(nèi)部引用這個(gè)參數(shù)名。

  • 數(shù)據(jù)質(zhì)量:Datastage 有配套用的 ProfileStage 和 QualityStage 保證數(shù)據(jù)質(zhì)量,。

  • 定制開發(fā):提供抽取、轉(zhuǎn)換插件的定制,,Datastage 內(nèi)嵌一種類 BASIC 語言,,可以寫一段批處理程序來增加靈活性。

  • 修改維護(hù):提供圖形化界面,。這樣的好處是直觀,、傻瓜式的;不好的地方就是改動(dòng)還是比較費(fèi)事(特別是批量化的修改),。

Datastage 包含四大部件:Administrator,、Manager、Designer,、Director,。

  1. 用 DataStage Administrator 新建或者刪除項(xiàng)目,設(shè)置項(xiàng)目的公共屬性,,比如權(quán)限,。

  2. 用 DataStage Designer 連接到指定的項(xiàng)目上進(jìn)行 Job 的設(shè)計(jì),;

  3. 用 DataStage Director 負(fù)責(zé) Job 的運(yùn)行,監(jiān)控等,。例如設(shè)置設(shè)計(jì)好的 Job 的調(diào)度時(shí)間,。

  4. 用 DataStage Manager 進(jìn)行 Job 的備份等 Job 的管理工作。

Informatica

Informatica 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)化邏輯,。

Image

Informatica 操作界面

  • 對(duì)元數(shù)據(jù)的支持:元數(shù)據(jù)相對(duì)開放,,存放在關(guān)系數(shù)據(jù)中,可以很容易被訪問,。

  • 參數(shù)控制:參數(shù)放在一個(gè)參數(shù)文件中,,理論上的確可以靈活控制參數(shù),但這個(gè)靈活性需要用戶自己更新文件中的參數(shù)值(例如日期更新),。另外,,Powercenter 不能在 mapping 或 session 中引用參數(shù)名。

  • 數(shù)據(jù)質(zhì)量:專門有一個(gè)產(chǎn)品 Informatica Data Quality 來保證數(shù)據(jù)質(zhì)量,。

  • 定制開發(fā):沒有內(nèi)嵌類 BASIC 語言,,參數(shù)值需人為更新,且不能引用參數(shù)名,。

  • 修改維護(hù):與 Datastage 相同,,Powercenter 也提供圖形化界面。這樣的好處是直觀、傻瓜式的,;不好的地方就是改動(dòng)還是比較費(fèi)事,。

Informatica 的開發(fā)分為六個(gè)步驟:

  1. 定義源,就是定義我們?cè)搭^數(shù)據(jù)在哪里,。配置數(shù)據(jù)鏈接,,比如 IP 賬號(hào)密碼等信息。

  2. 定義目標(biāo),,就是我們準(zhǔn)備把數(shù)據(jù)放到哪里,。這個(gè)是我們事先定義的數(shù)據(jù)倉庫。

  3. 創(chuàng)建映射,,就是我們的元數(shù)據(jù)和目標(biāo)數(shù)據(jù)的映射關(guān)系,。

  4. 定義任務(wù),就是我們每個(gè)表的轉(zhuǎn)換過程,,可以同時(shí)處理多個(gè)表,。

  5. 創(chuàng)建工作流,將任務(wù)按照一定的順序進(jìn)行組合,。

  6. 工作流調(diào)度和監(jiān)控,,定時(shí)、自動(dòng)或者手動(dòng)方式觸發(fā)工作流,。

有興趣更詳細(xì)了解的可以參考這篇文章:

https://blog.csdn.net/water_0815/article/details/76512470

Kettle

Pentaho Data Integration,,是一款國外免費(fèi)開源的、可視化的,、功能強(qiáng)大的 ETL 工具,。由于其開源、免費(fèi),、跨平臺(tái),、資料文檔豐富等特點(diǎn)獲得了一大批忠實(shí)粉絲。

Kettle 六大特點(diǎn):

  • 免費(fèi)開源:基于 Java 免費(fèi)開源軟件,。

  • 易配置:可跨平臺(tái),,綠色無需安裝。

  • 不同數(shù)據(jù)庫:ETL 工具集,,可管理不同數(shù)據(jù)庫的數(shù)據(jù)。

  • 兩種腳本文件:transformation 和 job,。transformation 完成針對(duì)數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,,job 則完成整個(gè)工作流的控制。

  • 圖形界面設(shè)計(jì):托拉拽,,無需寫代碼,。

  • 定時(shí)功能:在 Job 下的 start 模塊,有一個(gè)定時(shí)功能,可以每日,,每周等方式進(jìn)行定時(shí),。

Image

Kettle 操作界面

Kettle 的執(zhí)行分為兩個(gè)層次:Job 和 Transformation。這兩個(gè)層次的最主要的區(qū)別在于數(shù)據(jù)的傳遞和運(yùn)行方式,。

  • Transformation:定義對(duì)數(shù)據(jù)操作的容器,,數(shù)據(jù)操作就是數(shù)據(jù)從輸入到輸出的一個(gè)過程,可以理解為比 Job 粒度更小一級(jí)的容器,,我們將任務(wù)分解成 Job,,然后需要將 Job 分解成一個(gè)或多個(gè)Transformation,每個(gè) Transformation 只完成一部分工作,。

  • Step:是 Transformation 內(nèi)部的最小單元,,每一個(gè) Step 完成一個(gè)特定的功能。

  • Job:負(fù)責(zé)將 Transformation 組織在一起進(jìn)而完成某一工作,,通常我們需要把一個(gè)大的任務(wù)分解成幾個(gè)邏輯上隔離的Job,,當(dāng)這幾個(gè) Job 都完成了,也就說明這項(xiàng)任務(wù)完成了,。

  • Job Entry:Job Entry 是 Job 內(nèi)部的執(zhí)行單元,,每一個(gè) Job Entry 用于實(shí)現(xiàn)特定的功能,如:驗(yàn)證表是否存在,,發(fā)送郵件等,。可以通過 Job 來執(zhí)行另一個(gè) Job 或者 Transformation,,也就是說 Transformation 和 Job 都可以作為Job Entry,。

  • Hop:用于在 Transformation 中連接 Step,或者在 Job 中連接 Job Entry,,是一個(gè)數(shù)據(jù)流的圖形化表示,。

在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 Service

ODI(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)用場景:

  • 數(shù)據(jù)倉庫:比如 ETL 階段,。

  • 數(shù)據(jù)遷移:比如將某一源系統(tǒng)的數(shù)據(jù)遷移到新系統(tǒng)中。

  • 數(shù)據(jù)集成:比如兩個(gè)系統(tǒng)間高效的點(diǎn)到點(diǎn)數(shù)據(jù)傳遞,。

  • 數(shù)據(jù)復(fù)制:比如將一個(gè) Instance 的數(shù)據(jù)復(fù)制另外一個(gè) Instance 中,。

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,、DataX

Sqoop,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ù)庫中,。

Image

Sqoop 的工作機(jī)制:

Sqoop 命令的本質(zhì)是轉(zhuǎn)化為 MapReduce 程序。Sqoop 分為導(dǎo)入(import)和導(dǎo)出(export),,策略分為 table 和 query ,,模式分為增量和全量。

Sqoop 的優(yōu)點(diǎn):

  • 可以高效,、可控的利用資源,,可以通過調(diào)整任務(wù)數(shù)來控制任務(wù)的并發(fā)度。

  • 可以自動(dòng)的完成數(shù)據(jù)映射和轉(zhuǎn)換,。由于導(dǎo)入數(shù)據(jù)庫是有類型的,,它可以自動(dòng)根據(jù)數(shù)據(jù)庫中的類型轉(zhuǎn)換到 Hadoop 中,當(dāng)然用戶也可以自定義它們之間的映射關(guān)系

  • 支持多種數(shù)據(jù)庫,,如 Mysql,,Orcale 等數(shù)據(jù)庫


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

Image

數(shù)據(jù)交換通過 DataX 進(jìn)行中轉(zhuǎn),,任何數(shù)據(jù)源只要和 DataX 連接上即可以和已實(shí)現(xiàn)的任意數(shù)據(jù)源同步。

Image

核心組件:

  • Reader:數(shù)據(jù)采集模塊,,負(fù)責(zé)從源采集數(shù)據(jù)

  • Writer:數(shù)據(jù)寫入模塊,,負(fù)責(zé)寫入目標(biāo)庫

  • Framework:數(shù)據(jù)傳輸通道,負(fù)責(zé)處理數(shù)據(jù)緩沖等

從一個(gè) JOB 來理解 Datax 的核心模塊組件:

  • DataX 完成單個(gè)數(shù)據(jù)同步的作業(yè),,稱為 Job,,Job 會(huì)負(fù)責(zé)數(shù)據(jù)清理、任務(wù)切分等工作,;

  • 任務(wù)啟動(dòng)后,,Job 會(huì)根據(jù)不同源的切分策略,切分成多個(gè) Task 并發(fā)執(zhí)行,,Task 就是執(zhí)行作業(yè)的最小單元

  • 切分完成后,,根據(jù) Scheduler 模塊,將 Task 組合成 TaskGroup ,,每個(gè) group 負(fù)責(zé)一定的并發(fā)和分配 Task

DataX 優(yōu)點(diǎn)

  • 可靠的數(shù)據(jù)質(zhì)量監(jiān)控:讓數(shù)據(jù)可以完整無損的傳輸?shù)侥康亩恕?/span>

  • 豐富的數(shù)據(jù)轉(zhuǎn)換功能

  • 精準(zhǔn)的速度控制:新版本 DataX3.0 提供了包括通道(并發(fā)),、記錄流、字節(jié)流三種流控模式,,可以隨意控制你的作業(yè)速度,,讓你的作業(yè)在庫可以承受的范圍內(nèi)達(dá)到最佳的同步速度。

  • 強(qiáng)勁的同步性能:每一種讀插件都有一種或多種切分策略,,都能將作業(yè)合理切分成多個(gè) Task 并行執(zhí)行,,單機(jī)多線程執(zhí)行模型可以讓 DataX 速度隨并發(fā)成線性增長。

  • 健壯的容錯(cuò)機(jī)制:多層次局部/全局的重試,。

  • 極簡的使用體驗(yàn):下載即可用,、詳細(xì)的日志信息。


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,、Canal

Flume 是 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ū)分,。

Image

提示 官方這個(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-og 采用了多Master的方式。為了保證配置數(shù)據(jù)的一致性,,F(xiàn)lume 引入了 ZooKeeper,,用于保存配置數(shù)據(jù),ZooKeeper 本身可保證配置數(shù)據(jù)的一致性和高可用,,另外,,在配置數(shù)據(jù)發(fā)生變化時(shí),ZooKeeper 可以通知 Flume Master 節(jié)點(diǎn),。Flume Master 使用 gossip 協(xié)議同步數(shù)據(jù),。

  • Flume-ng最明顯的改動(dòng)就是取消了集中管理配置的 Master 和 Zookeeper,變?yōu)橐粋€(gè)純粹的傳輸工具,。Flume-ng 另一個(gè)主要的不同點(diǎn)是讀入數(shù)據(jù)和寫出數(shù)據(jù)由不同的工作線程處理(稱為 Runner),。在 Flume-og 中,讀入線程同樣做寫出工作(除了故障重試),。如果寫出慢的話(不是完全失?。鼘⒆枞?Flume 接收數(shù)據(jù)的能力,。這種異步的設(shè)計(jì)使讀入線程可以順暢的工作而無需關(guān)注下游的任何問題,。

Flume 優(yōu)勢:

  • Flume可以將應(yīng)用產(chǎn)生的數(shù)據(jù)存儲(chǔ)到任何集中存儲(chǔ)器中,,比如 HDFS、HBase,。

  • 當(dāng)收集數(shù)據(jù)的速度超過將寫入數(shù)據(jù)的時(shí)候,,也就是當(dāng)收集信息遇到峰值時(shí),這時(shí)候收集的信息非常大,,甚至超過了系統(tǒng)的寫入數(shù)據(jù)能力,,這時(shí)候, Flume 會(huì)在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)收容器間做出調(diào)整,,保證其能夠在兩者之間提供平穩(wěn)的數(shù)據(jù),。

  • 提供上下文路由特征。

  • Flume 的管道是基于事務(wù),,保證了數(shù)據(jù)在傳送和接收時(shí)的一致性,。

  • Flume 是可靠的,容錯(cuò)性高的,,可升級(jí)的,,易管理的,并且可定制的。


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

Image

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ù)處理場景:

  • Flume 主要用于將日志文件實(shí)時(shí)同步到 Kafka 或 HDFS,供下游消費(fèi)。

  • Cannal 主要是解析 Mysql binlog 日志,,在不影響業(yè)務(wù)的前提下將數(shù)據(jù)實(shí)時(shí)同步到 Kafka,。

DTS、GoldenGate

DTS(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 主要提供了下列功能:

  • 支持 SELECT * FROM table 的方式進(jìn)行全量數(shù)據(jù)初始化

  • 支持在主庫發(fā)生 failover 后,自動(dòng)恢復(fù) binlog 位置(GTID)

  • 可以對(duì)數(shù)據(jù)進(jìn)行分區(qū),,解決數(shù)據(jù)傾斜問題,,發(fā)送到 kafka 的數(shù)據(jù)支持 database、table,、column 等級(jí)別的數(shù)據(jù)分區(qū)

  • 工作方式是偽裝為 Slave,,接收 binlog events,然后根據(jù) schemas 信息拼裝,,可以接受 ddl,、xid、row 等各種 event

除了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):

  • 按需復(fù)制:查詢和統(tǒng)計(jì)系統(tǒng)往往不需要所有的原始數(shù)據(jù),,因此完全可以按需要復(fù)制數(shù)據(jù),。RealSync 系統(tǒng)支持對(duì)指定信息的按需復(fù)制,減少存儲(chǔ)和網(wǎng)絡(luò)帶寬的成本,。

  • 多種同步模式:實(shí)時(shí)復(fù)制,、定時(shí)復(fù)制、手工復(fù)制

  • 對(duì)生產(chǎn)系統(tǒng)的低干擾性:DSG 實(shí)時(shí)數(shù)據(jù)復(fù)制技術(shù)不需要通過任何數(shù)據(jù)庫的引擎來獲取變更數(shù)據(jù),而是通過數(shù)據(jù)庫自身的信息獲取源系統(tǒng)上的改變并傳送給目的系統(tǒng),,不會(huì)對(duì)生產(chǎn)系統(tǒng)造成性能影響,。

  • 系統(tǒng)異構(gòu)可提供更多的優(yōu)化空間:源數(shù)據(jù)庫系統(tǒng)和目的數(shù)據(jù)庫系統(tǒng)的可異構(gòu),主要包括索引規(guī)則和存儲(chǔ)參數(shù)(如數(shù)據(jù)塊大小,、回滾段等),。因此可以在目標(biāo)數(shù)據(jù)庫上根據(jù)業(yè)務(wù)特點(diǎn)進(jìn)行調(diào)整和優(yōu)化,完全不受源系統(tǒng)的限制,。

  • 支持的多種復(fù)制策略:RealSync 可以被靈活配置,,以支持各種復(fù)制策略,支持各種增值應(yīng)用,,如:一對(duì)一單向復(fù)制,;一對(duì)多復(fù)制;多對(duì)一復(fù)制等,。

有興趣了解的可以參考這篇文章:

https://www.cnblogs.com/oracle-dsg/archive/2010/05/27/1745477.html

但說實(shí)話,,大清早亡了,開源技術(shù)那么多,,我們不見得非要使用這些古老的技術(shù)組件了,。

第二部分

承上,我們接著介紹兩種新型 ETL 工具,、大數(shù)據(jù)發(fā)展不同階段產(chǎn)生的六種主要計(jì)算引擎,、五種流程控制組件,。

最后我們簡單討論兩個(gè)話題:

  • 這么多組件我們?cè)撊绾尉駬瘢?/span>

  • 如何快速將工具引入生產(chǎn)實(shí)踐,?

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ā)。

StreamSets

Streamsets 是由 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 data collector(核心產(chǎn)品,開源):大數(shù)據(jù) ETL 工具,。

  • Streamsets data collector Edge(開源):將這個(gè)組件安裝在物聯(lián)網(wǎng)等設(shè)備上,,占用少的內(nèi)存和 CPU。

  • Streamsets control hub(收費(fèi)項(xiàng)目):可以將 collector 編輯好的 pipeline 放入 control hub 進(jìn)行管理,,可實(shí)現(xiàn)定時(shí)調(diào)度,、管理和 pipeline 拓?fù)洹?/span>

Image

StreamSets 開發(fā)頁面

在管道的創(chuàng)建上分為了三個(gè)管道:

  • data collector pipeline:用戶普通 collector 開發(fā)。

  • data collector Edge Pipeline:將開發(fā)好的 pipeline 上傳到對(duì)應(yīng) Edge 系統(tǒng),。

  • microservice pipeline:提供微服務(wù),。

Image

管道創(chuàng)建好后,會(huì)根據(jù)需要去選擇對(duì)應(yīng)的組件信息,。

主要有以下幾類組件:

  • origins (extract):數(shù)據(jù)來源,,數(shù)據(jù)從不同的數(shù)據(jù)源抽取。(一個(gè) pipeline 中只能有一個(gè)數(shù)據(jù)來源)

  • processor(transform):數(shù)據(jù)轉(zhuǎn)化,,將抽取來的數(shù)據(jù)進(jìn)行過濾,,清洗。

  • destination(load):數(shù)據(jù)存儲(chǔ),,將數(shù)據(jù)處理完后存入目標(biāo)系統(tǒng)或者轉(zhuǎn)入另一個(gè)pipeline進(jìn)行再次處理,。

  • executor:由處理數(shù)據(jù)組件的事件觸發(fā) executor ,執(zhí)行相應(yīng)任務(wù)。例如:某個(gè)組件處理失敗,,發(fā)送郵件通知,。

WarterDrop

Waterdrop 項(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ì)遇到以下不可逃避的麻煩:

  • 數(shù)據(jù)丟失與重復(fù)

  • 任務(wù)堆積與延遲

  • 吞吐量低

  • 應(yīng)用到生產(chǎn)環(huán)境周期長

  • 缺少應(yīng)用運(yùn)行狀態(tài)監(jiān)控

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)

Image

Waterdrop 架構(gòu)

Waterdrop 使用場景:

  • 海量數(shù)據(jù) ETL

  • 海量數(shù)據(jù)聚合

  • 多源數(shù)據(jù)處理

Waterdrop 的特性:

  • 簡單易用,靈活配置,,無需開發(fā),;可運(yùn)行在單機(jī)、Spark Standalone 集群,、Yarn 集群,、Mesos 集群之上。

  • 實(shí)時(shí)流式處理, 高性能, 海量數(shù)據(jù)處理能力,。

  • 模塊化和插件化,,易于擴(kuò)展。Waterdrop 的用戶可根據(jù)實(shí)際的需要來擴(kuò)展需要的插件,,支持 Java/Scala 實(shí)現(xiàn)的 Input,、Filter、Output 插件,。

  • 支持利用 SQL 做數(shù)據(jù)處理和聚合,。

  • 方便的應(yīng)用運(yùn)行狀態(tài)監(jiān)控。

0x02 計(jì)算引擎

上邊兩種新型 ETL 工具的出現(xiàn)簡化了數(shù)據(jù)處理操作,,同步,、集成,、計(jì)算可以統(tǒng)一在一個(gè)工具內(nèi)完成且有不錯(cuò)的界面可以使用,,但對(duì)于一些更加復(fù)雜靈活的場景不一定能夠支撐。

大數(shù)據(jù)場景下計(jì)算引擎還是主流,,并且衍生出了許許多多的組件,。我們這里無法一一列舉,就分別挑選不同時(shí)期被廣泛使用的幾個(gè)做介紹吧,。

MapReduce

MapReduce 將復(fù)雜的,、運(yùn)行于大規(guī)模集群上的并行計(jì)算過程高度地抽象到了兩個(gè)函數(shù):Map 和 Reduce。它采用“分而治之”策略,,一個(gè)存儲(chǔ)在分布式文件系統(tǒng)中的大規(guī)模數(shù)據(jù)集,,會(huì)被切分成許多獨(dú)立的分片(split),,這些分片可以被多個(gè) Map 任務(wù)并行處理。

Image

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 的缺陷:

  • 第一,,MapReduce 模型的抽象層次低,大量的底層邏輯都需要開發(fā)者手工完成,。

  • 第二,,只提供 Map 和 Reduce 兩個(gè)操作。很多現(xiàn)實(shí)的數(shù)據(jù)處理場景并不適合用這個(gè)模型來描述,。實(shí)現(xiàn)復(fù)雜的操作很有技巧性,,也會(huì)讓整個(gè)工程變得龐大以及難以維護(hù)。

  • 第三,,在 Hadoop 中,,每一個(gè) Job 的計(jì)算結(jié)果都會(huì)存儲(chǔ)在 HDFS 文件存儲(chǔ)系統(tǒng)中,所以每一步計(jì)算都要進(jìn)行硬盤的讀取和寫入,,大大增加了系統(tǒng)的延遲,。

Tez

Hadoop(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ì)的提升。

Image

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 ,、Flink

Image

Apache 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è)。

Image

SparkUI Stage 頁面

Spark 應(yīng)用場景:

  • 離線計(jì)算:使用算子或 SQL 執(zhí)行大規(guī)模批處理,,對(duì)標(biāo) MapReduce,、Hive,。同時(shí)提供了對(duì)各種數(shù)據(jù)源(文件、各種數(shù)據(jù)庫,、HDFS 等)的讀寫支持,。

  • 實(shí)時(shí)處理:以一種微批的方式,使用各種窗口函數(shù)對(duì)流式數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算,。主要實(shí)現(xiàn)在這兩部分:Spark Streaming,、Structure Streaming(Spark 2.3 版本推出)。

  • MLlib:一個(gè)常用機(jī)器學(xué)習(xí)算法庫,,算法被實(shí)現(xiàn)為對(duì) RDD 的 Spark 操作,。這個(gè)庫包含可擴(kuò)展的學(xué)習(xí)算法,比如分類,、回歸等需要對(duì)大量數(shù)據(jù)集進(jìn)行迭代的操作,。

  • GraphX:控制圖、并行圖操作和計(jì)算的一組算法和工具的集合,。GraphX 擴(kuò)展了 RDD API,,包含控制圖、創(chuàng)建子圖,、訪問路徑上所有頂點(diǎn)的操作,。

Spark 數(shù)據(jù)結(jié)構(gòu):

  • RDD:彈性分布式數(shù)據(jù)集,它代表一個(gè)可以被分區(qū)(partition)的只讀數(shù)據(jù)集,,它內(nèi)部可以有很多分區(qū),,每個(gè)分區(qū)又有大量的數(shù)據(jù)記錄(record)。RDD 表示已被分區(qū),、不可變的,,并能夠被并行操作的數(shù)據(jù)集合。

  • DataFrame:可以被看作是一種特殊的 DataSet 可以被當(dāng)作 DataSet[Row] 來處理,,我們必須要通過解析才能獲取各列的值,。

  • DataSet:數(shù)據(jù)集的意思,它是 Spark 1.6 新引入的接口,。就像關(guān)系型數(shù)據(jù)庫中的表一樣,,DataSet 提供數(shù)據(jù)表的 schema 信息比如列名列數(shù)據(jù)類型。

Image

RDD,、DataFrame,、DataSet 對(duì)比

Spark 數(shù)據(jù)結(jié)構(gòu)發(fā)展歷史:

  • RDD API 在第一代 Spark 中就存在,是整個(gè) Spark 框架的基石,。

  • 接下來,,為了方便熟悉關(guān)系型數(shù)據(jù)庫和 SQL 的開發(fā)人員使用,在 RDD 的基礎(chǔ)上,,Spark 創(chuàng)建了 DataFrame API,。依靠它,,我們可以方便地對(duì)數(shù)據(jù)的列進(jìn)行操作。

  • DataSet 最早被加入 Spark SQL 是在 Spark 1.6,,它在 DataFrame 的基礎(chǔ)上添加了對(duì)數(shù)據(jù)的每一列的類型的限制,。

  • 在Spark 2.0 中,DataFrame 和 DataSet 被統(tǒng)一,。DataFrame 作為 DataSet[Row]存在,。在弱類型的語言,如 Python 中,,DataFrame API 依然存在,,但是在 Java 中,DataFrame API 已經(jīng)不復(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)行版本迭代,。

Image

Flink 組件棧

基于流執(zhí)行引擎,,F(xiàn)link 提供了諸多更高抽象層的 API 以便用戶編寫分布式任務(wù):

  • DataSet API:對(duì)靜態(tài)數(shù)據(jù)進(jìn)行批處理操作,將靜態(tài)數(shù)據(jù)抽象成分布式的數(shù)據(jù)集,,用戶可以方便地使用 Flink 提供的各種操作符對(duì)分布式數(shù)據(jù)集進(jìn)行處理,,支持 Java、Scala 和 Python,。

  • DataStream API:對(duì)數(shù)據(jù)流進(jìn)行流處理操作,,將流式的數(shù)據(jù)抽象成分布式的數(shù)據(jù)流,用戶可以方便地對(duì)分布式數(shù)據(jù)流進(jìn)行各種操作,,支持 Java 和 Scala,。

  • Table API:對(duì)結(jié)構(gòu)化數(shù)據(jù)進(jìn)行查詢操作,將結(jié)構(gòu)化數(shù)據(jù)抽象成關(guān)系表,,并通過類 SQL 的 DSL 對(duì)關(guān)系表進(jìn)行各種查詢操作,,支持 Java 和 Scala。

  • Flink ML:Flink 的機(jī)器學(xué)習(xí)庫,,提供了機(jī)器學(xué)習(xí) Pipelines API 并實(shí)現(xiàn)了多種機(jī)器學(xué)習(xí)算法,。

  • Gelly:Flink 的圖計(jì)算庫,提供了圖計(jì)算的相關(guān) API 及多種圖計(jì)算算法實(shí)現(xiàn),。


如上所述,,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 ,、Doris

ClickHouse 是 Yandex 在 20160615 開源的一個(gè)數(shù)據(jù)分析的 MPP 數(shù)據(jù)庫。并且在 18 年初成立了 ClickHouse 中文社區(qū),,應(yīng)該是易觀負(fù)責(zé)運(yùn)營的,。


ClickHouse 實(shí)質(zhì)上是一個(gè)數(shù)據(jù)庫。為了獲得極致的性能,,ClickHouse 在計(jì)算層做了非常細(xì)致的工作,,竭盡所能榨干硬件能力,提升查詢速度,。它實(shí)現(xiàn)了單機(jī)多核并行,、分布式計(jì)算、向量化執(zhí)行與 SIMD 指令,、代碼生成等多種重要技術(shù),。普通大數(shù)據(jù)集群,單機(jī)十幾億數(shù)據(jù)檢索秒出,。因此許多即席查詢場景 ClickHouse 被廣泛使用,。

Image


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ù)分析工作更加簡單高效,!

Image


ClickHouse 確實(shí)是一個(gè)非常優(yōu)秀的產(chǎn)品,。但為了獲得查詢時(shí)的高性能我們放棄了一些東西:

  • ClickHouse 過度依賴大寬表。

  • ClickHouse 難以支持高并發(fā)的業(yè)務(wù)場景,。

  • 并不完全能夠支持標(biāo)準(zhǔn) SQL ,,UDF 也是最近才支持的。

  • ClickHouse 集群的運(yùn)維復(fù)雜度也一定曾讓您感到過頭疼,。

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)解。 

Hudson

Hudson 是一個(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。 

主要用于:

  • 持續(xù),、自動(dòng)地構(gòu)建/測試軟件項(xiàng)目,,如 CruiseControl 與 DamageControl。

  • 監(jiān)控一些定時(shí)執(zhí)行的任務(wù)。

ImageHudson 操作界面

Hudson 擁有的特性包括:

  • 易于安裝:只要把 hudson.war 部署到 servlet 容器,,不需要數(shù)據(jù)庫支持,。

  • 易于配置:所有配置都是通過其提供的 web 界面實(shí)現(xiàn)。

  • 集成 RSS/E-mail/IM:通過 RSS 發(fā)布構(gòu)建結(jié)果或當(dāng)構(gòu)建失敗時(shí)通過 e-mail 實(shí)時(shí)通知,。

  • 生成 JUnit/TestNG 測試報(bào)告,。

  • 分布式構(gòu)建支持,Hudson 能夠讓多臺(tái)計(jì)算機(jī)一起構(gòu)建/測試,。

  • 文件識(shí)別:Hudson 能夠跟蹤哪次構(gòu)建生成哪些 jar,,哪次構(gòu)建使用哪個(gè)版本的 jar 等,。

  • 插件支持:Hudson 可以通過插件擴(kuò)展,,你可以開發(fā)適合自己團(tuán)隊(duì)使用的工具。

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,、Oozie

Airflow 是一個(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)維和管理,。

Image

Image

上圖以及以下兩段文字來源于公眾號(hào):數(shù)據(jù)社

主要有如下幾種組件構(gòu)成:

  • web server: 主要包括工作流配置,監(jiān)控,,管理等操作,。

  • scheduler: 工作流調(diào)度進(jìn)程,觸發(fā)工作流執(zhí)行,,狀態(tài)更新等操作,。

  • 消息隊(duì)列:存放任務(wù)執(zhí)行命令和任務(wù)執(zhí)行狀態(tài)報(bào)告。

  • worker: 執(zhí)行任務(wù)和匯報(bào)狀態(tài)。

  • mysql: 存放工作流,,任務(wù)元數(shù)據(jù)信息,。

具體執(zhí)行流程:

  • scheduler 掃描 dag 文件存入數(shù)據(jù)庫,判斷是否觸發(fā)執(zhí)行,。

  • 到達(dá)觸發(fā)執(zhí)行時(shí)間的 dag ,生成 dag_run,,task_instance 存入數(shù)據(jù)庫。

  • 發(fā)送執(zhí)行任務(wù)命令到消息隊(duì)列,。

  • worker 從隊(duì)列獲取任務(wù)執(zhí)行命令執(zhí)行任務(wù),。

  • worker 匯報(bào)任務(wù)執(zhí)行狀態(tài)到消息隊(duì)列。

  • schduler 獲取任務(wù)執(zhí)行狀態(tài),,并做下一步操作,。

  • schduler 根據(jù)狀態(tài)更新數(shù)據(jù)庫。


Azkaban 是由 Linkedin 開源的一個(gè)批量工作流任務(wù)調(diào)度器,。用于在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作和流程,。Azkaban 定義了一種 KV 文件格式來建立任務(wù)之間的依賴關(guān)系,并提供一個(gè)易于使用的 web 用戶界面維護(hù)和跟蹤你的工作流,。

Image

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ù)流。

Image

以上三個(gè)組件都是在大數(shù)據(jù)環(huán)境下使用的調(diào)度工具,,Oozie 屬于非常早期的調(diào)度系統(tǒng)了并且深度服務(wù)于 Hadoop 生態(tài)目前使用的很少了,,Azkaban 目前也使用的不多,Airflow 還有一定的市場,。

DolphinScheduler

Apache 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)目,。

Image

DolphinScheduler 操作界面

DolphinScheduler 提供了許多易于使用的功能,可加快數(shù)據(jù) ETL 工作開發(fā)流程的效率,。其主要特點(diǎn)如下:

  • 通過拖拽以 DAG 圖的方式將 Task 按照任務(wù)的依賴關(guān)系關(guān)聯(lián)起來,,可實(shí)時(shí)可視化監(jiān)控任務(wù)的運(yùn)行狀態(tài),;

  • 支持豐富的任務(wù)類型;

  • 支持工作流定時(shí)調(diào)度,、依賴調(diào)度,、手動(dòng)調(diào)度、手動(dòng)暫停/停止/恢復(fù),,同時(shí)支持失敗重試/告警,、從指定節(jié)點(diǎn)恢復(fù)失敗、Kill 任務(wù)等操作,;

  • 支持工作流全局參數(shù)及節(jié)點(diǎn)自定義參數(shù)設(shè)置,;

  • 支持集群 HA,通過 Zookeeper 實(shí)現(xiàn) Master 集群和 Worker 集群去中心化,;

  • 支持工作流運(yùn)行歷史樹形/甘特圖展示,、支持任務(wù)狀態(tài)統(tǒng)計(jì)、流程狀態(tài)統(tǒng)計(jì),;

  • 支持補(bǔ)數(shù),,并行或串行回填數(shù)據(jù),。

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)的好很多

  • 如果你已經(jīng)在一家公司做數(shù)據(jù)了,,就先看下公司的技術(shù)棧,。如果市面上還是比較流行,恭喜你努力的去學(xué)精學(xué)透,,從生產(chǎn)使用技巧到底層運(yùn)行原理去深挖,,其它的類似組件簡單了解就行,。如果公司使用的技術(shù)不好用或者過于陳舊就努力推動(dòng)促使公司更換技術(shù)棧吧。

  • 如果你還不是做數(shù)據(jù)的,,或者以后想轉(zhuǎn)數(shù)據(jù),,或者公司的技術(shù)棧陳舊又沒法更換,這就需要自我學(xué)習(xí)了,。我們需要挑選不同類型下最流行或者最優(yōu)秀的那個(gè)深入學(xué)習(xí),,一通百通。比如 ETL 工具傳統(tǒng)的那些就沒必要學(xué)了直接學(xué) StreamSets 或者 WaterDrop 即可,;實(shí)時(shí)計(jì)算直接學(xué) Flink 即可不用看 Spark 了,;眾多的 OLAP 我們直接學(xué) ClickHouse 或者 Doris 即可其它的也不用看了;調(diào)度嘛直接 DS 就好了,。求職時(shí)候嘗試把你最最擅長的那一兩個(gè)組件表現(xiàn)出來反而更容易獲得面試官的認(rèn)可,。

如何快速將工具引入生產(chǎn)實(shí)踐

當(dāng)我們選好一個(gè)新的組件后,從入門到精通大致需要以下三個(gè)過程:

  • 第一步,,先用起來,,并且對(duì)組件有基本的認(rèn)知。我們需要先想明白我們想讓該組件幫我們解決什么問題然后將問題分類細(xì)化逐個(gè)解決,,拿最小集合快速的跑通全流程,。

  • 第二步,學(xué)習(xí)組件原理特性,,將更多的特性運(yùn)用到業(yè)務(wù)中去解決更多的實(shí)際問題,,同時(shí)對(duì)現(xiàn)有流程進(jìn)行調(diào)優(yōu)。

  • 第三步,,學(xué)習(xí)源碼對(duì)組件本身進(jìn)行優(yōu)化改造,,用于解決更多的現(xiàn)實(shí)問題,如果有可能就貢獻(xiàn)給社區(qū),。當(dāng)然走到這一步的還是少數(shù)人,,這是平臺(tái)開發(fā)的事,數(shù)據(jù)開發(fā)很少有這樣的機(jī)會(huì)因?yàn)橥度氘a(chǎn)出比很差,。

最后,,我們舉個(gè)例子吧:一個(gè)項(xiàng)目需要使用一個(gè)之前沒用過的  ETL 工具,我們?nèi)绾文軌蛟趦芍軆?nèi)達(dá)到生產(chǎn)應(yīng)用的水平呢,?

首先我們需要搞明白我們需要 ETL 系統(tǒng)做什么,?

  • 數(shù)據(jù)源連接,連接上之后我們能夠抽取或者加載數(shù)據(jù),。

  • 文件的導(dǎo)入導(dǎo)出功能,。

  • 源端庫數(shù)據(jù)的全量/增量抽取。

  • 目標(biāo)庫數(shù)據(jù)的插入/更新/刪除,。

  • 流程控制:任務(wù)流動(dòng)方向的控制,、串行/并行控制,、任務(wù)成功/失敗后的處理、必要的條件判斷并能依據(jù)判斷結(jié)果執(zhí)行不同的操作,。

  • 參數(shù)傳遞與接收:多層/多級(jí)任務(wù),,參數(shù)能夠從最外層往下一層或者從最上游往下游傳遞,每個(gè)任務(wù)節(jié)點(diǎn)要能通過變量接收到上層或者上游參數(shù),。

  • ETL 執(zhí)行過程監(jiān)控,,方便后續(xù)自動(dòng)化監(jiān)控和告警。

  • ETL 運(yùn)行出錯(cuò)時(shí)候的重試/補(bǔ)數(shù),。

正常來說,,所有 ETL 工具都是能夠支持以上功能的,我們需要找到它們(否則就得盡快尋找補(bǔ)救方案),,然后就能正常的進(jìn)行 ETL 開發(fā)了,。我們需要使用新的工具先讓系統(tǒng)穩(wěn)定、準(zhǔn)確的跑起來,,同時(shí)能夠提供有效的自動(dòng)化運(yùn)行監(jiān)控,,性能優(yōu)化是下一步該做的事情。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多