הרצת תבניות Flex ב-Dataflow

בדף הזה מוסבר איך להריץ משימת Dataflow באמצעות Flex Template. תבניות Flex מאפשרות לארוז צינור עיבוד נתונים של Dataflow כדי להריץ את צינור עיבוד הנתונים בלי סביבת פיתוח של Apache Beam.

ההרשאות הנדרשות

כשמריצים תבנית Flex, ‏ Dataflow יוצרת בשבילכם ג'וב. כדי ליצור את המשימה, לחשבון השירות של Dataflow צריכה להיות ההרשאה הבאה:

  • dataflow.serviceAgent

כשמשתמשים ב-Dataflow בפעם הראשונה, השירות מקצה את התפקיד הזה באופן אוטומטי, כך שלא צריך לתת את ההרשאה הזו.

כברירת מחדל, חשבון השירות של Compute Engine משמש מכונות וירטואליות של מפעיל ומכונות וירטואליות של עובד. לחשבון השירות צריכות להיות ההרשאות והיכולות הבאות:

  • אדמין של אובייקטים באחסון (roles/storage.objectAdmin)
  • בעל הרשאת צפייה (roles/viewer)
  • עובד Dataflow‏ (roles/dataflow.worker)
  • גישת קריאה וכתיבה לדלי של שלב ההכנה
  • הרשאת קריאה לתמונה של תבנית Flex

כדי לתת גישת קריאה וכתיבה לקטגוריית האחסון הזמני, אפשר להשתמש בתפקיד 'אדמין של אובייקטים באחסון' (roles/storage.objectAdmin). מידע נוסף זמין במאמר תפקידי IAM ל-Cloud Storage.

כדי להעניק גישת קריאה לתמונה של תבנית Flex, אפשר להשתמש בתפקיד Storage Object Viewer (roles/storage.objectViewer). מידע נוסף זמין במאמר הגדרת בקרת גישה.

הרצת תבנית Flex

כדי להריץ תבנית Flex, משתמשים בפקודה gcloud dataflow flex-template run:

gcloud dataflow flex-template run JOB_ID \
  --template-file-gcs-location gs://TEMPLATE_FILE_LOCATION \
  --region REGION \
  --staging-location STAGING_LOCATION \
  --temp-location TEMP_LOCATION \
  --parameters  PARAMETERS \
  --additional-user-labels LABELS \

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

  • JOB_ID: המזהה של המשימה

  • TEMPLATE_FILE_LOCATION: המיקום של קובץ התבנית ב-Cloud Storage

  • REGION: האזור שבו תופעל משימת Dataflow

  • STAGING_LOCATION: מיקום ב-Cloud Storage לאחסון זמני של קבצים מקומיים

  • TEMP_LOCATION: המיקום ב-Cloud Storage שבו ייכתבו קבצים זמניים. אם לא מגדירים את המיקום, ברירת המחדל היא מיקום ההעלאה.

  • PARAMETERS: פרמטרים של פייפליין למשימה

  • LABELS: אופציונלי. תוויות שמצורפות למשרה, בפורמט KEY_1=VALUE_1,KEY_2=VALUE_2,....

במהלך שלב ההעברה לסטייג' בהפעלת תבנית, Dataflow כותב קבצים למיקום הסטייג'. ‫Dataflow קורא את הקבצים האלה שמועברים ל-staging כדי ליצור את גרף המשימה. במהלך שלב ההרצה, Dataflow כותב קבצים למיקום הזמני.

הגדרת אפשרויות של צינור עיבוד הנתונים

כדי להגדיר אפשרויות של צינורות כשמריצים תבנית Flex, משתמשים בדגלים הבאים בפקודה gcloud dataflow flex-template run:

gcloud

כשמעבירים פרמטרים מסוג List או Map, יכול להיות שתצטרכו להגדיר פרמטרים בקובץ YAML ולהשתמש בדגל flags-file.

API

