

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 調校 Spark 任務效能的策略
<a name="performance-tuning-strategies"></a>

準備調校參數時，請使用以下最佳實務：
+ 在開始識別問題之前，先決定您的效能目標。
+ 嘗試變更調校參數之前，先使用指標來識別問題。

為在調校任務時得到最一致的結果，應制定調校工作的基線策略。

## 效能調校的基線策略
<a name="baseline"></a>

一般而言，效能調校依照以下工作流程進行：

1. 決定效能目標。

1. 量測指標。

1. 識別瓶頸。

1. 降低瓶頸的影響。

1. 重複步驟 2-4，直到達到預期的目標。

首先，確定您的效能目標。例如，您的其中一個目標是在 AWS Glue 3 小時內完成任務的執行。定義目標之後，請測量任務效能指標。識別指標和瓶頸的趨勢，以符合目標。特別是，識別瓶頸對於故障診斷、偵錯和效能調校最為重要。在執行 Spark 應用程式期間，Spark 會在 Spark 事件日誌中記錄每個任務的狀態和統計資料。

在 中 AWS Glue，您可以透過 Spark 歷史記錄伺服器提供的 [Spark Web UI](https://spark.apache.org/docs/latest/web-ui.html) 檢視 Spark 指標。 AWS Glue 針對 Spark 任務，可以將 [Spark 事件日誌](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-jobs.html)傳送至您在 Amazon S3 中指定的位置。 AWS Glue 也提供範例[AWS CloudFormation 範本](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-history.html#monitor-spark-ui-history-cfn)和 [Dockerfile](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui-history.html#monitor-spark-ui-history-local)，以在 Amazon EC2 執行個體或本機電腦上啟動 Spark 歷史記錄伺服器，因此您可以使用 Spark UI 搭配事件日誌。

在您確定績效目標並識別指標來評估這些目標之後，您可以開始使用以下章節中的策略來識別和修復瓶頸。

## Spark 任務效能的調校實務
<a name="tuning-practices"></a>

您可以使用下列策略來調校 Spark AWS Glue 任務的效能：
+ AWS Glue 資源：
  + [擴展叢集容量](scale-cluster-capacity.md)
  + [使用 AWS Glue 最新版本](latest-version.md)
+ Spark 應用程式：
  + [減少資料掃描量](reduce-data-scan.md)
  + [平行化任務](parallelize-tasks.md)
  + [最佳化隨機播放](optimize-shuffles.md)
  + [將規劃開銷降至最低](minimize-planning-overhead.md)
  + [最佳化使用者定義的函數](optimize-user-defined-functions.md)

使用這些策略之前，您必須能夠存取 Spark 任務的指標和組態。您可以在 [AWS Glue 文件](https://docs.aws.amazon.com/glue/latest/dg/etl-jobs-section.html)中找到此資訊。

從 AWS Glue 資源的角度來看，您可以透過新增 AWS Glue 工作者並使用 AWS Glue 最新版本來實現效能改善。

從 Apache Spark 應用程式的觀點來看，您可以存取數個可改善效能的策略。如果將不必要的資料載入 Spark 叢集，您可以將其移除，以減少載入的資料量。如果您已使用不足的 Spark 叢集資源且資料 I/O 很低，您可以識別要平行化的任務。如果需要大量時間，您可能也想要最佳化繁重的資料傳輸操作，例如聯結。您也可以最佳化任務查詢計劃，或降低個別 Spark 任務的運算複雜性。

若要有效率地套用這些策略，您必須諮詢指標來識別何時適用這些策略。如需詳細資訊，請參閱下列各節。這些技術不僅適用於效能調校，也適用於解決out-of-memory(OOM) 錯誤等典型問題。