שליחת עומס עבודה של Apache Spark לעיבוד ברצף (batch processing)

איך שולחים עומס עבודה באצווה בתשתית המחשוב של Managed Service for Apache Spark, שמשנה את קנה המידה של המשאבים לפי הצורך.

לפני שמתחילים

מגדירים את הפרויקט, ואם צריך, מקצים תפקידים של ניהול זהויות והרשאות גישה (IAM).

הגדרת הפרויקט

מבצעים אחד או יותר מהשלבים הבאים לפי הצורך:

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloudליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataproc API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

הקצאת תפקידי IAM במקרה הצורך

כדי להריץ את הדוגמאות שבדף הזה, צריך תפקידים מסוימים ב-IAM. בהתאם למדיניות הארגון, יכול להיות שהתפקידים האלה כבר הוקצו. כדי לבדוק את התפקידים שהוקצו, קראו את המאמר האם צריך להקצות תפקידים?.

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

תפקידי משתמשים

כדי לקבל את ההרשאות שדרושות לשליחת עומס עבודה של אצווה ללא שרת, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM:

תפקיד של חשבון שירות

כדי לוודא שלחשבון השירות שמשמש כברירת מחדל ב-Compute Engine יש את ההרשאות שנדרשות לשליחת עומס עבודה של אצווה ללא שרת, צריך לבקש מהאדמין לתת לחשבון השירות שמשמש כברירת מחדל ב-Compute Engine את התפקיד Dataproc Worker (roles/dataproc.worker) בפרויקט (באמצעות IAM).

שליחת עומס עבודה באצווה של Spark

אתם יכולים להשתמש במסוף Google Cloud , ב-Google Cloud CLI או ב-API בארכיטקטורת REST כדי ליצור ולשלוח עומס עבודה באצווה של Managed Service for Apache Spark.

המסוף

  1. נכנסים לדף Jobs של Managed Service for Apache Spark במסוף Google Cloud .

    לדף Managed Service for Apache Spark Jobs

  2. לוחצים על Submit job כדי לפתוח את הדף Submit a job.

  3. כדי לשלוח עומס עבודה באצווה של Spark שמחשב את הערך המשוער של פאי, בוחרים את השדות הבאים וממלאים אותם:

    • Select compute type for job: בוחרים באפשרות Serverless Spark.
    • פרטי המשימה ללא שרת:
      • ‫Job ID: מציינים מזהה לעומס העבודה באצווה (או מאשרים את המזהה שמוגדר כברירת מחדל). הערך הזה צריך להיות באורך של 4 עד 63 תווים קטנים, להתחיל ולהסתיים באות קטנה או במספר, ולהכיל רק אותיות קטנות, מספרים ומקפים (/[a-z0-9-]/).
      • פרופיל זמן ריצה: בוחרים אזור ברשימה Regions ובוחרים באפשרות הגדרת שירות ברירת מחדל (או בפרופיל זמן ריצה שמור) ברשימה Runtime profiles.
      • הגדרת פרופיל זמן ריצה (אופציונלי): בכרטיס Summary, לוחצים על Configure (או על Create new profile בתפריט Runtime profile) כדי לפתוח את חלונית ההגדרות של פרופיל זמן הריצה. בחלונית הזו אפשר להתאים אישית את ההגדרות הבאות ואז ללחוץ על Use configuration (או על Save new profile):
    • קבצים ופריטי מידע שנוצרו בתהליך הפיתוח (Artifact):
      • סוג המשימה: בוחרים באפשרות Spark (Scala / Java).
      • Driver configuration: בוחרים באפשרות Main class.
      • כיתה ראשית:
        org.apache.spark.examples.SparkPi
      • Arguments: מזינים 1000 ולוחצים על Enter.
      • קובצי Jar (הקובץ הזה מותקן מראש בסביבת ההפעלה של Managed Service for Apache Spark):
        file:///usr/lib/spark/examples/jars/spark-examples.jar
    • ביצוע המשימה ומאפיינים:
      • מאפייני Spark: לוחצים על Add property כדי להזין את Key (שם המאפיין) ואת Value של מאפייני Spark הנתמכים שרוצים להגדיר בעומס העבודה של Spark באצווה. הערה: בניגוד למאפייני האשכול של Managed Service for Apache Spark, מאפייני עומס העבודה של Managed Service for Apache Spark לא כוללים את הקידומת spark:.
      • ‫Labels: אופציונלי: לוחצים על Add label כדי לצרף לעומס העבודה צמדי תוויות של Key ו-Value.
  4. לוחצים על Submit כדי להריץ את עומס העבודה של Spark באצווה.

