התאמה אוטומטית של עומסי עבודה (workloads) של אצווה ב-Spark

במסמך הזה מפורט מידע על כוונון אוטומטי של עומסי עבודה של אצווה ב-Serverless ל-Apache Spark. אופטימיזציה של עומס עבודה ב-Spark לשיפור הביצועים והחוסן יכולה להיות מאתגרת בגלל מספר האפשרויות להגדרת Spark והקושי בהערכת ההשפעה של האפשרויות האלה על עומס העבודה. התכונה 'כוונון אוטומטי של Serverless ל-Apache Spark' מספקת חלופה להגדרה ידנית של עומס עבודה. היא מחילה באופן אוטומטי הגדרות של Spark על עומס עבודה חוזר של Spark, על סמך שיטות מומלצות לאופטימיזציה של Spark וניתוח של הרצות עומס עבודה (שנקראות 'קבוצות בעלות מאפיינים משותפים').

הרשמה לכוונון אוטומטי של Serverless for Apache Spark

כדי להירשם לגישה לגרסת הטרום-השקה של הכוונון האוטומטי של Serverless for Apache Spark, שמתוארת בדף הזה, צריך למלא את טופס ההרשמה לבקשת גישה לגרסת טרום-השקה של Dataproc ולשלוח אותו. אחרי שהטופס יאושר, לפרויקטים שמפורטים בו תהיה גישה לתכונות בגרסת טרום-השקה.

יתרונות

הכוונון האוטומטי של Serverless for Apache Spark יכול לספק את היתרונות הבאים:

  • אופטימיזציה אוטומטית: כוונון אוטומטי של תצורות לא יעילות של Serverless for Apache Spark batch ו-Spark, שיכולות להאיץ את זמני הריצה של העבודות.
  • למידה היסטורית: לומדים מריצות חוזרות כדי להחיל המלצות שמותאמות לעומס העבודה.

קבוצות בעלות מאפיינים משותפים (cohort) שעברו אופטימיזציה אוטומטית

התאמה אוטומטית מופעלת על הרצות חוזרות (קבוצות בעלות מאפיינים משותפים) של עומס עבודה באצווה.

שם הקוהורט שאתם מציינים כשאתם שולחים עומס עבודה של אצווה מזהה אותו כאחד מהריצות העוקבות של עומס העבודה החוזר.

התאמה אוטומטית מופעלת על קבוצות בעלות מאפיינים משותפים של עומסי עבודה של Batch באופן הבא:

  • הכוונון האוטומטי מחושב ומוחל על הקבוצה השנייה ואלה שאחריה של עומס עבודה. התאמה אוטומטית לא מוחלת על ההרצה הראשונה של עומס עבודה חוזר, כי התאמה אוטומטית של Serverless for Apache Spark משתמשת בהיסטוריית עומסי העבודה לצורך אופטימיזציה.

  • התאמה אוטומטית לא חלה רטרואקטיבית על עומסי עבודה פעילים, אלא רק על עומסי עבודה חדשים שנשלחים.

  • התכונה 'התאמה אוטומטית' לומדת ומשתפרת לאורך זמן על ידי ניתוח הנתונים הסטטיסטיים של הקבוצה. כדי לאפשר למערכת לאסוף מספיק נתונים, מומלץ להשאיר את הכוונון האוטומטי מופעל לפחות חמש פעמים.

שמות קוהורטים: מומלץ להשתמש בשמות קוהורטים שיעזרו לזהות את סוג עומס העבודה החוזר. לדוגמה, אפשר להשתמש ב-daily_sales_aggregation כשם של קבוצת משתמשים לעומס עבודה מתוזמן שמריץ משימת צבירה של נתוני מכירות מדי יום.

תרחישים של כוונון אוטומטי

במקרים הרלוונטיים, התאמה אוטומטית בוחרת ומבצעת את הפעולות הבאות (scenarios) או היעדים כדי לבצע אופטימיזציה של עומס עבודה באצווה:

  • התאמה אוטומטית לעומס: הגדרות של התאמה אוטומטית לעומס ב-Spark.
  • אופטימיזציה של פעולות Join: הגדרות של Spark לשיפור הביצועים של פעולות Join בשידור SQL.

