最佳實踐:集群配置

當您創建和配置集群時,Databricks提供了許多選項,以幫助您以最低的成本獲得最佳性能。然而,當您試圖確定工作負載的最佳配置時,這種靈活性可能會帶來挑戰。在創建新集群或配置現有集群時,仔細考慮用戶將如何使用集群將有助於指導配置選項。在確定配置選項時需要考慮的事情有:

  • 什麼類型的用戶將使用集群?與數據工程師或數據分析師相比,數據科學家可能需要執行不同的工作類型和不同的需求。

  • 用戶將在集群上運行什麼類型的工作負載?例如,批提取、轉換和加載(ETL)作業可能具有與分析工作負載不同的需求。

  • 您需要滿足什麼級別的服務水平協議(SLA) ?

  • 你有什麼預算限製?

本文基於這些注意事項,為不同的場景提供集群配置建議。本文還討論了Databricks集群的特定特性,以及對這些特性的注意事項。

您的配置決策將需要在成本和性能之間進行權衡。集群的主要成本包括集群消耗的數據單元(Databricks Units, DBUs)和運行集群所需的底層資源成本。次要成本可能不太明顯,比如不符合SLA的業務成本、員工效率下降或由於控製不當而可能造成的資源浪費。

集群功能

在討論更詳細的集群配置場景之前,理解Databricks集群的一些特性以及如何最好地使用這些特性是很重要的。

通用集群和工作集群

當你創建一個集群您可以選擇一種集群類型:通用集群或作業集群。通用集群可以由多個用戶共享,最適合執行特別分析、數據探索或開發。完成了處理的實現並準備好對代碼進行操作之後,請切換到在作業集群上運行它。作業集群將在作業結束時終止,從而減少資源使用和成本。

集群模式

磚支持三種集群模式:標準、高並發、單節點。大多數常規用戶使用標準或單節點集群。

  • 標準集群是使用Apache Spark處理大量數據的理想選擇。

  • 單節點集群適用於使用少量數據或非分布式工作負載(如單節點機器學習庫)的作業。

  • 高並發集群非常適合需要共享資源或運行臨時作業的用戶組。管理員通常創建高並發集群。Databricks建議為高並發集群啟用自動伸縮。

按需和現貨實例

Amazon Web服務有兩層EC2實例:按需和現貨。對於隨需應變的實例,您按秒支付計算能力,沒有長期承諾。Spot實例允許您使用備用的Amazon EC2計算能力,並選擇您願意支付的最高價格。現貨價格根據AWS計算能力的供需情況實時變化。如果當前現貨市場價格高於最高現貨價格,則終止現貨實例。由於與按需定價相比,現貨實例的價格通常較低,因此可以顯著降低運行應用程序的成本,增加應用程序的計算能力,並提高吞吐量。

Databricks支持使用隨需應變和現貨實例的組合和自定義現貨價格創建集群,允許您根據您的用例定製您的集群。例如,該映像演示了一個配置,該配置指定驅動節點和四個工作節點應該作為按需實例啟動,其餘四個工作節點應該作為現貨實例啟動,其中最大現貨價格為按需價格的100%。

配置按需和現貨實例
馬克斯現貨價格

Databricks建議啟動集群,使Spark驅動程序在一個隨需應變的實例上,這樣即使丟失了一些實例節點,也可以保存集群的狀態。如果您選擇使用包括驅動程序在內的所有現貨實例,如果由於現貨市場的變化而丟失了驅動程序實例,那麼任何緩存的數據或表都將被刪除。

另一個重要的設置是Spot退回到On-demand.如果您正在運行一個混合集群(即按需和現貨實例的混合),並且如果現貨實例獲取失敗或丟失了現貨實例,那麼Databricks將退回到使用按需實例,並為您提供所需的容量。如果沒有這個選項,您將失去群集的spot實例提供的容量,從而導致工作負載的延遲或故障。Databricks建議根據作業的關鍵程度、對實例丟失導致的延遲和失敗的容忍度,以及對每種類型用例的成本敏感性,在集群中設置隨需應變和現場實例的混合。

提示

你可以使用亞馬遜現貨實例顧問以確定適合您的實例類型和地區的價格。

自動定量

