認識 Spark

已完成

若要深入了解如何使用 Azure Databricks 中的 Apache Spark 來處理和分析資料,請務必了解基礎架構。

高階概述

從高階來看,Azure Databricks 服務會在您的 Azure 訂用帳戶內啟動並管理 Apache Spark 叢集。 Apache Spark 叢集是被視為單一電腦的電腦群組,並會處理從筆記本發出的命令執行方式。 叢集可讓您在許多電腦之間平行處理資料,以改進規模與效能。 它們包含 Spark「驅動程式」和「背景工作」節點。 驅動程式節點會將工作傳送至背景工作節點,並指示背景工作節點從指定的資料來源提取資料。

在 Databricks 中,筆記本介面通常是驅動程式。 此驅動程式包含程式的主要迴圈,並在叢集上建立分散式資料集,然後將作業套用至這些資料集。 驅動程式會透過 SparkSession 物件存取 Apache Spark,不論部署位置為何。

Diagram of an example Apache Spark cluster, consisting of a Driver node and four worker nodes.

Microsoft Azure 會管理叢集,並根據您的使用量和設定叢集時所使用的設定,視需要自動調整叢集規模。 也可以啟用自動終止,讓 Azure 可在指定的閒置分鐘數之後終止叢集。

Spark 作業詳細資料

提交給叢集的工作會視需要分割成多個獨立的作業。 這是將工作分散到叢集節點的方式。 作業會進一步細分為工作。 作業的輸入會分割成一或多個分割區。 這些分割區是每個插槽的工作單位。 在工作之間,分割區可能需要透過網路進行重組和共用。

Spark 高效能的祕密是平行處理原則。 「垂直」調整 (將資源新增至單一電腦) 受制於有限數量的 RAM、執行緒和 CPU 速度;但叢集會「水平」調整,以視需要將新的節點新增至叢集。

Spark 會在兩個層級平行處理作業:

  • 平行處理的第一個層級是「執行程式」,也就是在背景工作節點上執行的 Java 虛擬機器 (JVM),通常是每個節點一個執行個體。
  • 平行處理的第二個層級是「位置」,也就是由每個節點核心數和 CPU 數決定的數目。
  • 每個執行程式都有多個位置,可指派平行處理的工作。

Diagram of Spark cluster with tasks.

JVM 本質上是多執行緒,但單一 JVM (例如在驅動程式上協調工作的 JVM) 卻有一個有限的上限。 藉由將工作 (Work) 分割成多個工作 (Task),驅動程式就可以將工作單位指派給背景工作節點上執行程式中的 *位置進行平行執行。 此外,驅動程式會判斷如何分割資料,以便將其散發進行平行處理。 因此,驅動程式會將資料分割指派給每個工作,讓每個工作知道要處理的資料片段。 一旦開始,每個工作就會擷取獲指派的資料分割。

作業和階段

視所執行的工作而定,可能需要多個平行處理的作業。 每個作業都會分成多個「階段」。 一個實用的類比是想像作業是蓋房子:

  • 第一個階段是奠定基礎。
  • 第二個階段是將牆豎起。
  • 第三個階段是加蓋屋頂。

試圖不依序執行上述任何步驟並不合理,事實上也不可能。 同樣地,Spark 會將每個作業分成多個階段,以確保一切都能依照正確的順序完成。