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 效能強化功能會將 2.2 映像檔版本叢集的這項屬性設為 1000。這項設定可能會導致小型工作變慢。
  • spark.dataproc.sql.catalog.file.index.stats.enabled: 如果 Hive 分區計數偏高,這項設定可能會導致驅動程式 OOM (記憶體不足) 狀況。停用這項屬性即可修正 OOM 狀況。

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

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

控制台

  1. 在 Google Cloud 控制台中,開啟 Managed Service for Apache Spark 的「建立叢集」頁面。
  2. 在「Create Managed Service for Apache Spark cluster」(建立 Managed Service for Apache Spark 叢集) 表單中,按一下「Cluster」(叢集) 行的「Create」(建立)
  3. 在「建立 Managed Service for Apache Spark 叢集」頁面中,按一下「自訂叢集」面板,然後捲動至「叢集屬性」部分。
    1. 如要啟用 Spark 最佳化強化功能,請按照下列步驟操作:
      1. 按一下「+ 新增資源」
      2. 在「Prefix」(前置字元) 清單中選取「spark」,然後在「Key」(索引鍵) 欄位新增「spark.dataproc.enhanced.optimizer.enabled」,並在「Value」(值) 欄位輸入「true」。
    2. 如要啟用 Spark 執行效能強化功能,請按照下列步驟操作:
      1. 按一下「+ 新增資源」
      2. 在「Prefix」(前置字元) 清單中選取「spark」,然後在「Key」(索引鍵) 欄位新增「spark.dataproc.enhanced.execution.enabled」,並在「Value」(值) 欄位輸入「true」
  4. 填寫或確認其他叢集建立欄位,然後按一下「建立」

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 和 Managed Service for Apache Spark API,在提交至 Managed Service for Apache Spark 的 Spark 工作中啟用或停用 Spark 效能提升功能。

控制台

  1. 在 Google Cloud 控制台中,開啟 Managed Service for Apache Spark 的「Jobs」(工作) 頁面。
  2. 在「Jobs」(工作) 頁面中,按一下「Submit job」(提交工作),然後捲動至「Properties」(屬性) 區段。
    1. 如要啟用 Spark 最佳化強化功能,請按照下列步驟操作:
      1. 按一下「+ ADD PROPERTIES」(新增資源)。在「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. 針對 SparkJobPySparkJobSparkSqlJobSparkRJob,在 jobs.submit 要求的 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"