認識 Spark

已完成

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

高階概述

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

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

範例 Apache Spark 叢集的圖表,其中包含一個驅動程式節點和四個背景工作節點。

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

Spark 作業詳細資料

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

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

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

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

包含工作的 Spark 叢集圖表。

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

作業和階段

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

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

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

模組化

Spark 包含從 SQL 到串流和機器學習等工作的連結庫,使其成為資料處理工作的工具。 一些 Spark 連結庫包括:

  • Spark SQL:用於使用結構化資料。
  • SparkML:用於機器學習。
  • GraphX:用於圖表處理。
  • Spark Streaming:用於即時資料處理。

Spark 連結庫的圖表。

相容性

Spark 可以在各種分散式系統上執行,包括 Hadoop YARN、Apache Mesos、Kubernetes 或 Spark 自己的叢集管理員。 它也會讀取和寫入各種資料來源,例如 HDFS、Cassandra、HBase 和 Amazon S3。