共用方式為


Spark 作業之間的間距

因此,您會在作業時程表中看到差距,如下所示:

作業差距

有幾個原因可能會發生。 如果差距占您工作負載所花費時間的高比例,您需要找出造成這些差距的原因,以及是否預期。 在差距期間可能會發生一些情況:

  • 沒有工作要做
  • 驅動程式正在編譯複雜的執行計劃
  • 執行非 Spark 程式代碼
  • 驅動程式已多載
  • 叢集故障

沒有工作

通用計算上,having 沒有任務處理可能是導致差距的最可能原因。 因為叢集正在執行,而且使用者正在提交查詢,因此預計會有差距。 這些差距是查詢提交之間的時間。

複雜的執行計劃

例如,如果您在迴圈中使用 withColumn() ,它會建立非常昂貴的計劃來處理。 差距可能是司機只需建置和處理計劃的時間。 如果是這種情況,請嘗試簡化程式碼。 使用 selectExpr() 將多個 withColumn() 呼叫合併成一個表達式,或將程式碼轉換成 SQL。 您仍然可以在 Python 程式碼中內嵌 SQL,使用 Python 以字串函式操作查詢。 這通常能解決這種類型的問題。

執行非 Spark 程式代碼

Spark 程式代碼是以 SQL 撰寫,或使用 PySpark 之類的 Spark API。 任何不是Spark的程式代碼執行,都會在時間軸中顯示為間距。 例如,您可以在 Python 中有一個迴圈,其會呼叫原生 Python 函式。 此程式代碼未在Spark中執行,而且它可以顯示為時間軸中的間距。 如果您不確定程式代碼是否正在執行 Spark,請嘗試在筆記本中以互動方式執行它。 如果程式代碼使用 Spark,您會在資料格底下看到 Spark 作業:

Spark 執行

您也可以展開 數據格底下的 [Spark 作業 ] 下拉式清單,以查看作業是否正在主動執行(如果 Spark 現在處於閑置狀態)。 如果您未使用 Spark,則不會在儲存格底下看到 Spark 作業 ,否則您會看到沒有作用中。 如果您無法以互動方式執行程序代碼,您可以嘗試在程式碼中記錄,並查看是否可以依時間戳比對程式碼區段的間距,但這很棘手。

如果您在時間軸中看到執行非 Spark 程式碼所導致的時間間隔,這表示您的背景工作角色在間隔期間全都閒置且可能浪費金錢。 也許這是有意為之且不可避免,但如果可以撰寫此程式碼來使用 Spark,則您將充分利用叢集。 從本教學課程開始,了解如何使用 Spark。

驅動程式已多載

若要判定驅動程式是否已多載,您需要查看叢集計量。

如果您的叢集位於 DBR 13.0 或更新版本,請按下 此螢幕快照中醒目提示的 [計量 ]:

新增叢集計量

請注意伺服器 負載分佈視覺效果。 您應該檢視驅動程式是否已大量載入。 此視覺效果具有叢集中每部計算機的色彩區塊。 紅色表示大量載入,而藍色表示完全未載入。

上一個螢幕快照顯示基本上閑置的叢集。 如果驅動程式多載,看起來會像這樣:

新的計量、忙碌驅動程式

我們可以看到一個方塊是紅色的,而另一個則為藍色。 將滑鼠滾到紅色方塊上,以確定紅色區塊代表您的驅動程式。

若要修正多載驅動程式,請參閱 Spark 驅動程式多載

叢集故障

叢集故障很少見,但如果發生這種情況,則很難判定所發生的情況。 您可能只想重新啟動叢集,看看這是否能解決問題。 您也可以查看記錄,以查看是否有任何可疑項目。 以下螢幕快照中醒目提示的事件 記錄 索引標籤和 [驅動程序記錄 ] 索引標籤會是要查看的地方:

取得驅動程序記錄

您可以啟用 [叢集記錄傳遞],以存取背景工作角色的記錄。 您也可以變更記錄層級,但可能需要聯絡 Databricks 帳戶團隊以取得協助。