自動定量允許集群根據工作負載自動調整大小。從成本和性能的角度來看,自動伸縮可以使許多用例和場景受益,但理解何時以及如何使用自動伸縮可能具有挑戰性。以下是決定是否使用自動縮放以及如何獲得最大利益的一些考慮因素:

  • 與固定大小的集群相比,自動擴展通常可以降低成本。

  • 與供應不足的固定大小的集群相比,自動伸縮的工作負載可以運行得更快。

  • 有些工作負載不兼容自動伸縮集群,包括spark-submit作業和一些Python包。

  • 對於單用戶通用集群,當最低工作人員數量設置得太低時,用戶可能會發現自動縮放會減慢他們的開發或分析。這是因為它們運行的命令或查詢之間的間隔通常是幾分鍾,在這段時間內集群處於空閑狀態,可以縮小這段時間以節省成本。當執行下一個命令時,集群管理器將嚐試擴展,在從雲提供商檢索實例時花費幾分鍾時間。在此期間,作業可能會在資源不足的情況下運行,從而減慢檢索結果的時間。增加最低工人數量雖然有幫助,但也增加了成本。這是需要平衡成本和性能的另一個例子。

  • 如果三角洲緩存,重要的是要記住,如果某個節點終止,則該節點上的任何緩存數據都將丟失。如果保留緩存數據對於工作負載很重要,可以考慮使用固定大小的集群。

  • 如果您有一個運行ETL工作負載的作業集群,如果您知道作業不太可能發生變化,那麼有時可以在調優時適當地調整集群的大小。但是,如果數據大小增加,自動縮放為您提供了靈活性。值得注意的是,如果集群在很長一段時間內未被充分利用或等待另一個進程的結果,優化的自動伸縮可以減少長時間運行作業的成本。但是,當集群試圖適當地擴展時,您的工作可能會遇到輕微的延遲。如果您對某個工作有嚴格的sla,那麼固定大小的集群可能是更好的選擇,或者可以考慮使用Databricks減少集群啟動時間。

磚還支持自動定量本地存儲.通過自動伸縮本地存儲,Databricks可以監控集群的Spark工作程序上可用的空閑磁盤空間。如果一個工作者的磁盤空間開始不足,Databricks會在它耗盡磁盤空間之前自動將一個新的托管卷附加到該工作者。

通過維護一組可用的、隨時可用的實例,減少集群啟動和擴展時間。Databricks建議利用池來提高處理時間,同時最小化成本。

磚運行時版本

Databricks推薦使用最新的Databricks運行時版本的通用集群。使用最新的版本將確保您在代碼和預加載包之間擁有最新的優化和最新的兼容性。

對於運行操作負載的作業集群,考慮使用長期支持(LTS) Databricks運行時版本。使用LTS版本將確保您不會遇到兼容性問題,並可以在升級之前徹底測試您的工作負載。如果您有關於機器學習或基因組學的高級用例,請考慮專門的Databricks Runtime版本。

集群政策

集群政策允許管理員強製控製集群的創建和配置。Databricks建議使用集群策略來幫助應用本指南中討論的建議。中了解有關集群策略的更多信息集群策略最佳實踐指南

自動終止

許多用戶在使用完集群後不會考慮終止它們。幸運的是,集群在設定的一段時間後自動終止,默認為120分鍾。

管理員可以在創建集群策略時更改此默認設置。通過減少集群空閑的時間,減少此設置可以降低成本。一定要記住,當集群終止時,所有狀態都將丟失,包括所有變量、臨時表、緩存、函數、對象等等。當集群再次啟動時,需要恢複所有這些狀態。如果一名開發者花了30分鍾的午休時間,那麼花同樣的時間讓筆記本回到之前的狀態將是一種浪費。

重要的

空閑集群在終止前的不活動期間繼續積累DBU和雲實例費用。

垃圾收集

雖然它可能沒有本文討論的其他注意事項那麼明顯,但注意垃圾收集可以幫助優化集群上的作業性能。提供大量RAM可以幫助作業更有效地執行,但也可能導致垃圾收集期間的延遲。

為了盡量減少長時間垃圾收集清理的影響,避免部署為每個實例配置大量RAM的集群。將更多RAM分配給執行程序將導致更長的垃圾收集時間。相反,應該配置具有較小RAM大小的實例,如果您的作業需要更多內存,則部署更多實例。但是,在某些情況下,建議使用更少的節點和更多的RAM,例如,需要大量shuffle的工作負載,如中所述集群規模的考慮

集群訪問控製

您可以配置兩種集群權限:

  • 允許創建集群權限控製用戶創建集群的能力。

  • 集群級權限控製使用和修改特定集群的能力。

要了解有關配置集群權限的更多信息,請參見集群訪問控製

如果您擁有集群創建權限或對集群策略的訪問權限,就可以創建集群,這允許您在策略規範內創建任何集群。集群創建者是所有者,並具有Can Manage權限,這將使他們能夠在集群的數據訪問權限限製內與任何其他用戶共享它。

的集群配置時,理解集群權限和集群策略非常重要常見的場景

集群的標簽

集群的標簽允許您輕鬆監控組織中不同組使用的雲資源的成本。您可以在創建集群時將標記指定為鍵-值字符串,然後Databricks將這些標記應用於雲資源,如實例和EBS卷。了解更多關於標簽執行在集群策略最佳實踐指南中。

