管線可以包含許多具有許多流程的資料集,以使其保持最新狀態。 管道會自動管理更新和叢集,以有效率地更新。 不過,管理大量流會產生一些額外負荷,有時這可能會導致初始化負荷超出預期,甚至在處理期間的管理額外負荷。
如果您在等待觸發管線初始化時遇到延遲,例如初始化時間超過五分鐘,請考慮將處理分割成數個管線,即使資料集使用相同的來源資料也一樣。
備註
觸發的管線每次觸發時都會執行初始化步驟。 連續管線只有在停止並重新啟動時才會執行初始化步驟。 本節對於優化觸發管線的初始化最有用。
何時考慮分割管線
在數種情況下,分割管線可能出於效能原因而有利。
-
INITIALIZING和SETTING_UP_TABLES階段花費的時間比您想要的長,從而影響您的整體處理程序時間。 如果超過 5 分鐘,通常會透過分割管線來改善。 - 在單一管線中執行許多 (超過 30-40) 串流資料表時,管理叢集的驅動程式可能會成為瓶頸。 如果您的驅動程式沒有回應,則串流查詢的持續時間將會增加,從而影響更新的總時間。
- 具有數個串流資料表流程的觸發管線可能無法平行執行所有可平行化的資料流程更新。
效能問題的詳細資料
本節說明在單一管線中擁有許多資料表和流程所可能產生的一些效能問題。
初始化和設定資料表階段的瓶頸
執行的初始階段可能是效能瓶頸,視管線的複雜性而定。
初始化階段
在此階段,會建立邏輯計劃,包括建置相依關係圖形和決定表格更新順序的計劃。
"SETTING_UP_TABLES 階段"
在此階段,會根據上一個階段中建立的計劃,執行下列程式:
- 管線中所定義的所有資料表的結構描述驗證和解析。
- 建置相依性圖表,並決定資料表執行的順序。
- 檢查每個資料集是否在管線中處於作用中狀態,或自先前更新以來是新的。
- 在第一次更新中建立串流資料表,並針對具體化檢視,建立每次管線更新期間所需的暫存檢視或備份資料表。
為什麼初始化和設置資料表可能需要更長的時間
有許多資料集和許多流程的大型管道可能會因為數個原因而耗時較長:
- 對於具有許多流程和複雜相依性的管線,由於要完成的工作量,這些階段可能需要較長的時間。
- 複雜的轉換(包括
Auto CDC轉換)可能會導致效能瓶頸,因為需要執行根據定義的轉換來具體化表格的作業。 - 在某些情況下,大量流程可能會導致速度變慢,即使這些流程不是更新的一部分。 例如,假設管道有超過 700 個流程,其中每個觸發程式會根據組態更新少於 50 個流程。在此範例中,每次執行都必須完成所有 700 個資料表的一些步驟,取得資料框,然後選取要執行的資料框。
驅動程式中的瓶頸
驅動程式會管理執行內的更新。 它必須針對每個資料表執行一些邏輯,以決定叢集中的哪些執行個體應該處理每個流程。 在單一管線內執行多個(超過 30-40 個)串流資料表時,由於控制器負責處理整個叢集中的工作,可能會造成 CPU 資源上的瓶頸。
驅動程式也可能遇到記憶體問題。 當平行流的數量為 30 個或更多時,這種情況會更頻繁地發生。 沒有特定數目的流程或資料集會導致驅動程式記憶體問題,但取決於平行執行之工作的複雜性。
串流可以平行執行,但這需要驅動程式(Driver)同時針對所有串流使用記憶體和 CPU。 在觸發的管線中,驅動程式可能會同時平行處理部分資料流,以避免記憶體和 CPU 資源的限制。
在所有這些情況下,分割管線,讓每個管線都有一組最佳的流程,可以加快初始化和處理時間。
管線拆分的取捨
當您的所有流都在相同的管線中時,Lakeflow Spark 宣告式管線將為您管理依賴性。 當有多個管線時,您必須管理管線之間的相依性。
相依性 您可能有一個下游管線依賴於多個上游管線,而不是只依賴於一個。 例如,如果您有三個管線
pipeline_A、pipeline_B和pipeline_C,而pipeline_C相依於pipeline_A和pipeline_B,您希望pipeline_C僅在pipeline_A和pipeline_B完成各自更新之後才進行更新。 解決此問題的一種方法是協調相依性,即將每個管線設成作業中的任務,並正確建立其相依性模型,因此pipeline_C只有在pipeline_A和pipeline_B都完成後才會更新。並行在管道中,不同的流程可能需要不同的時間來完成。例如,如果
flow_A在 15 秒內更新,而flow_B可能需要數分鐘的時間。 在分割管線之前查看查詢時間,並將較短的查詢分組在一起會很有幫助。
規劃分割管線
您可以在開始之前視覺化管線分割。 以下是處理 25 個資料表的來源管線圖表。 根據資料來源會分成 8 個區段,每個區段有 2 個視圖。
分割管線後,有兩條管線。 有一個系統負責處理單一根資料源,以及4個區段及其相關的視圖。 第二個流程會處理其他 4 個區段及其相關聯的檢視。 第二個管線依賴第一個管線來更新根資料來源。
分割流程而不進行整體更新
規劃管線分割之後,請建立所需的任何新管線,並在管線之間移動資料表,以平衡管線的負載。 您可以移動表格,而不導致完全重新整理。
如需詳細資訊,請參閱 在管線之間移動資料表。
此方法有一些限制:
- 管線必須位於 Unity 目錄中。
- 來源和目的地管線必須位於相同的工作區內。 不支援跨工作區移動。
- 目的地管線必須在移動之前建立並執行一次 (即使失敗)。
- 您無法將資料表從使用預設發佈模式的管線移至使用舊版發佈模式的管線。 如需詳細資訊,請參閱 LIVE 結構描述 (舊版)。