kettle轉換之多執行緒

2022-04-09 02:11:22 字數 1274 閱讀 8721

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允許轉換中的每個單獨定義多個執行緒執行,同時可以也設定輸入、輸出佇列大小,兩個特性對提公升執行速度非常有用。針對單個步驟啟動多執行緒,兩點事實需要考慮的是,每個執行緒不能看到整個資料行,且每個執行緒處理行順序不確定。

Boost之多執行緒

c 標準庫沒有涉及執行緒,在c 中,雖然不可能寫出標準相容的多執行緒程式,程式設計師可以使用特定作業系統提供的執行緒庫來寫出多執行緒程式來。可是,這至 少導致兩個突出的問題 作業系統普遍提供的是c庫,在c 中使用要更小心,每個作業系統都有自己的一套支援多執行緒的庫 另外,不標準,不可移植。boost...

linux之多執行緒

linux系統下的多執行緒遵循posix執行緒介面,稱為pthread 標頭檔案 include 原型 int pthread create pthread t tidp,const pthread attr t attr,void start rtn void void arg 返回值 若執行緒建...

c 之多執行緒

1.對多執行緒的呼叫用到頭檔案 1.1中的操縱函式 pthread create pthread t tidp,constpthread attr t attr,void start rtn void void arg 第乙個引數為指向執行緒 識別符號的 指標。第二個引數用來設定執行緒屬性。第三個引...