Managed Service for Apache Spark 效能提升

本文說明如何啟用 Managed Service for Apache Spark 的 Spark 效能提升功能,協助 Managed Service for Apache Spark 工作在更短的時間內處理更多資料,同時降低成本。

Managed Service for Apache Spark 的效能提升包括:

  • Spark 最佳化工具強化功能:
    • 為改善 Spark 方案而編寫的最佳化工具規則
    • 在 Spark 工作中使用時,Managed Service for Apache Spark BigQuery 連接器的效能提升
  • Spark 執行效能強化功能:
    • Spark 執行引擎改良

其他 Managed Service for Apache Spark 效能提升:請參閱 Managed Service for Apache Spark 叢集快取, 這有助於減少存取 Cloud Storage 中資料所花費的時間。

您可以在叢集或 Spark 工作中啟用 Spark 效能強化功能:

  • 預設情況下,在叢集上啟用的 Spark 效能提升功能,會套用至叢集上執行的所有 Spark 工作,無論是提交至 Managed Service for Apache Spark,還是直接提交至叢集

  • 您也可以在提交至 Managed Service for Apache Spark 的工作中啟用或停用 Spark 效能提升功能。套用至工作的 Spark 效能提升設定,只會覆寫指定工作在叢集層級設定的任何衝突設定。

定價

Spark 效能強化功能不會產生額外費用。適用標準 Managed Service for Apache Spark 定價

注意事項

Spark 效能強化功能會調整 Spark 屬性,包括下列屬性:

  • spark.sql.shuffle.partitions: Spark 效能強化功能會將這項屬性設為 1000,適用於 2.2 圖片集錦叢集。這項設定可能會導致小型工作變慢。
  • spark.dataproc.sql.catalog.file.index.stats.enabled: 如果 Hive 分區計數偏高,這項設定可能會導致驅動程式 OOM (記憶體不足) 狀況。停用這項屬性即可修正 OOM 狀況。

在建立叢集時啟用強化功能

使用 Google Cloud 控制台、Google Cloud CLI 和 Dataproc API 建立 Managed Service for Apache Spark 叢集時,如果映像檔版本為 2.0.69 以上、2.1.17 以上、2.2.0 以上,或更新版本,即可啟用 Managed Service for Apache Spark 效能提升功能。

控制台

  1. 在 Google Cloud 控制台中,開啟「建立叢集」頁面。
  2. 按一下「其他設定」展開該部分。
  3. 編輯「自訂與其他」
  4. 在「叢集屬性」部分中,新增下列屬性:
    • 如要啟用 Spark 最佳化強化功能,請按照下列步驟操作:
      1. 按一下「+ 新增屬性」
      2. 在「Prefix」(前置字元) 清單中選取「spark」
      3. 在「Key」(鍵) 欄位中輸入 spark.dataproc.enhanced.optimizer.enabled,並在「Value」(值) 欄位中輸入 true
    • 如要啟用 Spark 執行效能強化功能,請按照下列步驟操作:
      1. 按一下「+ 新增屬性」
      2. 在「Prefix」(前置字元) 清單中選取「spark」
      3. 在「Key」(鍵) 欄位中輸入 spark.dataproc.enhanced.execution.enabled,並在「Value」(值) 欄位中輸入 true
  5. 填寫其他叢集欄位,然後按一下「建立叢集」