בדוגמה הבאה אפשר לראות איך לכלול אפשרויות של צינור עיבוד נתונים, ניסויים ואפשרויות נוספות בגוף הבקשה:

{
  "jobName": "my-flex-template-job",
  "parameters": {
    "option_defined_in_metadata": "value"
  },
  "environment": {
    "additionalExperiments": [
      "use_runner_v2"
    ],
    "additionalPipelineOptions": {
      "common_pipeline_option": "value"
    }
  }
}

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

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

Java

  • runner
  • project
  • jobName
  • templateLocation
  • region

Python

  • runner
  • project
  • job_name
  • template_location
  • region

Go

  • runner
  • project
  • job_name
  • template_location
  • region

חסימת מפתחות SSH של פרויקט ממכונות וירטואליות שמשתמשות במפתחות SSH שמבוססים על מטא-נתונים

כדי למנוע ממכונות וירטואליות לקבל מפתחות SSH ששמורים במטא-נתונים של הפרויקט, אפשר לחסום את מפתחות ה-SSH של הפרויקט במכונות הווירטואליות. משתמשים בדגל additional-experiments עם אפשרות השירות block_project_ssh_keys:

--additional-experiments=block_project_ssh_keys

מידע נוסף מופיע במאמר אפשרויות לשירות Dataflow.

עדכון של משימה בתבנית Flex

בדוגמה הבאה מוצגת בקשה לעדכון של משימת סטרימינג של תבנית באמצעות השיטה projects.locations.flexTemplates.launch. אם רוצים להשתמש ב-CLI של gcloud, אפשר לעיין במאמר בנושא עדכון צינור קיים.

אם רוצים לעדכן תבנית מותאמת אישית, צריך להשתמש במקום זאת ב-projects.locations.templates.launch.

  1. פועלים לפי השלבים כדי ליצור משימת סטרימינג מתבנית Flex. שולחים את בקשת ה-HTTP POST הבאה עם הערכים ששונו:

    POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launch
    {
        "launchParameter": {
          "update": true
          "jobName": "JOB_NAME",
          "parameters": {
            "input_subscription": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME",
            "output_table": "PROJECT_ID:DATASET.TABLE_NAME"
          },
        "containerSpecGcsPath": "STORAGE_PATH"
        },
    }
    
    • מחליפים את PROJECT_ID במזהה הפרויקט.
    • מחליפים את REGION באזור של Dataflow שבו נמצאת המשימה שרוצים לעדכן.
    • מחליפים את JOB_NAME בשם המדויק של המשרה שרוצים לעדכן.
    • מגדירים את parameters לרשימה של צמדי מפתח/ערך. הפרמטרים שמפורטים כאן ספציפיים לדוגמה הזו של התבנית. אם אתם משתמשים בתבנית מותאמת אישית, משנים את הפרמטרים לפי הצורך. אם אתם משתמשים בתבנית לדוגמה, מחליפים את המשתנים הבאים.
      • מחליפים את SUBSCRIPTION_NAME בשם המינוי שלכם ל-Pub/Sub.
      • מחליפים את DATASET בשם של מערך הנתונים ב-BigQuery.
      • מחליפים את TABLE_NAME בשם הטבלה ב-BigQuery.
    • מחליפים את STORAGE_PATH במיקום של קובץ התבנית ב-Cloud Storage. המיקום צריך להתחיל ב-gs://.
  2. משתמשים בפרמטר environment כדי לשנות את הגדרות הסביבה. מידע נוסף זמין במאמר FlexTemplateRuntimeEnvironment.

  3. אופציונלי: כדי לשלוח את הבקשה באמצעות curl (ב-Linux, ב-macOS או ב-Cloud Shell), שומרים את הבקשה בקובץ JSON ואז מריצים את הפקודה הבאה:

    curl -X POST -d "@FILE_PATH" -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)"  https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launch
    

    מחליפים את FILE_PATH בנתיב לקובץ ה-JSON שמכיל את גוף הבקשה.

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

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