Dataflow 工作步驟資訊

在 Dataflow 監控介面中,「步驟資訊」面板會顯示工作中的個別步驟資訊。步驟代表管道中的單一轉換。複合轉換包含子步驟。

「步驟資訊」面板會顯示下列資訊:

  • 步驟的指標。
  • 步驟的輸入和輸出集合相關資訊。
  • 這個步驟對應到哪些階段。
  • 側邊輸入指標。

使用「步驟資訊」面板瞭解工作在每個步驟的執行情況,並找出可最佳化的步驟。

查看步驟資訊

如要查看步驟資訊,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Dataflow」>「Jobs」(工作) 頁面。

    前往「Jobs」(工作) 頁面

  2. 選取職務。

  3. 按一下「Job graph」(工作圖表) 分頁標籤,即可查看工作圖表。工作圖會以方塊表示管道中的每個步驟。

  4. 按一下步驟,步驟資訊會顯示在「Step info」(步驟資訊) 面板中。

  5. 如要查看複合式轉換的子步驟,請按一下「展開節點」箭頭

步驟指標

「Step info」(步驟資訊) 面板會顯示步驟的下列指標。

系統浮水印和延遲時間

系統浮水印是所有事件時間都已完整處理的最新時間戳記。系統水位線延遲時間是資料項目等待處理的最長時間。

資料浮水印和延遲

資料浮水印是時間戳記,標記這個步驟中輸入資料的預估作業完成時間。資料浮水印延遲是指最新輸入事件時間與資料浮水印之間的差異。

實際時間

實際時間是指所有工作站的所有執行緒,在以下動作上所花費的約略總時間:

  • 初始化步驟
  • 處理資料
  • 重組資料
  • 結束步驟

如果是複合步驟,實際時間等於在組成步驟中所花費的時間總和。

實際時間可協助您找出執行速度緩慢的步驟,並診斷管道哪個部分花費的時間超過必要時間。

最長作業延遲時間

最長作業延遲時間是指系統為了處理收到的訊息或期限到期,在這個步驟上花費的最長時間。這項指標是以各個步驟 (結合起來為單一階段) 的匯總值計算,因此這裡顯示的值代表整個階段的數據。

輸入/輸出內容集合

「步驟資訊」面板會顯示步驟中每個輸入和輸出集合的下列資訊:

  • 處理量圖表。這個圖表顯示集合的處理量。您可以將圖表顯示為每秒元素數或每秒位元組數。如要進一步瞭解這項指標,請參閱「輸送量」一文。

  • 新增至集合的元素數量。

  • 預估集合大小 (以位元組為單位)。

已完成最佳化處理的階段

「階段」代表 Dataflow 執行的單一工作單元。選取工作圖中的步驟時,「步驟資訊」面板會顯示執行該步驟的階段名稱,以及目前狀態,例如執行中、已停止或成功。

如要查看工作階段的詳細資訊,請使用「執行詳細資料」分頁

側邊輸入指標

側邊輸入是額外輸入,轉換作業每次處理元素時都可以存取。如果轉換會建立或使用側邊輸入,「Side Info」(側邊資訊) 面板會顯示側邊輸入集合的指標。

如果複合式轉換會建立或使用側邊輸入,請展開該複合式轉換,直到您看見建立或使用側邊輸入的特定子轉換。選取該子轉換即可查看側邊輸入指標。

會建立側邊輸入的轉換

如果轉換會建立側邊輸入集合,「Side Input Metrics」(側邊輸入指標) 區段就會顯示集合名稱和下列指標:

  • 「Time spent writing」(寫入作業耗用的時間):寫入側邊輸入集合所花費的時間。
  • Bytes written (已寫入的位元組):已寫入側邊輸入集合的總位元組數。
  • 「Time & bytes read from side input」(來自側邊輸入的讀取時間和位元組):這份資料表會針對使用側邊輸入集合的所有轉換 (稱為「側邊輸入消費端」) 提供其他指標。

「Time & bytes read from side input」(從側邊輸入讀取所花費的時間和讀取的位元組) 資料表包含各個側邊輸入消費端的下列資訊:

  • Side input consumer (側邊輸入消費端):側邊輸入消費端的轉換名稱。
  • Time spent reading (讀取作業耗用的時間):這個消費端讀取側邊輸入集合所花費的時間。
  • 「Bytes read」(已讀取位元組):這個消費端從側邊輸入集合讀取的位元組數。

下圖顯示會建立側邊輸入集合之轉換的側邊輸入指標:

「步驟資訊」面板中顯示的側邊輸入指標

工作圖表有一個展開的複合式轉換 (MakeMapView)。建立側邊輸入的子轉換 (CreateDataflowView) 為已選取狀態,且「Step info」(步驟資訊) 面板中顯示側邊輸入指標。

使用側邊輸入的轉換

如果轉換會使用一或多個側邊輸入,「Side Input Metrics」(側邊輸入指標) 區段會顯示「Time & bytes read from side input」(從側邊輸入讀取所花費的時間和讀取的位元組) 表格。這分資料表包含各個側邊輸入集合的下列資訊:

  • 「Side input collection」(側邊輸入集合):側邊輸入集合的名稱。
  • Time spent reading (讀取作業耗用的時間):轉換讀取這個側邊輸入集合所花費的時間。
  • 「Bytes read」(已讀取位元組):轉換從側邊輸入集合讀取的位元組數。

下圖顯示會從側邊輸入集合讀取資料之轉換的側邊輸入指標。

「步驟資訊」面板中顯示的側邊輸入指標

JoinBothCollections 轉換會從側邊輸入集合讀取資料。作業圖中的 JoinBothCollections 為已選取狀態,且「Step info」(步驟資訊) 面板中顯示側邊輸入指標。

找出側邊輸入的效能問題

側邊輸入可能會影響管道效能。當管道使用側邊輸入時,Dataflow 會將集合寫入永久層 (例如磁碟),而轉換會從這個永久集合讀取資料。這類讀取與寫入作業會影響工作的執行時間。

「重複作業」是常見的側邊輸入效能問題。如果側邊輸入 PCollection 過大,工作站就無法將整個集合快取在記憶體中,因此必須重複從永久側邊輸入集合讀取資料。

在下圖中,側邊輸入指標顯示從側邊輸入集合讀取的位元組總數遠大於集合大小,即寫入的位元組總數。側邊輸入集合為 563 MB,但耗用資料的轉換所讀取的位元組總數卻接近 12 GB。

重複作業的實例

為了提升這個管道的效能,請重新設計演算法,以避免重複作業或重複擷取側邊輸入資料。在這個例子中,管道會建立兩個集合的笛卡爾乘積。演算法會反覆查詢整個側邊輸入集合,找出主要集合的各個元素。您可以批次處理主要集合的多個元素,藉此改善管道的存取模式。這項變更可減少工作站必須重複讀取側邊輸入集合的次數。

如果您的管道透過對一個或多個大型側邊輸入套用 ParDo 來執行彙整,則可能會出現另一個常見的效能問題。在這種情況下,工作站會將彙整作業處理時間的一大部分用於從側邊輸入集合讀取資料。

下圖顯示上述問題的側邊輸入指標:

昂貴的側邊輸入聯結範例

JoinBothCollections 轉換的總處理時間超過 18 分鐘。工作站會將大部分的處理時間 (10 分鐘) 用於從 10 GB 的側邊輸入集合讀取資料。如要提升這個管道的效能,請使用 CoGroupByKey 而非側邊輸入。