kettle轉換之多線程,kettle多線程
kettle轉換之多線程
ETL項目中效能方面的考慮通常是最重要的,特別是所討論的任務頻繁執行,或一些列的任務必須在固定的時間內執行。本文重點介紹利用kettle轉換的多線程特性,以最佳化其效能。
假設轉換中的每個步驟已經設定成最快的執行速度並且調節效能至最佳,且再沒有更多的效能提升空間。但是利用kettle的多線程特性仍然可能提升轉換的整體效能。
調整隊列大小
當嘗試最佳化效能時,你可以調整輸入、輸出隊列的大小。特別是如果你有足夠多的記憶體(RAM)可用。在kettle轉換中配置隊列大小是轉換配置中的“Nr of rows in rows”選項的大小,其配置對轉換中所有的步驟都有效。增加可使轉換更快執行完活動的步驟,從而釋放CPU時間給後續步驟。針對特定轉換調節合適大小最佳實務。
設定步驟執行拷貝數
kettle轉換在運行時,每個步驟可被看成一個帶著輸入、輸出行隊列的背景工作執行緒,每個線程是並行啟動並執行,當資料化是有效時即處理。kettle允許針對每個獨立步驟手工定義其線程數。如果轉換有一個瓶頸步驟,該步驟有多個執行個體同時運行可以加快處理速度。可以通過檢查每個步驟的輸入、輸出隊列及行/秒的處理效能找到候選的瓶頸步驟。如果某步驟有滿輸入隊列,空輸出隊列,並每秒處理行數低,這些因素往往決定了整個轉換的效能,從而找到瓶頸步驟。這些因素的資料在kettle執行“Step Metrics”視圖中可以看到。
右擊問題步驟,選擇“change number ofcopies to start..”並輸入合適的線程數,這時當你運行轉換時,你將注意到多個啟動並執行執行個體,每個執行個體在視圖中有自己的輸入、輸出隊列。
轉換的整體效能提升取決於每個步驟的效能及作業系統和硬體效能。如:如果cpu效能強,“計算”步驟效能就佳;資料庫查詢步驟可以通過多線程提升效能;其他步驟如”update“步驟不太可能提升效能,但是和RDBMS有很多關係。
需要注意的是步驟啟用多線程也有它的局限性。更具體地,如果問題的步驟中或之後,依賴所有資料行的排列順序時,該轉換將不能正確的運行。每個步驟的多個線程都獨立地接收並處理他們的資料行,因此不能保證所有資料行駛按順序處理。另外需要提醒的是,每個線程保持自己的獨立內部狀態,並不能看到其他線程正處理的行。因此,如果某個步驟必須看到所有的行,才能正常工作,那一定不能使用多線程。”Sort rows”, “Unique rows” 和 “Rowdenormalizer”就是最好的例子。這這些步驟使用多線程是沒有意義的,因為每個線程處理行僅僅是所有行的一個子集。
結論
kettle允許轉換中的每個單獨定義多個線程執行,同時可以也設定輸入、輸出隊列大小,兩個特性對提升執行速度非常有用。針對單個步驟啟動多線程,兩點事實需要考慮的是,每個線程不能看到整個資料行,且每個線程處理行順序不確定。
怎給一個 Kettle 轉換設定變數與命令列參數
1. 變數的類型Kettle 的早期版本中的變數只有系統內容變數目前版本中(3.1) 變數包括系統內容變數, Kettle變數 和內部變數三種系統內容變數的影響範圍很廣,凡是在一個 JVM下啟動並執行線程都受其影響.Kettle 變數限制了變數的作用範圍, 變數範圍包括三種分別是 grand-parent job, parent job, root job內部變數: 是 kettle 內建的一些變數, 主要是kettle 運行時依賴的環境, 如轉換檔名稱, 轉換路徑,ip地址, kettle 版本號碼等等.2. 變數的設定系統內容變數 有三種設定方式1) 通過命令列 -D 參數2) 屬性檔案 kettle.property 中設定, 該屬性檔案位於 ${user.home}.kettle 下3) 通過設定環境變數步驟 (Set Variable) 設定.Kettle 變數 只能通過設定環境變數 (Set Variable) 步驟設定,同時設定變數的作用範圍.內部變數 是預置的無須設定.3. 變數的使用無論哪種類型的變數在使用上都是一樣的, 有兩種方式1) 通過 %%var%% 或 ${var} 來引用, 這個引用可以用在 SQL 陳述式中, 也可以用在允許變數輸入的輸入框裡.2) 通過擷取變數 (Get Variable) 步驟來使用命令列參數:1. 設定: 命令列參數通過擷取系統資訊(Get System Info) 步驟設定, 在使用時可以像列名一樣來使用,不必像變數一樣要通過 ${var} 這樣的格式引用. 使用者最多可以設定10個命令列參數2. 傳遞: 命令列下使用 pan /file:xxx.ktr arg1 arg2 來傳遞參數.圖形介面下,每次運行時有要求輸入參數的提示視窗.
kettle怎在job中加入已經寫好的轉換?
在萬用群組件中,將【Transformation】拖拽至配置介面,然後雙擊指定需要啟動並執行轉換。