שימוש בכוונון אוטומטי של Serverless for Apache Spark

אפשר להפעיל את התכונה 'בלי שרת (serverless)' להתאמה אוטומטית של Apache Spark בעומס עבודה של אצווה באמצעות Google Cloud המסוף, Google Cloud CLI, Dataproc API או ספריות הלקוח ב-Cloud.

המסוף

כדי להפעיל כוונון אוטומטי של Serverless for Apache Spark בכל שליחה של עומס עבודה חוזר של אצווה, מבצעים את השלבים הבאים:

  1. נכנסים לדף Batches ב-Dataproc במסוף Google Cloud .

    מעבר אל Dataproc Batches

  2. כדי ליצור עומס עבודה של אצווה, לוחצים על Create.

  3. בקטע Autotuning:

    • מעבירים את הלחצן הפעלה כדי להפעיל את הכוונון האוטומטי של עומס העבודה של Spark.

    • קבוצת משתמשים: ממלאים את שם קבוצת המשתמשים, שמזהה את האצווה כאחת מסדרה של עומסי עבודה חוזרים. התאמה אוטומטית מופעלת על עומסי העבודה השני והבאים שמוגשים עם שם הקוהורט הזה. לדוגמה, אפשר לציין את daily_sales_aggregation כשם של קבוצת משתמשים עבור עומס עבודה מתוזמן של אצווה שמריץ משימת צבירה של נתוני מכירות מדי יום.

  4. ממלאים את שאר הקטעים בדף יצירת קבוצה לפי הצורך, ואז לוחצים על שליחה. מידע נוסף על השדות האלה זמין במאמר בנושא שליחת עומס עבודה של אצווה.

gcloud

כדי להפעיל כוונון אוטומטי של Serverless for Apache Spark בכל שליחה של עומס עבודה חוזר של אצווה, מריצים את ה-CLI של gcloud‏ gcloud dataproc batches submit באופן מקומי בחלון טרמינל או ב-Cloud Shell.

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    --autotuning-scenarios=auto  \
    other arguments ...

מחליפים את מה שכתוב בשדות הבאים:

  • COMMAND: סוג עומס העבודה של Spark, למשל Spark, ‏PySpark, ‏Spark-Sql או Spark-R.
  • REGION: האזור שבו יפעל עומס העבודה של Batch.
  • COHORT: שם הקבוצה בעלת המאפיינים המשותפים, שמזהה את האצווה כאחת מתוך סדרה של עומסי עבודה חוזרים. התאמה אוטומטית מופעלת על עומסי העבודה השני והבאים שמוגשים עם שם הקוהורט הזה. לדוגמה, אפשר לציין את daily_sales_aggregation כשם קבוצת המשתמשים עבור עומס עבודה של אצווה מתוזמנת שמריצה משימת צבירה של נתוני מכירות מדי יום.
  • --autotuning-scenarios=auto: הפעלת כוונון אוטומטי.

API

כדי להפעיל את התכונה Serverless for Apache Spark autotuning בכל שליחה של עומס עבודה חוזר של אצווה, שולחים בקשת batches.create שכוללת את השדות הבאים:

  • RuntimeConfig.cohort: שם הקבוצה בעלת המאפיינים המשותפים, שמזהה את האצווה כאחת מתוך סדרה של עומסי עבודה חוזרים. התאמה אוטומטית מופעלת על עומסי העבודה השני והבאים שמוגשים עם שם הקוהורט הזה. לדוגמה, אפשר לציין את daily_sales_aggregation כשם הקוהורט לעומס עבודה מתוזמן של אצווה שמריץ משימת צבירה של נתוני מכירות מדי יום.
  • AutotuningConfig.scenarios: מציינים AUTO כדי להפעיל כוונון אוטומטי בעומס העבודה של Spark batch.

דוגמה:

