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同意轉換中的每一個單獨定義多個線程運行。同一時候能夠也設置輸入、輸出隊列大小。兩個特性對提升運行速度很實用。針對單個步驟啟動多線程,兩點事實須要考慮的是,每一個線程不能看到整個數據行,且每一個線程處理行順序不確定。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM