Apache Spark 的叢集設定最佳化
本文討論如何最佳化 Apache Spark 叢集的設定,讓 Azure HDInsight 發揮最佳效能。
概觀
端視您的 Spark 叢集工作負載而定,您可能會決定非預設 Spark 設定達到更最佳化的 Spark 作業執行。 使用範例工作負載進行基準測試,以驗證任何非預設叢集設定。
以下是您可以調整的一些常見參數:
參數 | 描述 |
---|---|
--num-executors | 設定適當數量的執行程式。 |
--executor-cores | 設定每個執行程式的核心數目。 一般而言,您應該有中型執行程式,因為其他處理序會耗用一些可用的記憶體。 |
--executor-memory | 設定每個執行程式的記憶體大小,控制 YARN 的堆積大小。 對於執行額外負荷保留一些記憶體。 |
選取正確的執行程式大小
決定執行程式設定時,請考慮 Java 記憶體回收 (GC) 額外負荷。
減少執行程式大小的因素:
- 減少低於 32 GB 的堆積大小,讓 GC 額外負荷保持 < 10%。
- 減少核心數目,讓 GC 額外負荷保持 < 10%。
增加執行程式大小的因素:
- 減少執行程式之間的通訊額外負荷。
- 減少較大叢集上 (> 100個執行程式) 的執行程式 (N2) 之間的開啟連線數目。
- 增加堆積大小,以容納需要大量記憶體的工作。
- 選用:減少每個執行程式的記憶體額外負荷。
- 選用:透過超載使用 CPU 以增加使用率和並行處理。
選取執行程式大小時的一般規則是:
- 從每個執行程式 30 GB 開始,並分配可用的電腦核心。
- 增加較大叢集 (> 100 個執行程式) 的執行程式核心數目。
- 根據試用版執行和上述因素修改大小,例如 GC 額外負荷。
執行並行查詢時,請考慮:
- 從每個執行程式和所有電腦核心 30 GB 開始。
- 超載使用 CPU (大約延遲提升 30%) 來建立多個平行 Spark 應用程式。
- 將查詢分散到各平行應用程式。
- 根據試用版執行和上述因素修改大小,例如 GC 額外負荷。
如需使用 Ambari 設定執行程式的詳細資訊,請參閱 Apache Spark 設定 - Spark 執行程式。
藉由查看時間軸檢視等等,監視極端值的查詢效能或其他效能問題。 同時也查看 SQL graph、作業統計資料等等。 如需有關使用 YARN 和 Spark 記錄伺服器對 Spark 進行偵錯的詳細資訊,請參閱對在 Azure HDInsight 上執行的 Apache Spark 作業進行偵錯。 如需使用 YARN 時間軸伺服器的秘訣,請參閱存取 Apache Hadoop YARN 應用程式記錄檔。
某些執行程式或節點上的工作速度較慢
有時一或數個執行程式比其他執行程式慢,而且工作花較長的執行時間。 這種緩慢的情況通常發生在較大的叢集 (> 30 個節點) 上。 在此情況下,將工作分割為較多的工作,讓排程程式彌補緩慢的工作。 例如,應用程式中的核心數目至少是工作數目的兩倍。 您也可以使用 conf: spark.speculation = true
啟用工作的推測性執行。