...
runtimeConfig:
  cohort: COHORT_NAME
  autotuningConfig:
    scenarios:
    - AUTO
...

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaההוראות להגדרה במאמר מדריך למתחילים של Serverless for Apache Spark באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של Serverless for Apache Spark Java API.

כדי לבצע אימות ב-Serverless for Apache Spark, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

כדי להפעיל כוונון אוטומטי של Serverless for Apache Spark בכל שליחה של עומס עבודה חוזר של אצווה, צריך להתקשר אל BatchControllerClient.createBatch עם CreateBatchRequest שכולל את השדות הבאים:

  • Batch.RuntimeConfig.cohort: שם הקבוצה בעלת המאפיינים המשותפים, שמזהה את האצווה כאחת מסדרה של עומסי עבודה חוזרים. התאמה אוטומטית מופעלת על עומסי העבודה השני והבאים שמוגשים עם שם הקוהורט הזה. לדוגמה, אפשר לציין את הערך daily_sales_aggregation כשם קבוצת המשתמשים עבור עומס עבודה של אצווה מתוזמנת שמריצה משימת צבירה של נתוני מכירות מדי יום.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: מציינים AUTO כדי להפעיל כוונון אוטומטי בעומס העבודה של Spark batch.

דוגמה:

...
Batch batch =
  Batch.newBuilder()
    .setRuntimeConfig(
      RuntimeConfig.newBuilder()
        .setCohort("daily_sales_aggregation")
        .setAutotuningConfig(
          AutotuningConfig.newBuilder()
            .addScenarios(Scenario.AUTO))
    ...
  .build();

batchControllerClient.createBatch(
    CreateBatchRequest.newBuilder()
        .setParent(parent)
        .setBatchId(batchId)
        .setBatch(batch)
        .build());
...

כדי להשתמש ב-API, צריך להשתמש בגרסה google-cloud-dataproc ואילך של ספריית הלקוח 4.43.0. אפשר להשתמש באחת מההגדרות הבאות כדי להוסיף את הספרייה לפרויקט.

Maven

<dependencies>
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-dataproc</artifactId>
   <version>4.43.0</version>
 </dependency>
</dependencies>

Gradle

implementation 'com.google.cloud:google-cloud-dataproc:4.43.0'

SBT

libraryDependencies += "com.google.cloud" % "google-cloud-dataproc" % "4.43.0"

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonההוראות להגדרה במאמר מדריך למתחילים של Serverless for Apache Spark באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של Serverless for Apache Spark Python API.

כדי לבצע אימות ב-Serverless for Apache Spark, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

כדי להפעיל כוונון אוטומטי של Serverless for Apache Spark בכל שליחה של עומס עבודה חוזר של אצווה, צריך להתקשר אל BatchControllerClient.create_batch עם Batch שכולל את השדות הבאים:

  • batch.runtime_config.cohort: שם הקבוצה בעלת המאפיינים המשותפים, שמזהה את האצווה כאחת מסדרה של עומסי עבודה חוזרים. התאמה אוטומטית מופעלת על עומסי העבודה השני והבאים שמוגשים עם שם הקוהורט הזה. לדוגמה, אפשר לציין את daily_sales_aggregation כשם הקוהורט עבור עומס עבודה מתוזמן של אצווה שמריץ משימת צבירה של נתוני מכירות מדי יום.
  • batch.runtime_config.autotuning_config.scenarios: מציינים AUTO כדי להפעיל כוונון אוטומטי בעומס העבודה של Spark batch.

דוגמה:

# Create a client
client = dataproc_v1.BatchControllerClient()

# Initialize request argument(s)
batch = dataproc_v1.Batch()
batch.pyspark_batch.main_python_file_uri = "gs://bucket/run_tpcds.py"
batch.runtime_config.cohort = "daily_sales_aggregation"
batch.runtime_config.autotuning_config.scenarios = [
    Scenario.AUTO
]

request = dataproc_v1.CreateBatchRequest(
    parent="parent_value",
    batch=batch,
)

# Make the request
operation = client.create_batch(request=request)

כדי להשתמש ב-API, צריך להשתמש בגרסה google-cloud-dataproc של ספריית הלקוח 5.10.1 ואילך. כדי להוסיף אותו לפרויקט, אפשר להשתמש בדרישה הבאה:

google-cloud-dataproc>=5.10.1

Airflow

במקום לשלוח כל קבוצת עבודות (cohort) של כוונון אוטומטי באופן ידני, אפשר להשתמש ב-Airflow כדי לתזמן את השליחה של כל עומס עבודה חוזר של קבוצת עבודות. כדי לעשות זאת, קוראים ל-BatchControllerClient.create_batch עם Batch שכולל את השדות הבאים:

  • batch.runtime_config.cohort: שם הקבוצה בעלת המאפיינים המשותפים, שמזהה את האצווה כאחת מסדרה של עומסי עבודה חוזרים. התאמה אוטומטית מופעלת על עומסי העבודה השני והבאים שמוגשים עם שם הקוהורט הזה. לדוגמה, אפשר לציין את השם daily_sales_aggregation לקבוצת משתמשים עבור עומס עבודה של אצווה מתוזמנת שמריצה משימת צבירה של נתוני מכירות מדי יום.
  • batch.runtime_config.autotuning_config.scenarios: מציינים AUTO כדי להפעיל כוונון אוטומטי בעומס העבודה של Spark batch.

דוגמה:

create_batch = DataprocCreateBatchOperator(
    task_id="batch_create",
    batch={
        "pyspark_batch": {
            "main_python_file_uri": PYTHON_FILE_LOCATION,
        },
        "environment_config": {
            "peripherals_config": {
                "spark_history_server_config": {
                    "dataproc_cluster": PHS_CLUSTER_PATH,
                },
            },
        },
        "runtime_config": {
            "cohort": "daily_sales_aggregation",
            "autotuning_config": {
                "scenarios": [
                    Scenario.AUTO,
                ]
            }
        },
    },
    batch_id="BATCH_ID",
)

כדי להשתמש ב-API, צריך להשתמש בגרסה google-cloud-dataproc של ספריית הלקוח 5.10.1 ואילך. אפשר להשתמש בדרישה הבאה של סביבת Airflow:

google-cloud-dataproc>=5.10.1

כדי לעדכן את החבילה ב-Cloud Composer, אפשר לעיין במאמר בנושא התקנת יחסי תלות של Python ב-Cloud Composer .

צפייה בשינויים של כוונון אוטומטי

כדי לראות את השינויים שבוצעו בכוונון האוטומטי של Serverless for Apache Spark בעומס עבודה של אצווה, מריצים את הפקודה gcloud dataproc batches describe.

דוגמה: הפלט של gcloud dataproc batches describe אמור להיראות כך:

...
runtimeInfo:
  propertiesInfo:
    # Properties set by autotuning.
    autotuningProperties:
      spark.dataproc.sql.broadcastJoin.hints:
        annotation: Converted 1 Sort-Merge Joins to Broadcast Hash Join
        value: v2;Inner,<hint>
      spark.dynamicAllocation.initialExecutors:
        annotation: Adjusted Initial executors based on stages submitted in first
          2 minutes to 9
        overriddenValue: '2'
        value: '9'
      spark.dynamicAllocation.maxExecutors:
        annotation: Tuned Max executors to 11
        overriddenValue: '5'
        value: '11'
      spark.dynamicAllocation.minExecutors:
        annotation: Changed Min executors to 9
        overriddenValue: '2'
        value: '9'
...

בכרטיסייה סיכום בדף פרטי אצווה במסוף Google Cloud , אפשר לראות את השינויים האחרונים שבוצעו באמצעות כוונון אוטומטי בעומס עבודה שפועל, שהסתיים או שנכשל.

חלונית סיכום הכוונון האוטומטי.

תמחור

‫Serverless (בלי שרת) ל-Apache Spark autotuning מוצע במהלך תצוגה מקדימה פרטית ללא תשלום נוסף. יחול התמחור הרגיל של Serverless for Apache Spark.