gcloud

  1. 在本機的終端機視窗或 Cloud Shell 中執行下列 gcloud dataproc clusters create 指令。

    gcloud dataproc clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --region=REGION \
        --image-version=IMAGE \
        --properties=PROPERTIES
    

    注意:

    • CLUSTER_NAME:叢集名稱,在專案內不得重複。名稱開頭須為小寫英文字母,最多包含 51 個小寫英文字母、數字和連字號,而且結尾不得為連字號。可以重複使用已刪除叢集的名稱。
    • PROJECT_ID:要與叢集建立關聯的專案。
    • REGION:叢集所在的 Compute Engine 區域,例如 us-central1
      • 您可以新增選用的 --zone=ZONE 旗標,指定所選區域內的區域,例如 us-central1-a。如未指定可用區,Managed Service for Apache Spark 的自動可用區放置功能會選取指定區域的可用區。
    • IMAGE:Managed Service for Apache Spark 最佳化工具和執行效能提升功能,適用於 Managed Service for Apache Spark 映像檔版本 2.0.69+2.1.17+,以及後續版本。如果省略這個標記,Managed Service for Apache Spark 會為叢集選取預設 Managed Service for Apache Spark 映像檔的最新次要版本 (請參閱「預設 Managed Service for Apache Spark 映像檔版本」)。
    • PROPERTIES

      • 如要啟用 Spark 最佳化強化功能,請指定:
      spark:spark.dataproc.enhanced.optimizer.enabled=true
      
      • 如要啟用 Spark 執行強化功能,請指定:
      spark:spark.dataproc.enhanced.execution.enabled=true
      
      • 如要啟用 Spark 最佳化和執行強化功能,請指定:
      spark:spark.dataproc.enhanced.optimizer.enabled=true,spark:spark.dataproc.enhanced.execution.enabled=true
      

API

  1. clusters.create 要求中指定下列 SoftwareConfig.properties

    • 如要啟用 Spark 最佳化強化功能,請指定:
    "spark:spark.dataproc.enhanced.optimizer.enabled": "true"
    
    • 如要啟用 Spark 執行強化功能,請指定:
    "spark:spark.dataproc.enhanced.execution.enabled": "true"
    
    • 如要啟用 Spark 最佳化和執行強化功能,請指定:
    "spark:spark.dataproc.enhanced.optimizer.enabled": "true","spark:spark.dataproc.enhanced.execution.enabled": "true"
    

在提交工作時啟用或停用強化功能

您可以使用 Google Cloud 控制台、Google Cloud CLI 和 Dataproc API,在提交至 Managed Service for Apache Spark 的 Spark 工作中啟用或停用 Spark 效能提升功能。

控制台

  1. 在 Google Cloud 控制台中,開啟「Jobs」(工作) 頁面。
  2. 在「Jobs」(工作) 頁面中,按一下「Submit job」(提交工作),然後捲動至「Properties」(屬性) 專區。
    1. 如要啟用 Spark 最佳化強化功能,請按照下列步驟操作:
      1. 按一下「+ 新增屬性」。 在「Key」欄位中新增「spark.dataproc.enhanced.optimizer.enabled」,並在「Value」欄位中新增「true」。
    2. 如要啟用 Spark 執行效能強化功能,請按照下列步驟操作:
      1. 按一下「+ 新增屬性」
      2. 在「Key」欄位中新增「spark.dataproc.enhanced.execution.enabled」,並在「Value」欄位中新增「true」。
  3. 填寫或確認其他工作提交欄位,然後按一下「提交」

gcloud

  1. 在本機終端機視窗或 Cloud Shell 中執行下列 gcloud dataproc jobs submit 指令。

    gcloud dataproc jobs submit SPARK_JOB_TYPE \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --properties=PROPERTIES
    

    注意:

    • SPARK_JOB_TYPE:指定 sparkpysparkspark-sqlspark-r
    • CLUSTER_NAME:工作執行的工作名稱。
    • REGION:叢集所在的區域。
    • PROPERTIES

      • 如要啟用 Spark 最佳化強化功能,請指定:
      spark.dataproc.enhanced.optimizer.enabled=true
      
      • 如要啟用 Spark 執行強化功能,請指定:
      spark.dataproc.enhanced.execution.enabled=true
      
      • 如要啟用 Spark 最佳化和執行強化功能,請指定:
      spark.dataproc.enhanced.optimizer.enabled=true,spark.dataproc.enhanced.execution.enabled=true
      

API

  1. jobs.submit 要求的範圍內,為 SparkJobPySparkJobSparkSqlJobSparkRJob 指定下列 properties

    • 如要啟用 Spark 最佳化強化功能,請指定:
    "spark.dataproc.enhanced.optimizer.enabled=true"
    
    • 如要啟用 Spark 執行強化功能,請指定:
    "spark.dataproc.enhanced.execution.enabled=true"
    
    • 如要啟用 Spark 最佳化和執行強化功能,請指定:
    "spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"