宏觀了解 Kettle
上一篇中對 Kettle 進行了簡單的介紹,并快速體驗了一把 Kettle,完成了「把數(shù)據(jù)從 CSV 文件復(fù)制到 Excel 文件」 HelloWrold 級別的功能禽作。
而在實際工作中,可以使用 Kettle 的圖形化的方式定義復(fù)雜的 ETL 程序和工作流,如下圖就是通過一系列的轉(zhuǎn)換(Transformation) 完成一個作業(yè)(Job)流程似嗤。
Kettle 核心概念
轉(zhuǎn)換
轉(zhuǎn)換(Transaformation)是 ETL 中最主要的部分,它處理抽取届宠、轉(zhuǎn)換烁落、加載各種對數(shù)據(jù)行的操作。 轉(zhuǎn)換包含一個或多個步驟(Step)豌注,如上圖中的「CSV 文件輸入」伤塌、「Excel輸出」步驟,還包括過濾數(shù)據(jù)行轧铁、數(shù)據(jù)清洗每聪、數(shù)據(jù)去重或?qū)?shù)據(jù)加載到數(shù)據(jù)庫等等。 轉(zhuǎn)換里的步驟通過跳(hop)來進行連接齿风,跳定義一個單向通道药薯,允許數(shù)據(jù)從一個步驟向另一個步驟流動。
步驟(Step)
Kettle 里面的救斑,Step 步驟是轉(zhuǎn)換里的基本的組成部分童本,上篇快速體驗的案例中就存在兩個步驟,「CSV文件輸入」和「Excel輸出」脸候,一個步驟有如下幾個關(guān)鍵特性:
步驟需要有一個名字穷娱,這個名字在轉(zhuǎn)換范圍內(nèi)唯一。
每個步驟都會讀运沦、寫數(shù)據(jù)行(唯一例外是「生成記錄」步驟泵额,該步驟只寫數(shù)據(jù))。
步驟將數(shù)據(jù)寫到與之相連的一個或多個輸出跳携添,再傳送到跳的另一端的步驟嫁盲。
-
大多數(shù)的步驟都可以有多個輸出跳,當(dāng)有多個輸出時薪寓,會彈出如下圖所示的警告進行選擇分發(fā)還是復(fù)制亡资。一個步驟的數(shù)據(jù)發(fā)送可以被設(shè)置為分發(fā)和復(fù)制澜共,分發(fā)是目標(biāo)步驟輪流接收記錄,復(fù)制是所有的記錄被同時發(fā)送到所有的目標(biāo)步驟锥腻。
跳(Hop)
Kettle 里面的嗦董,跳(Hop),跳就是步驟之間帶箭頭的連線瘦黑,跳定義了步驟之間的數(shù)據(jù)通路京革,如上圖。在 Kettle里幸斥,數(shù)據(jù)的單位是行匹摇,數(shù)據(jù)流就是數(shù)據(jù)行從一個步驟到另一個步驟的移動, 跳是兩個步驟之間的被稱之為行集的數(shù)據(jù)行緩存(行集的大小可以在轉(zhuǎn)換的設(shè)置里定義甲葬,如下圖)廊勃。當(dāng)行集滿了,向行集寫數(shù)據(jù)的步驟將停止寫入经窖,直到行集里又有了空間坡垫;當(dāng)行集空了,從行集讀取數(shù)據(jù)的步驟停止讀取画侣,直到行集里又有可讀的數(shù)據(jù)行冰悠。
數(shù)據(jù)行
在 Kettle 里,數(shù)據(jù)的單位是行配乱,數(shù)據(jù)以數(shù)據(jù)行的形式沿著步驟移動溉卓。一個數(shù)據(jù)行是零到多個字段的集合,字段包含下面幾種數(shù)據(jù)類型搬泥。
- String:字符類型數(shù)據(jù)
- Number:雙精度浮點數(shù)
- Integer:帶符號長整型(64位)
- BigNumber:任意精度數(shù)據(jù)
- Date:帶毫秒精度的日期時間值
- Boolean:取值為 true 和 false 的布爾值
- Binary:二進制字段可以包含圖像桑寨、聲音、視頻及其他類型的二進制數(shù)據(jù)
同時佑钾,每個步驟在輸出數(shù)據(jù)行時都有對字段的描述西疤,這種描述就是數(shù)據(jù)行的元數(shù)據(jù)烦粒。通常包含下面一些信息:
- 名稱:行里的字段名應(yīng)用是唯一的
- 數(shù)據(jù)類型:字段的數(shù)據(jù)類型
- 格式:數(shù)據(jù)顯示的方式休溶,如 Integer 的#、0.00
- 長度:字符串的長度或者 BigNumber 類型的長度
- 精度:BigNumber 數(shù)據(jù)類型的十進制精度
- 貨幣符號:¥
- 小數(shù)點符號:十進制數(shù)據(jù)的小數(shù)點格式
- 分組符號:數(shù)值類型數(shù)據(jù)的分組符號
步驟是并行的
這種基于行集緩存的規(guī)則(前面 「跳(Hop)」節(jié)提到)扰她,允許每個步驟都是由一個獨立的線程運行兽掰,這樣并發(fā)程度最高。這一規(guī)則也允許數(shù)據(jù)以最小消耗內(nèi)存的數(shù)據(jù)流的方式來處理(設(shè)置合理的行集大型揭邸)孽尽。在數(shù)據(jù)倉庫建設(shè)過程中,經(jīng)常要處理大量數(shù)據(jù)忧勿,所以這種并發(fā)低消耗內(nèi)存的方式也是 ETL 工具的核心需求杉女。
對于 Kettle 的轉(zhuǎn)換瞻讽,所有步驟都以并發(fā)方式執(zhí)行,即:當(dāng)轉(zhuǎn)換啟動后熏挎,所有步驟都同時啟動速勇,從它們的輸入跳中讀取數(shù)據(jù),并把處理過的數(shù)據(jù)寫到輸入跳坎拐,直到輸入跳里不再有數(shù)據(jù)烦磁,就中止步驟的運行。當(dāng)所有的步驟都中止了哼勇,整個轉(zhuǎn)換就中止了都伪。
總結(jié)
- Kettle 通過一系列的轉(zhuǎn)換(Transformation) 完成一個作業(yè)(Job)流程
- 通過了解 Kettle 的核心概念,得知 Kettle 是通過「跳(Hop)」將數(shù)據(jù)流從一個步驟到另一個步驟的移動积担,每個步驟都是由一個獨立的線程運行陨晶,這樣提高并發(fā)程度,但相比 Hadoop 生態(tài)移動計算模型更加昂貴
- Kettle 本身由 Java 開發(fā)帝璧,需要配置合理的 JVM 參數(shù)
歡迎關(guān)注公眾號:HelloTech珍逸,獲取更多內(nèi)容