Dataproc Spark 效能強化功能

本文說明如何啟用 Dataproc Spark 效能強化功能,協助 Dataproc Spark 工作在更短的時間內處理更多資料,同時降低成本。

Dataproc Spark 效能強化功能包括:

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

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

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

定價

Spark 效能強化功能不會產生任何額外的費用。適用標準 Dataproc on Compute Engine 定價

注意事項

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 和 Dataproc API 建立 Dataproc 叢集時,如果映像檔版本為 2.0.69 以上、2.1.17 以上、2.2.0 以上,以及後續版本,即可啟用 Dataproc Spark 效能提升功能。

控制台

  1. 在 Google Cloud 控制台中,開啟 Dataproc 的「建立叢集」頁面。
  2. 在「Create Dataproc cluster」(建立 Dataproc 叢集) 表單中,點選「Cluster on Compute Engine」(Compute Engine 上的叢集) 行的「Create」(建立)
  3. 在「Create a Dataproc cluster on Compute Engine」(在 Compute Engine 上建立 Dataproc 叢集) 頁面中,按一下「Customize cluster」(自訂叢集) 面板,然後捲動至「Cluster properties」(叢集屬性) 區段。
    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。如未指定區域,Dataproc 自動選擇放置區域功能會選取指定地區中的區域。
    • IMAGE:Dataproc Spark 最佳化工具和執行效能強化功能適用於 Dataproc 映像檔版本 2.0.69+2.1.17+,如果省略這個旗標,Dataproc 會為叢集選取預設 Dataproc on Compute Engine 映像檔的最新次要版本 (請參閱預設 Dataproc 映像檔版本)。
    • 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,在提交至 Dataproc 服務的 Spark 工作中啟用或停用 Spark 效能提升功能。

控制台

  1. 在 Google Cloud 控制台中,開啟 Dataproc 的「Jobs」(工作) 頁面。
  2. 在「工作」頁面中,按一下「提交工作」,然後捲動至「工作屬性」部分。
    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"