1. סקירה כללית
מה זה Dataflow?
Dataflow הוא שירות מנוהל לביצוע מגוון רחב של תבניות עיבוד נתונים. בתיעוד באתר הזה מוסבר איך לפרוס צינורות עיבוד נתונים באצווה ובסטרימינג באמצעות Dataflow, כולל הוראות לשימוש בתכונות שירות.
Apache Beam SDK הוא מודל תכנות בקוד פתוח שמאפשר לפתח צינורות עיבוד נתונים באצווה וגם בסטרימינג. את צינורות עיבוד הנתונים שלכם יוצרים באמצעות תוכנית Apache Beam, ולאחר מכן מריצים אותם בשירות Dataflow. מסמכי התיעוד של Apache Beam כוללים מידע מושגים וחומר עזר מפורטים למודל התכנות Apache Beam, לערכות SDK ולעובדים אחרים.
סטרימינג של ניתוח נתונים במהירות
Dataflow להעלאת צינור נתונים בסטרימינג מהיר ופשוט, עם זמן אחזור קצר יותר.
לפשט את הפעולות והניהול
מאפשרים לצוותים להתמקד בתכנות במקום לנהל אשכולות שרתים, כי הגישה של Dataflow ללא שרת (serverless) מסירה מעומסי העבודה של הנדסת מערכות מידע.
הפחתת עלות הבעלות הכוללת
התאמה לעומס (autoscaling) של משאבים עם יכולות עיבוד באצווה שעברו אופטימיזציה לעלות, מאפשרת ל-Dataflow קיבולת כמעט בלתי מוגבלת לנהל עומסי עבודה עונתיים וקוצניים בלי להוציא יותר מדי כסף.
תכונות עיקריות
ניהול משאבים אוטומטי ואיזון עבודה דינמי
Dataflow מאפשר הקצאה וניהול של משאבי עיבוד באופן אוטומטי כדי למזער את זמן האחזור ולמקסם את השימוש, כך שלא תצטרכו להפעיל מכונות או לשמור אותן ידנית. חלוקת העבודה למחיצות היא גם אוטומטית ועברה אופטימיזציה לאיזון מחדש באופן דינמי. אין צורך לרדוף אחרי 'מפתחות חמים'. או לעבד מראש את נתוני הקלט.
התאמה לעומס (autoscaling) לרוחב
התאמה לעומס (autoscaling) של משאבי עובדים באופן אופקי לתפוקה אופטימלית, משפרת את המחיר הכולל לביצועים.
תמחור גמיש לתזמון משאבים לעיבוד ברצף (batch processing)
לצורך עיבוד עם גמישות בזמן תזמון משימות, כמו משימות במהלך לילה, התכונה 'תזמון משאבים גמיש' (FlexRS) מציעה מחיר נמוך יותר לעיבוד ברצף. המשימות הגמישות האלה מוצבות בתור ומבטיחה שהן יאוחזרו לביצוע בתוך חלון זמן של שש שעות.
המדריך הזה הותאם בכתובת https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-maven
מה תלמדו
- איך יוצרים פרויקט Maven באמצעות Apache Beam באמצעות Java SDK
- הרצת צינור עיבוד נתונים לדוגמה באמצעות מסוף Google Cloud Platform
- איך למחוק את הקטגוריה המשויכת של Cloud Storage ואת התוכן שלה
מה צריך להכין
איך תשתמשו במדריך הזה?
איזה דירוג מגיע לדעתך לחוויית השימוש בשירותי Google Cloud Platform?
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID
.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת ממשקי ה-API
לוחצים על סמל התפריט בפינה השמאלית העליונה.
בוחרים באפשרות APIs & (ממשקי API &) שירותים > מרכז שליטה בתפריט הנפתח.
בוחרים באפשרות + Enable APIs and Services (הפעלת ממשקי API ושירותים).
מחפשים את Compute Engine. בתיבת החיפוש. לוחצים על "Compute Engine API" ברשימת התוצאות שמופיעה.
בדף Google Compute Engine, לוחצים על Enable (הפעלה).
לאחר ההפעלה, יש ללחוץ על החץ כדי לחזור אחורה.
עכשיו צריך לחפש את ממשקי ה-API הבאים ולהפעיל גם אותם:
- Cloud Dataflow
- Stackdriver
- Cloud Storage
- JSON של Cloud Storage
- BigQuery
- Cloud Pub/Sub
- Cloud Datastore
- ממשקי Cloud Resource Manager API
3. יצירת קטגוריה חדשה של Cloud Storage
במסוף Google Cloud Platform, לוחצים על הסמל תפריט בפינה הימנית העליונה של המסך:
גוללים למטה ובוחרים באפשרות Cloud Storage > דפדפן בקטע המשנה אחסון:
עכשיו אמור להופיע דפדפן Cloud Storage, ובהנחה שאתם משתמשים בפרויקט שאין לו כרגע קטגוריות של Cloud Storage, תוצג לכם הזמנה ליצירת קטגוריה חדשה. לוחצים על הלחצן Create bucket כדי ליצור קטגוריה:
נותנים שם לקטגוריה. כפי שצוין בתיבת הדו-שיח, שמות הקטגוריות צריכים להיות ייחודיים בכל Cloud Storage. לכן אם תבחרו שם ברור כמו "test", סביר להניח שתגלו שמישהו אחר כבר יצר קטגוריה בשם הזה ויקבל שגיאה.
יש גם כמה כללים שקובעים אילו תווים מותר לכלול בשמות של קטגוריות. אין בעיה אם אתם מתחילים ומסיימים את שם הקטגוריה באות או במספר, ומשתמשים רק במקפים במרכז. אם תנסו להשתמש בתווים מיוחדים, או אם תנסו להתחיל או לסיים את שם הקטגוריה עם משהו שאינו אות או מספר, תיבת הדו-שיח תזכיר לכם את הכללים.
נותנים שם ייחודי לקטגוריה ולוחצים על Create. אם בוחרים משהו שכבר נמצא בשימוש, תוצג הודעת השגיאה שמוצגת למעלה. אחרי שתיצרו קטגוריה, תועברו לקטגוריה החדשה והריקה בדפדפן:
שם הקטגוריה שתראו יהיה כמובן שונה, כי הוא חייב להיות ייחודי בכל הפרויקטים.
4. הפעלת Cloud Shell
הפעלת Cloud Shell
- במסוף Cloud, לוחצים על Activate Cloud Shell .
אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (בחלק הנגלל) שמתאר מהו. במקרה כזה, לוחצים על המשך (וזה לא יקרה שוב). כך נראה המסך החד-פעמי:
ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן או Chromebook.
אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות ושהפרויקט כבר מוגדר למזהה הפרויקט שלכם.
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהאימות בוצע:
gcloud auth list
פלט הפקודה
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם היא לא נמצאת שם, תוכלו להגדיר אותה באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
5. יצירת פרויקט ב-Maven
אחרי ההשקה של Cloud Shell, נתחיל ביצירת פרויקט Maven באמצעות Java SDK ל-Apache Beam.
Apache Beam הוא מודל תכנות בקוד פתוח לצינורות נתונים. את צינורות עיבוד הנתונים האלה מגדירים באמצעות תוכנית Apache Beam, ויכולים לבחור מנהל התקנה כמו Dataflow, שיפעיל את צינור עיבוד הנתונים שלכם.
מריצים את הפקודה mvn archetype:generate
במעטפת באופן הבא:
mvn archetype:generate \
-DarchetypeGroupId=org.apache.beam \
-DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
-DarchetypeVersion=2.46.0 \
-DgroupId=org.example \
-DartifactId=first-dataflow \
-Dversion="0.1" \
-Dpackage=org.apache.beam.examples \
-DinteractiveMode=false
אחרי הרצת הפקודה, אמורה להופיע ספרייה חדשה בשם first-dataflow
בספרייה הנוכחית. first-dataflow
מכיל פרויקט Maven שכולל את Cloud Dataflow SDK ל-Java וצינורות עיבוד נתונים לדוגמה.
6. הפעלת צינור עיבוד טקסט ב-Cloud Dataflow
בתור התחלה, שומרים את מזהה הפרויקט ואת שמות הקטגוריות של Cloud Storage בתור משתני סביבה. אפשר לעשות זאת ב-Cloud Shell. חשוב להחליף את <your_project_id>
במזהה הפרויקט שלכם.
export PROJECT_ID=<your_project_id>
עכשיו נעשה את אותו הדבר לגבי הקטגוריה של Cloud Storage. חשוב לזכור, כדי להחליף את <your_bucket_name>
בשם הייחודי שבו השתמשתם כדי ליצור את הקטגוריה בשלב קודם.
export BUCKET_NAME=<your_bucket_name>
שינוי לספרייה first-dataflow/
.
cd first-dataflow
אנחנו נריץ צינור עיבוד נתונים שנקרא WordCount, שקורא טקסט, יוצר אסימונים בין שורות הטקסט למילים נפרדות ומבצע ספירת שכיחות לכל אחת מהמילים האלה. קודם כל נריץ את צינור עיבוד הנתונים, ובזמן שהוא פועל, נבדוק מה קורה בכל שלב.
מפעילים את הפקודה mvn compile exec:java
במעטפת או בחלון הטרמינל כדי להפעיל את צינור עיבוד הנתונים. בארגומנטים --project, --stagingLocation,
ו---output
, הפקודה הבאה מפנה למשתני הסביבה שהגדרתם קודם בשלב הזה.
mvn compile exec:java \
-Pdataflow-runner compile exec:java \
-Dexec.mainClass=org.apache.beam.examples.WordCount \
-Dexec.args="--project=${PROJECT_ID} \
--stagingLocation=gs://${BUCKET_NAME}/staging/ \
--output=gs://${BUCKET_NAME}/output \
--runner=DataflowRunner \
--region=us-central1 \
--gcpTempLocation=gs://${BUCKET_NAME}/temp"
בזמן שהמשימה פועלת, צריך לחפש את המשרה ברשימת המשרות.
פותחים את ממשק המשתמש של Cloud Dataflow Web במסוף Google Cloud Platform. אתם אמורים לראות את המשימה בספירת המילים עם הסטטוס פועל:
עכשיו נסתכל על הפרמטרים של צינור עיבוד הנתונים. כדי להתחיל, לוחצים על שם המשרה:
כשבוחרים משימה, אפשר לראות את תרשים הביצוע. תרשים הביצוע של צינור עיבוד נתונים מייצג כל טרנספורמציה בצינור עיבוד הנתונים כתיבה שמכילה את שם הטרנספורמציה ומידע על הסטטוס שלה. אפשר ללחוץ על סמל ה-Carat בפינה השמאלית העליונה של כל שלב כדי לראות פרטים נוספים:
בואו נראה איך צינור עיבוד הנתונים מבצע טרנספורמציה של הנתונים בכל שלב:
- קריאה: בשלב הזה, צינור עיבוד הנתונים קורא ממקור קלט. במקרה הזה, מדובר בקובץ טקסט מ-Cloud Storage עם כל הטקסט של המחזה של שייקספיר קינג ליר. צינור עיבוד הנתונים שלנו קורא את הקובץ שורה אחרי שורה ומפיק כל פלט מסוג
PCollection
, כאשר כל שורה בקובץ הטקסט היא רכיב באוסף. - CountWords: השלב
CountWords
כולל שני חלקים. ראשית, היא משתמשת בפונקציה 'Do' מקבילה (ParDo) בשםExtractWords
כדי ליצור אסימונים בין כל שורה למילים נפרדות. הפלט של extractWords הוא מערך נתונים חדש מסוג PCollection שבו כל רכיב הוא מילה. בשלב הבא,Count
, נעשה שימוש בטרנספורמציה שסופקה על ידי Java SDK שמחזירה צמדי מפתח, ערכים שבהם המפתח הוא מילה ייחודית והערך הוא מספר הפעמים שהוא מתרחש. זו השיטה שמטמיעה אתCountWords
. תוכלו גם לבדוק את הקובץ המלא WordCount.java ב-GitHub:
/**
* A PTransform that converts a PCollection containing lines of text into a PCollection of
* formatted word counts.
*
* <p>Concept #3: This is a custom composite transform that bundles two transforms (ParDo and
* Count) as a reusable PTransform subclass. Using composite transforms allows for easy reuse,
* modular testing, and an improved monitoring experience.
*/
public static class CountWords
extends PTransform<PCollection<String>, PCollection<KV<String, Long>>> {
@Override
public PCollection<KV<String, Long>> expand(PCollection<String> lines) {
// Convert lines of text into individual words.
PCollection<String> words = lines.apply(ParDo.of(new ExtractWordsFn()));
// Count the number of times each word occurs.
PCollection<KV<String, Long>> wordCounts = words.apply(Count.perElement());
return wordCounts;
}
}
- MapElements: מפעיל את השדה
FormatAsTextFn
, שמועתק למטה, שמעצב את כל צמד מפתח וצמד ערכים למחרוזת שניתן להדפיס.
/** A SimpleFunction that converts a Word and Count into a printable string. */
public static class FormatAsTextFn extends SimpleFunction<KV<String, Long>, String> {
@Override
public String apply(KV<String, Long> input) {
return input.getKey() + ": " + input.getValue();
}
}
- WriteCounts: בשלב הזה אנחנו כותבים את המחרוזות שניתן להדפיס בתוך קובצי טקסט מפוצלים.
נבחן את הפלט שנוצר מצינור עיבוד הנתונים בעוד מספר דקות.
עכשיו מעיינים בדף פרטי המשרה שמופיע משמאל לתרשים, שכולל פרמטרים של צינור עיבוד נתונים שכללנו בפקודה mvn compile exec:java
.
אפשר גם לראות את האפשרות מוניים מותאמים אישית לצינור עיבוד הנתונים. במקרה הזה תוכלו לראות כמה שורות ריקות נמצאו עד עכשיו במהלך ההפעלה. ניתן להוסיף מונים חדשים לצינור עיבוד הנתונים כדי לעקוב אחר מדדים ספציפיים לאפליקציה.
אפשר ללחוץ על סמל היומנים בחלק התחתון של המסוף כדי לראות את הודעות השגיאה הספציפיות.
כברירת מחדל, החלונית תציג הודעות של 'יומן משרות' שמדווחות על הסטטוס של המשימה בכללותה. אתם יכולים להשתמש בבורר 'רמת חומרה מינימלית' כדי לסנן את ההתקדמות של המשימה והודעות הסטטוס.
בחירה של שלב בצינור עיבוד נתונים בתרשים משנה את התצוגה ליומנים שנוצרו על ידי הקוד שלך ולקוד שנוצר שפועל בשלב צינור עיבוד הנתונים.
כדי לחזור ליומני המשימות, מבטלים את הבחירה בשלב באמצעות לחיצה מחוץ לתרשים או באמצעות הלחצן 'סגירה' בחלונית הצדדית השמאלית.
אפשר ללחוץ על הלחצן Worker Logs (יומני עבודה) בכרטיסיית היומנים כדי לצפות ביומני עובדים עבור המכונות של Compute Engine שמפעילות את צינור עיבוד הנתונים שלכם. יומני Worker מורכבים משורות יומן שנוצרו על ידי הקוד שלכם, ומהקוד שנוצר ב-Dataflow שמפעיל אותו.
אם אתם מנסים לנפות באגים לגבי כשל בצינור עיבוד הנתונים, לעיתים קרובות יהיה רישום נוסף ביומני העובדים כדי לפתור את הבעיה. חשוב לזכור שהיומנים האלה נצברים מכל העובדים, ואפשר לסנן אותם ולחפש אותם.
ממשק המעקב של Dataflow מציג רק את הודעות היומן האחרונות. כדי להציג את כל היומנים, לוחצים על הקישור Google Cloud Observability (ניראות) בצד שמאל של חלונית היומנים.
לפניכם סיכום של סוגי היומנים השונים הזמינים לצפייה בדף Monitoring←Logs:
- יומני job-message מכילים הודעות ברמת המשימה שרכיבים שונים של Dataflow יוצרים. לדוגמה: הגדרות ההתאמה לעומס (autoscaling), מתי עובדים מתחילים או מכבים, התקדמות בשלב המשימה ושגיאות בעבודה. גם שגיאות ברמת העובד שנובעות מקריסת קוד המשתמש ומופיעות ביומני worker מופצות גם ביומני job-message.
- יומני worker נוצרים על ידי עובדי Dataflow. העובדים מבצעים את רוב העבודה בצינור עיבוד הנתונים (לדוגמה, מחילים את ה-ParDos על הנתונים). יומני Worker מכילים הודעות שנרשמו ביומן על ידי הקוד ו-Dataflow.
- יומני worker-startup נמצאים ברוב המשימות ב-Dataflow ויכולים לתעד הודעות שקשורות לתהליך ההפעלה. תהליך ההפעלה כולל הורדה של צנצנות משימה מ-Cloud Storage, ואז הפעלת העובדים. אם יש בעיה בהתחלת העבודה, כדאי לחפש את היומנים האלה.
- יומני shuffler מכילים הודעות מעובדים שמאחדים את התוצאות של פעולות מקבילות של צינור עיבוד נתונים.
- היומנים של docker ו-kubelet מכילים הודעות שקשורות לטכנולוגיות הציבוריות האלה, שמשמשות לעובדי Dataflow.
בשלב הבא נבדוק שהמשימה הצליחה.
7. בדיקה שביצעת את העבודה
פותחים את ממשק המשתמש של Cloud Dataflow Web במסוף Google Cloud Platform.
המשימה בספירת המילים אמורה להופיע בהתחלה עם הסטטוס פועלת, ואז הסטטוס בוצע בהצלחה:
המשימה תימשך בין 3 ל-4 דקות.
זוכרים כשהרצתם את צינור עיבוד הנתונים וציינו קטגוריית פלט? בואו נסתכל על התוצאה (כי לא רוצים לראות כמה פעמים התרחשה כל מילה בקינג ליר?!). חוזרים לדף Cloud Storage Browser במסוף Google Cloud Platform. בקטגוריה שלכם אמורים לראות קובצי הפלט וקובצי ה-Staging שהמשימה יצרה:
8. השבתת המשאבים
אתם יכולים להשבית את המשאבים ממסוף Google Cloud Platform.
פותחים את דפדפן Cloud Storage במסוף Google Cloud Platform.
מסמנים את התיבה ליד הקטגוריה שיצרתם ולוחצים על DELETE כדי למחוק באופן סופי את הקטגוריה ואת התוכן שלה.
9. מעולה!
למדתם איך ליצור פרויקט Maven באמצעות Cloud Dataflow SDK, להריץ צינור עיבוד נתונים לדוגמה באמצעות מסוף Google Cloud Platform ולמחוק את הקטגוריה המשויכת של Cloud Storage ואת התוכן שלה.
מידע נוסף
- מסמכי תיעוד בנושא Dataflow: https://cloud.google.com/dataflow/docs/
רישיון
העבודה הזו בשימוש ברישיון Creative Commons Attribution 3.0 גנרי ורישיון Apache 2.0.