המדריך הזה מתמקד ב-Flex Templates ומראה איך אפשר ליצור ולהריץ צינור עיבוד נתונים מבוסס-קונטיינר ב-Dataflow. תלמדו איך לארוז את צינורות העיבוד לפריסה יעילה באמצעות תבנית Flex לדוגמה.
מטרות
- יוצרים תבנית Flex של Dataflow.
- משתמשים בתבנית כדי להריץ משימת Dataflow.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים 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 .
מפעילים את ממשקי ה-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
-
אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים 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 .
מפעילים את ממשקי ה-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
-
אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
מקצים תפקידים לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/dataflow.adminroles/dataflow.workerroles/storage.objectAdminroles/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_NUMBERGoogle Cloudמספר הפרויקט -
SERVICE_ACCOUNT_ROLE: כל תפקיד בנפרד
הכנת הסביבה לשימוש בתבניות Flex
מתקינים את ה-SDK ואת הדרישות של סביבת הפיתוח.
Java
מורידים ומתקינים את Java Development Kit (JDK) גרסה 17. מוודאים שמשתנה הסביבה
JAVA_HOMEמוגדר ומפנה להתקנת ה-JDK.מורידים ומתקינים את Apache Maven לפי מדריך ההתקנה של Maven למערכת ההפעלה הספציפית שלכם.
Python
מתקינים את Apache Beam SDK ל-Python.
המשך
אפשר להשתמש במדריך להורדה ולהתקנה של Go כדי להוריד ולהתקין את Go למערכת ההפעלה הספציפית שלכם. מידע על סביבות זמן הריצה של Go שנתמכות על ידי Apache Beam זמין במאמר תמיכה בזמן ריצה של Apache Beam.
מורידים את דוגמת הקוד.
Java
משכפלים את מאגר
java-docs-samples.git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
עוברים אל דוגמת הקוד של המדריך הזה.
cd java-docs-samples/dataflow/flex-templates/getting_started
יוצרים קובץ Uber JAR מפרויקט Java.
mvn clean package
קובץ ה-Uber JAR הזה כולל את כל התלויות. אפשר להריץ את הקובץ הזה כאפליקציה עצמאית ללא תלות חיצונית בספריות אחרות.
Python
משכפלים את מאגר
python-docs-samples.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
עוברים אל דוגמת הקוד של המדריך הזה.
cd python-docs-samples/dataflow/flex-templates/getting_started
המשך
משכפלים את מאגר
golang-samples.git clone https://github.com/GoogleCloudPlatform/golang-samples.git
עוברים אל דוגמת הקוד של המדריך הזה.
cd golang-samples/dataflow/flex-templates/wordcount
מהדרים את הקובץ הבינארי של 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 עבור התבנית.
משתמשים בפקודה
gcloud artifacts repositories createכדי ליצור מאגר חדש ב-Artifact Registry.gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
- REPOSITORY: שם למאגר. שמות המאגרים צריכים להיות ייחודיים לכל מיקום מאגר בפרויקט.
- LOCATION: המיקום האזורי או הרב-אזורי של המאגר.
משתמשים בפקודה
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
משתמשים בפקודה
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: האזור
כדי לראות את הסטטוס של עבודת Dataflow במסוףGoogle Cloud , עוברים לדף Jobs של Dataflow.
אם העבודה תפעל בהצלחה, הפלט ייכתב לקובץ בשם gs://BUCKET_NAME/output--00000-of-00001.txt בקטגוריה של Cloud Storage.
Python
משתמשים בפקודה
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: האזור
כדי לראות את הסטטוס של עבודת Dataflow במסוףGoogle Cloud , עוברים לדף Jobs של Dataflow.
אם העבודה תפעל בהצלחה, הפלט ייכתב לקובץ בשם gs://BUCKET_NAME/output--00000-of-00001.txt בקטגוריה של Cloud Storage.
המשך
משתמשים בפקודה
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: האזור
כדי לראות את הסטטוס של עבודת Dataflow במסוףGoogle Cloud , עוברים לדף Jobs של Dataflow.
אם העבודה תפעל בהצלחה, הפלט ייכתב לקובץ בשם 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
מחיקת משאבים בודדים
-
מחיקת הקטגוריה של Cloud Storage וכל האובייקטים בקטגוריה.
gcloud storage rm gs://BUCKET_NAME --recursive
-
מחיקת מאגר Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION
-
מבטלים את התפקידים שהקציתם לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/dataflow.adminroles/dataflow.workerroles/storage.objectAdminroles/artifactregistry.writer
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
אם תרצו, תוכלו לבטל את פרטי הכניסה שיצרתם ולמחוק את הקובץ המקומי של פרטי הכניסה.
gcloud auth application-default revoke
-
אם רוצים, מבטלים את פרטי הכניסה של ה-CLI של gcloud.
gcloud auth revoke
המאמרים הבאים
- שימוש בתבניות Flex לאריזת צינור עיבוד נתונים ב-Dataflow.
- כדאי לעיין ביתרונות של תבניות מוכנות מראש ותבניות ש-Google מספקת לתרחישי שימוש נפוצים.