根據預設,Cloud Data Fusion 會使用自動調度做為運算設定檔。估算工作負載的最佳叢集工作站 (節點) 數量並不容易,而且整個管道的單一叢集大小通常並不理想。Managed Service for Apache Spark 的自動調度資源機制可讓您以自動化的模式管理叢集資源,進而自動調度叢集 worker VM。詳情請參閱「自動調度資源」
在「計算設定」頁面中,您會看到設定檔清單,以及「總核心數」欄,其中顯示設定檔可擴充的最大虛擬 CPU 數量,例如 Up to 84。
如要使用 Managed Service for Apache Spark Compute 設定檔,可以根據管道大小管理叢集大小。
主要節點
主節點使用的資源與叢集上執行的管道或額外應用程式數量成正比。如果要在暫時性叢集上執行管道,請為主要節點使用 2 個 CPU 和 8 GB 的記憶體。如果您使用永久叢集,可能需要較大的主要節點,才能跟上工作流程。如要瞭解是否需要較大的主要節點,可以監控節點上的記憶體和 CPU 使用量。建議您將工作節點的大小設為至少 2 個 CPU 和 8 GB 的記憶體。如果管道設定使用大量記憶體,則必須使用較大的工作站。
為盡量縮短執行時間,請確保叢集有足夠的節點,盡可能進行平行處理。
工作站
以下各節說明工作節點大小的相關事項。
CPU 與記憶體
建議將工作節點的大小設為至少 2 個 CPU 和 8 GB 記憶體。如果您將管道設定為使用大量記憶體,請使用較大的工作站。舉例來說,如果 worker 節點有 4 個 CPU 和 15 GB,則每個 worker 會有 4 個 CPU 和 12 GB 可用來執行 YARN 容器。如果管道設定為執行 1 個 CPU、8 GB 的執行工具,YARN 無法在每個 worker 節點執行超過一個容器。每個 worker 節點都會有額外的 3 個 CPU 和 4 GB,但這些資源無法用於執行任何項目,因此會浪費掉。如要盡量提高叢集的資源用量,YARN 記憶體和 CPU 應是每個 Spark 執行工具所需量的整數倍。如要查看每個工作站為 YARN 保留的記憶體量,請檢查 YARN 中的 yarn.nodemanager.resource.memory-mb 屬性。
如果您使用 Apache Spark 的代管服務,YARN 容器可用的記憶體約為 VM 記憶體的 75%。系統也會根據工作站 VM 的大小調整 YARN 容器的最小大小。下表列出一些常見的工作人員大小及其對應的 YARN 設定。
| 工作站 CPU | 工作站記憶體 (GB) | YARN 節點記憶體 (GB) | YARN 記憶體分配下限 (MB) |
|---|---|---|---|
| 1 | 4 | 3 | 256 |
| 2 | 8 | 6 | 512 |
| 4 | 16 | 12 | 1024 |
| 8 | 32 | 24 | 1024 |
| 16 | 64 | 51 | 1024 |
請注意,Spark 要求的記憶體會超過為管道設定的執行器記憶體,且 YARN 會將要求的量向上取整。舉例來說,假設您已將執行器記憶體設為 2048 MB,但未提供 spark.yarn.executor.memoryOverhead 的值,這表示系統會使用預設的 384 MB。也就是說,Spark 會為每個執行工具要求 2048 MB + 384 MB,而 YARN 會將這個值向上取整為 YARN 最小分配量的確切倍數。在 8 GB 的 worker 節點上執行時,由於 YARN 最低分配量為 512 MB,因此會向上取整為 2.5 GB。這表示每個工作站可以執行兩個容器,用盡所有可用的 CPU,但會留下 1 GB 的 YARN 記憶體 (6 GB - 2.5 GB - 2.5 GB) 未使用。這表示 worker 節點的實際大小可以稍微小一點,或執行器可以獲得多一點記憶體。在 16 GB 的 worker 節點上執行時,2048 MB + 1024 MB 會四捨五入為 3 GB,因為 YARN 的最低分配量為 1024 MB。也就是說,每個 worker 節點都能執行四個容器,並使用所有 CPU 和 YARN 記憶體。
為提供背景資訊,下表列出一些常見執行器大小的建議工作人員大小。
| 執行器 CPU | 執行器記憶體 (MB) | 工作人員 CPU | 工作人員記憶體 ( GB) |
|---|---|---|---|
| 1 | 2048 | 4 | 15 |
| 1 | 3072 | 4 | 21 |
| 1 | 4096 | 4 | 26 |
| 2 | 8192 | 4 | 26 |
舉例來說,26 GB 的工作站節點可供執行 YARN 容器的記憶體為 20 GB。如果執行器記憶體設為 4 GB,則會額外增加 1 GB 的負擔,也就是每個執行器需要 5 GB 的 YARN 容器。這表示 worker 可以執行四個容器,不會有任何額外資源閒置。您也可以將工作站大小相乘。舉例來說,如果執行器記憶體設為 4096 GB,則具備 8 個 CPU 和 52 GB 記憶體的工作站也能順利運作。Compute Engine VM 會根據核心數量限制 VM 可用的記憶體容量。舉例來說,4 核心的 VM 必須至少有 7.25 GB 的記憶體,最多 26 GB 的記憶體。也就是說,如果執行器設定為使用 1 個 CPU 和 8 GB 記憶體,則 VM 會使用 2 個 CPU 和 26 GB 記憶體。如果執行器改為設定使用 2 個 CPU 和 8 GB 記憶體,則所有 CPU 都會派上用場。
磁碟
磁碟對某些管道很重要,但並非全部。如果管道不含任何重組作業,只有在 Spark 記憶體不足,需要將資料溢出至磁碟時,才會使用磁碟。對於這類管道,磁碟大小和類型通常不會對效能造成重大影響。如果管道會重組大量資料,磁碟效能就會有所影響。如果您使用 Apache Spark 的代管服務,建議您至少使用 1 TB 的磁碟大小,因為磁碟效能會隨著磁碟大小而提升。如要瞭解磁碟效能,請參閱「設定磁碟以符合效能需求」。
工作站數量
為盡量縮短執行時間,請確保叢集夠大,可盡可能平行執行作業。舉例來說,如果管道來源使用 100 個分割區讀取資料,您會希望叢集夠大,可同時執行 100 個執行器。
如要判斷叢集是否過小,最簡單的方法就是查看 YARN 待處理記憶體隨時間的變化。如果您使用 Managed Service for Apache Spark,可以在叢集詳細資料頁面找到圖表。
如果待處理記憶體長期處於高用量狀態,您可以增加工作站數量,為叢集新增額外容量。在上述範例中,叢集應增加約 28 GB,確保達到最大平行處理層級。
強化版彈性模式 (EFM)
使用 EFM 時,您可以指定重組資料時只涉及主要工作站節點。由於次要工作站不再負責處理中繼隨機資料,因此從叢集中移除次要工作站時,Spark 工作不會發生延遲或錯誤。由於系統不會縮減主要工作站,因此叢集縮減作業會更穩定有效率。如果您在靜態叢集上執行含有隨機播放的管道,建議使用 EFM。
如要進一步瞭解 EFM,請參閱「Managed Service for Apache Spark 強化版彈性模式」。