集群規模的考慮

Databricks為每個worker節點運行一個執行器。因此,術語executor和worker在Databricks架構的上下文中可以互換使用。人們通常認為集群的規模是工人的數量,但還有其他重要的因素需要考慮:

  • 總執行程序內核(計算):所有執行程序的內核總數。這決定了集群的最大並行度。

  • 總執行程序內存:跨所有執行程序的RAM總量。這決定了在將數據溢出到磁盤之前可以在內存中存儲多少數據。

  • 執行器本地存儲:本地磁盤存儲的類型和數量。本地磁盤主要用於在shuffle和緩存期間發生溢出的情況。

其他考慮事項包括工作器實例類型和大小,它們也會影響上述因素。在調整集群大小時,請考慮:

  • 您的工作負載將消耗多少數據?

  • 您的工作負載的計算複雜度是多少?

  • 你從哪裏讀取數據?

  • 如何在外部存儲中對數據進行分區?

  • 需要多少並行度?

回答這些問題將幫助您根據工作負載確定最佳的集群配置。對於隻使用窄轉換的簡單ETL樣式的工作負載(每個輸入分區將隻貢獻一個輸出分區的轉換),請關注計算優化的配置。如果您預計會有很多shuffle,那麼內存的數量就很重要,存儲空間也很重要,因為它可以解釋數據溢出。在shuffle-heavy工作負載期間,當在機器之間傳輸數據時,更少的大型實例可以減少網絡I/O。

在工作者的數量和工作者實例類型的大小之間有一個平衡。擁有兩個工作節點(每個工作節點有40個核心和100 GB RAM)的集群與擁有10個核心和25 GB RAM的8個工作節點集群具有相同的計算和內存。

如果您期望對相同的數據進行多次重新讀取,那麼您的工作負載可能會從緩存中受益。考慮使用增量緩存的存儲優化配置。

集群規模的例子

下麵的示例展示了基於特定工作負載類型的集群建議。這些示例還包括要避免的配置以及為什麼這些配置不適合工作負載類型。

數據分析

數據分析師執行處理時通常需要來自多個分區的數據,導致許多shuffle操作。節點數量較少的集群可以減少執行這些shuffle所需的網絡和磁盤I/O。下圖中的集群A可能是最佳選擇,特別是對於支持單個分析師的集群。

集群D可能會提供最差的性能,因為擁有更少內存和存儲的大量節點將需要更多的數據變換來完成處理。

數據分析簇大小

分析工作負載可能需要重複讀取相同的數據,因此推薦的工作類型是啟用增量緩存的優化存儲。

推薦用於分析工作負載的其他特性包括:

  • 啟用自動終止,以確保集群在一段時間不活動後被終止。

  • 考慮基於分析師的典型工作負載啟用自動伸縮。

  • 考慮使用池,這將允許將集群限製為預先批準的實例類型,並確保一致的集群配置。

可能不太有用的特性:

  • 存儲自動伸縮,因為這個用戶可能不會產生很多數據。

  • 高並發集群,因為這個集群是針對單個用戶的,而高並發集群最適合共享使用。

基本批ETL

簡單的批處理ETL作業不需要廣泛的轉換(例如連接或聚合),通常受益於計算優化的集群。對於這些類型的工作負載,下圖中的任何集群都是可以接受的。

基本批量ETL集群分級

推薦計算優化的worker類型;這些將更便宜,而且這些工作負載可能不需要大量的內存或存儲。

通過減少集群啟動時間和運行作業管道時的總運行時間,使用池可以為支持簡單ETL作業的集群提供好處。但是,由於這些類型的工作負載通常作為計劃作業運行,其中集群運行的時間僅夠完成作業,因此使用池可能不會帶來好處。

以下特性可能不太有用:

  • 增量緩存,因為不需要重新讀取數據。

  • 可能不需要自動終止,因為這些很可能是預定的作業。

  • 不建議自動伸縮,因為應該為用例預先配置計算和存儲。

  • 高並發性集群適用於多用戶,對隻運行一個作業的集群沒有好處。

複雜的批ETL

更複雜的ETL作業(例如需要跨多個表進行聯合和連接的處理)在能夠將數據遷移的數量降到最低的情況下可能會工作得最好。因為減少集群中的工作人員數量將有助於最小化shuffle,所以你應該考慮在集群D這樣的大集群上使用像下圖中的集群a這樣的小集群。

複雜的ETL集群大小

複雜的轉換可能需要大量計算,因此對於某些達到最佳核心數的工作負載而言,可能需要向集群中添加額外的節點。