gcloud

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

gcloud dataproc batches submit spark \
    --region=REGION \
    --version=3.0 \
    --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
    --class=org.apache.spark.examples.SparkPi \
    -- 1000

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

  • REGION: מציינים את האזור שבו עומס העבודה יפעל.
  • אפשרויות אחרות: אתם יכולים להוסיף דגלים של gcloud dataproc batches submit spark כדי לציין אפשרויות אחרות של עומס עבודה ומאפיינים של Spark.
    • --jars: קובץ ה-JAR לדוגמה מותקן מראש בסביבת ההפעלה של Spark. הארגומנט 1000 של הפקודה שמועבר לעומס העבודה של SparkPi מציין 1000 איטרציות של לוגיקת ההערכה של pi (הארגומנטים של הקלט של עומס העבודה נכללים אחרי "-- ").
    • --subnet: אפשר להוסיף את הדגל הזה כדי לציין את השם של רשת המשנה באזור של הסשן. אם לא תציינו רשת משנה, Managed Service for Apache Spark יבחר את רשת המשנה default באזור של הסשן. ‫Managed Service for Apache Spark מפעיל את גישה פרטית ל-Google‏ (PGA) ברשת המשנה. למידע על דרישות הקישוריות לרשת, קראו את המאמר הגדרת הרשת של Managed Service for Apache Spark.
    • ‫--tags: אפשר להוסיף את הדגל הזה כדי לציין תגי רשת לבקרת תנועה. משתמשים בתגי רשת כדי להגביל את הקישוריות. בסביבת הייצור, מומלץ להגביל את כללי חומת האש לכתובות ה-IP שמשמשות את עומסי העבודה של Spark.
    • ‫--properties: אתם יכולים להוסיף את הדגל הזה כדי להזין מאפייני Spark נתמכים שישמשו את עומס העבודה של Spark באצווה.
    • ‫--deps-bucket: אתם יכולים להוסיף את הדגל הזה כדי לציין קטגוריה של Cloud Storage שאליה Managed Service for Apache Spark יעלה את יחסי התלות של עומס העבודה. לא צריך לציין את הקידומת gs:// של ה-URI של הקטגוריה. אפשר לציין את הנתיב או את השם של הקטגוריה. ‫Managed Service for Apache Spark מעלה את הקבצים המקומיים לתיקיית /dependencies בקטגוריה לפני הרצת עומס העבודה באצווה. הערה: הדגל הזה נדרש אם עומס העבודה באצווה מפנה לקבצי רפרנס במחשב המקומי.
    • ‫--ttl: אפשר להוסיף את הדגל --ttl כדי לציין את משך החיים של המשימה באצווה. אם עומס העבודה חורג מהמשך הזה, הוא מסתיים באופן מיידי בלי להמתין לסיום העבודה המתמשכת. מציינים את משך הזמן באמצעות הסיומת s,‏ m,‏ h או d (שניות, דקות, שעות או ימים). הערך המינימלי הוא 10 דקות (10m), והערך המקסימלי הוא 14 ימים (14d).
      • אצוות של סביבות זמן ריצה בגרסה 1.1 או 2.0: אם לא מציינים את --ttl בעומס עבודה של אצווה של סביבת זמן ריצה בגרסה 1.1 או 2.0, עומס העבודה יכול לפעול עד שהוא מסתיים באופן טבעי (או לפעול לנצח אם הוא לא מסתיים).
      • סביבות זמן ריצה של Batch בגרסה 2.1 ואילך: אם לא מציינים את --ttl בעומס עבודה של סביבת זמן ריצה של Batch בגרסה 2.1 ואילך, ערך ברירת המחדל הוא 4h.
    • ‫--service-account: אתם יכולים לציין חשבון שירות שישמש להרצת עומס העבודה. אם לא מציינים חשבון שירות, עומס העבודה פועל בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. לחשבון השירות צריך להיות התפקיד Dataproc Worker.
    • ‫Hive Metastore: הפקודה הבאה מגדירה עומס עבודה באצווה לשימוש ב-Hive Metastore חיצוני בניהול עצמי באמצעות הגדרת Spark רגילה.
      gcloud dataproc batches submit spark\
          --properties=spark.sql.catalogImplementation=hive,spark.hive.metastore.uris=METASTORE_URI,spark.hive.metastore.warehouse.dir=WAREHOUSE_DIR> \
          other args ...
              
    • Persistent History Server:
      1. הפקודה הבאה יוצרת PHS באשכול של Managed Service for Apache Spark עם צומת יחיד. ה-PHS חייב להיות באזור שבו מריצים עומסי עבודה באצווה, וצריך להיות קיים bucket-name של Cloud Storage.
        gcloud dataproc clusters create PHS_CLUSTER_NAME \
            --region=REGION \
            --single-node \
            --enable-component-gateway \
            --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/phs/*/spark-job-history
                     
      2. שולחים עומס עבודה באצווה ומציינים את שרת ההיסטוריה הקבוע שפועל.
        gcloud dataproc batches submit spark \
            --region=REGION \
            --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
            --class=org.apache.spark.examples.SparkPi \
            --history-server-cluster=projects/project-id/regions/region/clusters/PHS-cluster-name \
            -- 1000
                      
    • גרסת סביבת זמן הריצה: משתמשים בדגל --version כדי לציין את גרסת סביבת זמן הריצה של Managed Service for Apache Spark לעומס העבודה.
      gcloud dataproc batches submit spark \
          --region=REGION \
          --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
          --class=org.apache.spark.examples.SparkPi \
          --version=VERSION
          -- 1000
                  

API

בקטע הזה מוסבר איך יוצרים עומס עבודה באצווה כדי לחשב את הערך המשוער של pi באמצעות Managed Service for Apache Spark batches.create`

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט ב- Google Cloud .
  • ‫region: אזור ב-Compute Engine שבו Managed Service for Apache Spark יריץ את עומס העבודה.
  • הערות:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי הפרויקטים מופיעים בקטע Project info ב-Dashboard במסוף Google Cloud .
    • ‫REGION: האזור של הסשן.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://dataproc.googleapis.com/v1/projects/project-id/locations/region/batches

תוכן בקשת JSON:

{
  "sparkBatch":{
    "args":[
      "1000"
    ],
    "runtimeConfig": {
      "version": "2.3",
    },
    "jarFileUris":[
      "file:///usr/lib/spark/examples/jars/spark-examples.jar"
    ],
    "mainClass":"org.apache.spark.examples.SparkPi"
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
"name":"projects/project-id/locations/region/batches/batch-id",
  "uuid":",uuid",
  "createTime":"2021-07-22T17:03:46.393957Z",
  "sparkBatch":{
    "mainClass":"org.apache.spark.examples.SparkPi",
    "args":[
      "1000"
    ],
    "jarFileUris":[
      "file:///usr/lib/spark/examples/jars/spark-examples.jar"
    ]
  },
  "runtimeInfo":{
    "outputUri":"gs://dataproc-.../driveroutput"
  },
  "state":"SUCCEEDED",
  "stateTime":"2021-07-22T17:06:30.301789Z",
  "creator":"account-email-address",
  "runtimeConfig":{
    "version":"2.3",
    "properties":{
      "spark:spark.executor.instances":"2",
      "spark:spark.driver.cores":"2",
      "spark:spark.executor.cores":"2",
      "spark:spark.app.name":"projects/project-id/locations/region/batches/batch-id"
    }
  },
  "environmentConfig":{
    "peripheralsConfig":{
      "sparkHistoryServerConfig":{
      }
    }
  },
  "operation":"projects/project-id/regions/region/operation-id"
}

הערכת עלויות של עומסי עבודה (workloads)

עומסי העבודה של Managed Service for Apache Spark צורכים משאבים של יחידות מחשוב נתונים (DCU) ושל אחסון ב-shuffle. במאמר התמחור של Managed Service for Apache Spark מופיעה דוגמה לפלט של UsageMetrics ב-Managed Service for Apache Spark, שמאפשר להעריך את צריכת המשאבים ואת העלויות של עומס העבודה.

המאמרים הבאים

מידע על: