יצירה והרצה של תבנית Flex לדוגמה

המדריך הזה מתמקד ב-Flex Templates ומראה איך אפשר ליצור ולהריץ צינור עיבוד נתונים מבוסס-קונטיינר ב-Dataflow. תלמדו איך לארוז את צינורות העיבוד לפריסה יעילה באמצעות תבנית Flex לדוגמה.

מטרות

  • יוצרים תבנית Flex של Dataflow.
  • משתמשים בתבנית כדי להריץ משימת Dataflow.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. מפעילים את ממשקי ה-API של Dataflow,‏ Compute Engine,‏ רישום ביומן,‏ Cloud Storage,‏ Cloud Storage JSON,‏ מנהל המשאבים ו-Artifact Registry:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
  8. אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

    gcloud auth application-default login

    אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

    אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  9. מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

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

    • PROJECT_ID: מזהה הפרויקט.
    • USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה, myemail@example.com.
    • ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
  10. התקינו את ה-CLI של Google Cloud.

  11. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  12. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  13. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  14. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  15. מפעילים את ממשקי ה-API של Dataflow,‏ Compute Engine,‏ רישום ביומן,‏ Cloud Storage,‏ Cloud Storage JSON,‏ מנהל המשאבים ו-Artifact Registry:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
  16. אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

    gcloud auth application-default login

    אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

    אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  17. מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

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

    • PROJECT_ID: מזהה הפרויקט.
    • USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה, myemail@example.com.
    • ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
  18. מקצים תפקידים לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    • roles/artifactregistry.writer
    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE

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

    • PROJECT_ID: מזהה הפרויקט
    • PROJECT_NUMBER Google Cloudמספר הפרויקט
    • SERVICE_ACCOUNT_ROLE: כל תפקיד בנפרד

הכנת הסביבה לשימוש בתבניות Flex

מתקינים את ה-SDK ואת הדרישות של סביבת הפיתוח.

Java

  1. מורידים ומתקינים את Java Development Kit (JDK) גרסה 17. מוודאים שמשתנה הסביבה JAVA_HOME מוגדר ומפנה להתקנת ה-JDK.

  2. מורידים ומתקינים את Apache Maven לפי מדריך ההתקנה של Maven למערכת ההפעלה הספציפית שלכם.

Python

מתקינים את Apache Beam SDK ל-Python.

המשך

אפשר להשתמש במדריך להורדה ולהתקנה של Go כדי להוריד ולהתקין את Go למערכת ההפעלה הספציפית שלכם. מידע על סביבות זמן הריצה של Go שנתמכות על ידי Apache Beam זמין במאמר תמיכה בזמן ריצה של Apache Beam.

מורידים את דוגמת הקוד.

Java

  1. משכפלים את מאגר java-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  2. עוברים אל דוגמת הקוד של המדריך הזה.

    cd java-docs-samples/dataflow/flex-templates/getting_started
  3. יוצרים קובץ Uber JAR מפרויקט Java.

    mvn clean package

    קובץ ה-Uber JAR הזה כולל את כל התלויות. אפשר להריץ את הקובץ הזה כאפליקציה עצמאית ללא תלות חיצונית בספריות אחרות.

Python

  1. משכפלים את מאגר python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
  2. עוברים אל דוגמת הקוד של המדריך הזה.

    cd python-docs-samples/dataflow/flex-templates/getting_started

המשך

  1. משכפלים את מאגר golang-samples.

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
  2. עוברים אל דוגמת הקוד של המדריך הזה.

    cd golang-samples/dataflow/flex-templates/wordcount
  3. מהדרים את הקובץ הבינארי של Go.

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount .

יצירת קטגוריה של Cloud Storage לצינור הנתונים

משתמשים בפקודה gcloud storage buckets create כדי ליצור קטגוריה של Cloud Storage:

gcloud storage buckets create gs://BUCKET_NAME

מחליפים את BUCKET_NAME בשם של קטגוריית Cloud Storage. השמות של קטגוריות ב-Cloud Storage חייבים להיות ייחודיים באופן גלובלי ולעמוד בדרישות למתן שמות של קטגוריות.

יצירת מאגר Artifact Registry

יוצרים מאגר ב-Artifact Registry שאליו תדחפו את קובץ האימג' של קונטיינר Docker עבור התבנית.

  1. משתמשים בפקודה gcloud artifacts repositories create כדי ליצור מאגר חדש ב-Artifact Registry.

    gcloud artifacts repositories create REPOSITORY \
     --repository-format=docker \
     --location=LOCATION

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

    • REPOSITORY: שם למאגר. שמות המאגרים צריכים להיות ייחודיים לכל מיקום מאגר בפרויקט.
    • LOCATION: המיקום האזורי או הרב-אזורי של המאגר.
  2. משתמשים בפקודה gcloud auth configure-docker כדי להגדיר את Docker לאימות בקשות ל-Artifact Registry. הפקודה הזו מעדכנת את תצורת Docker, כדי שתוכלו להתחבר ל-Artifact Registry ולהעביר קובצי אימג' למאגר.

    gcloud auth configure-docker LOCATION-docker.pkg.dev

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

יצירת תבנית Flex של Dataflow

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