與簡單的ETL作業一樣,推薦使用計算優化的worker類型;這些將更便宜,而且這些工作負載可能不需要大量的內存或存儲。另外,與簡單的ETL作業一樣,需要考慮的主要集群特性是池,它可以減少集群啟動時間,並在運行作業管道時減少總運行時間。

以下特性可能不太有用:

  • 增量緩存,因為不需要重新讀取數據。

  • 可能不需要自動終止,因為這些很可能是預定的作業。

  • 不建議自動伸縮,因為應該為用例預先配置計算和存儲。

  • 高並發性集群適用於多用戶,對隻運行一個作業的集群沒有好處。

訓練機器學習模型

由於訓練機器學習模型的初始迭代通常是實驗性的,所以較小的簇(如簇a)是一個很好的選擇。較小的集群也將減少洗牌的影響。

如果需要考慮穩定性,或者對於更高級的階段,一個更大的集群(如集群B或C)可能是一個不錯的選擇。

不建議使用集群D這樣的大型集群,因為在節點之間進行數據變換的開銷較大。

機器學習集群規模

推薦的工人類型是使用Delta Caching進行了優化的存儲,以考慮對相同數據的重複讀取,並啟用訓練數據的緩存。當存儲優化節點提供的計算和存儲選項不足時,可以考慮GPU優化節點。一個可能的缺點是這些節點缺乏增量緩存支持。

推薦用於分析工作負載的其他特性包括:

  • 啟用自動終止,以確保集群在一段時間不活動後被終止。

  • 考慮基於分析師的典型工作負載啟用自動伸縮。

  • 使用池,這將允許將集群限製為預先批準的實例類型,並確保一致的集群配置。

可能不太有用的特性:

  • 自動伸縮,因為當集群向下伸縮時刪除節點時,緩存的數據可能會丟失。此外,典型的機器學習任務通常會消耗所有可用的節點,在這種情況下,自動縮放將不會提供任何好處。

  • 存儲自動伸縮,因為這個用戶可能不會產生很多數據。

  • 高並發集群,因為這個集群是針對單個用戶的,而高並發集群最適合共享使用。

常見的場景

以下部分提供了關於配置常見集群使用模式的集群的額外建議:

  • 多個用戶運行數據分析和特別處理。

  • 專門的用例,如機器學習。

  • 支持計劃批處理作業。

多用戶群

場景

您需要為運行數據分析和特別查詢提供對數據的多用戶訪問。集群的使用情況可能會隨著時間的變化而變化,而且大多數作業都不是非常占用資源的。用戶大多要求隻讀訪問數據,並希望通過簡單的用戶界麵執行分析或創建儀表板。

推薦的集群配置方法是在集群中使用混合的節點配置方法和自動伸縮方法。混合方法包括為集群定義隨需應變實例和現貨實例的數量,並在最小和最大實例數量之間啟用自動伸縮。

多用戶場景

這個集群總是可用的,默認情況下由屬於某個組的用戶共享。啟用自動伸縮允許集群根據負載進行上下伸縮。

用戶不能啟動/停止集群,但是初始的按需實例可以立即響應用戶查詢。如果用戶查詢需要更多容量,自動伸縮會自動提供更多節點(主要是Spot實例)以適應工作負載。

Databricks還有其他功能來進一步改進多租戶用例:

這種方法通過以下方式降低了整體成本:

  • 使用共享集群模型。

  • 混合使用隨需應變和現貨實例。

  • 使用自動縮放來避免為未充分利用的集群買單。

專門的工作負載

場景

您需要為組織中的專用用例或團隊提供集群,例如,運行複雜數據探索和機器學習算法的數據科學家。一個典型的模式是,用戶需要在短時間內使用集群來運行他們的分析。

對於這種工作負載,最好的方法是創建集群策略,為默認範圍、固定範圍和設置範圍創建預定義配置。這些設置可能包括實例的數量、實例類型、指定與隨需應變的實例、角色、要安裝的庫等等。使用集群策略允許具有更高級需求的用戶快速啟動集群,他們可以根據用例的需要配置集群,並執行成本和策略遵從性。

專門的工作負載

這種方法為用戶提供了更多的控製,同時通過預先定義集群配置保持成本可控。這還允許您為具有訪問不同數據集權限的不同用戶組配置集群。

這種方法的一個缺點是,對於集群的任何更改,如配置、已安裝的庫等,用戶都必須與管理員協作。

批處理工作負載

場景

需要為調度的批處理任務提供集群,例如生產ETL任務需要進行數據準備。建議的最佳實踐是為每次作業運行啟動一個新的集群。在一個新的集群上運行每個作業有助於避免由在共享集群上運行的其他工作負載導致的故障和錯過sla。根據作業的關鍵程度,您可以使用所有隨需應變實例來滿足sla,或者在現貨實例和隨需應變實例之間進行平衡以節省成本。

將批處理工作負載