תבנית Flex מורכבת מהרכיבים הבאים:

  • קובץ אימג' של קונטיינר Docker שכולל את קוד צינור הנתונים, ויוצר צינור נתונים בקונטיינר. בתבניות Flex של Java ו-Python, קובץ האימג' של Docker נוצר ומועבר בדחיפה למאגר Artifact Registry כשמריצים את הפקודה gcloud dataflow flex-template build.
  • קובץ מפרט של תבנית. הקובץ הזה הוא מסמך JSON שמכיל את המיקום של תמונת הקונטיינר, וגם מטא-נתונים על התבנית, כמו פרמטרים של צינור.

מאגר הדוגמאות ב-GitHub מכיל את הקובץ metadata.json.

כדי להוסיף מטא-נתונים לתבנית, אפשר ליצור קובץ metadata.json משלכם.

Java

gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-java.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-java:latest" \
 --sdk-language "JAVA" \
 --flex-template-base-image JAVA17 \
 --metadata-file "metadata.json" \
 --jar "target/flex-template-getting-started-1.0.jar" \
 --env FLEX_TEMPLATE_JAVA_MAIN_CLASS="com.example.dataflow.FlexTemplateGettingStarted"

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

  • BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם קודם
  • LOCATION: המיקום
  • PROJECT_ID: מזהה הפרויקט Google Cloud
  • REPOSITORY: השם של מאגר Artifact Registry שיצרתם קודם

Python

gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-py.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-python:latest" \
 --sdk-language "PYTHON" \
 --flex-template-base-image "PYTHON3" \
 --metadata-file "metadata.json" \
 --py-path "." \
 --env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \
 --env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt"

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

  • BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם קודם
  • LOCATION: המיקום
  • PROJECT_ID: מזהה הפרויקט Google Cloud
  • REPOSITORY: השם של מאגר Artifact Registry שיצרתם קודם

המשך

gcloud dataflow flex-template build gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest" \
 --sdk-language "GO" \
 --flex-template-base-image "GO" \
 --metadata-file "metadata.json" \
 --go-binary-path="." \
 --env "FLEX_TEMPLATE_GO_BINARY=wordcount"

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

  • BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם קודם.
  • LOCATION: המיקום
  • PROJECT_ID: מזהה הפרויקט Google Cloud
  • REPOSITORY: השם של מאגר Artifact Registry שיצרתם קודם

הפעלת תבנית Flex

בשלב הזה משתמשים בתבנית כדי להריץ משימת Dataflow.

Java

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

    gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/getting_started-java.json" \
     --parameters output="gs://BUCKET_NAME/output-" \
     --region "REGION"

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

    • BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם קודם
    • REGION: האזור
  2. כדי לראות את הסטטוס של עבודת Dataflow במסוףGoogle Cloud , עוברים לדף Jobs של Dataflow.

    מעבר אל Jobs

אם העבודה תפעל בהצלחה, הפלט ייכתב לקובץ בשם gs://BUCKET_NAME/output--00000-of-00001.txt בקטגוריה של Cloud Storage.

Python

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

    gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/getting_started-py.json" \
     --parameters output="gs://BUCKET_NAME/output-" \
     --region "REGION"

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

    • BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם קודם
    • REGION: האזור
  2. כדי לראות את הסטטוס של עבודת Dataflow במסוףGoogle Cloud , עוברים לדף Jobs של Dataflow.

    מעבר אל Jobs

אם העבודה תפעל בהצלחה, הפלט ייכתב לקובץ בשם gs://BUCKET_NAME/output--00000-of-00001.txt בקטגוריה של Cloud Storage.

המשך

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

    gcloud dataflow flex-template run "wordcount-go-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json" \
     --parameters output="gs://BUCKET_NAME/samples/dataflow/templates/counts.txt" \
     --region "REGION"

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

    • BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם קודם
    • REGION: האזור
  2. כדי לראות את הסטטוס של עבודת Dataflow במסוףGoogle Cloud , עוברים לדף Jobs של Dataflow.

    מעבר אל Jobs

אם העבודה תפעל בהצלחה, הפלט ייכתב לקובץ בשם gs://BUCKET_NAME/samples/dataflow/templates/count.txt בקטגוריה שלכם ב-Cloud Storage.

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

A Timeout in polling error message

הסרת המשאבים

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

מחיקת הפרויקט

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

מחיקת משאבים בודדים

  1. מחיקת הקטגוריה של Cloud Storage וכל האובייקטים בקטגוריה.
    gcloud storage rm gs://BUCKET_NAME --recursive
  2. מחיקת מאגר Artifact Registry.
    gcloud artifacts repositories delete REPOSITORY \
        --location=LOCATION
  3. מבטלים את התפקידים שהקציתם לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    • roles/artifactregistry.writer
    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=SERVICE_ACCOUNT_ROLE
  4. אם תרצו, תוכלו לבטל את פרטי הכניסה שיצרתם ולמחוק את הקובץ המקומי של פרטי הכניסה.

    gcloud auth application-default revoke
  5. אם רוצים, מבטלים את פרטי הכניסה של ה-CLI של gcloud.

    gcloud auth revoke

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