Dataflow הוא מודל תכנות מאוחד ושירות מנוהל לפיתוח ולביצוע של מגוון רחב של תבניות לעיבוד נתונים, כולל ETL, חישוב אצווה וחישוב רציף. מכיוון ש-Dataflow הוא שירות מנוהל, הוא יכול להקצות משאבים על פי דרישה כדי לצמצם את זמן האחזור תוך שמירה על יעילות גבוהה.
מודל Dataflow משלב עיבוד של אצווה ושידור, כדי שהמפתחים לא יצטרכו לסתור את ההתאמה בין נכונות, עלות וזמן עיבוד. בשיעור Lab זה תלמדו איך להריץ צינור זרימת נתונים שסופר את המופע של מילים ייחודיות בקובץ טקסט.
המדריך הזה מותאם מ-https://cloud.google.com/dataflow/docs/quickstarts/quickstart-JavaScript-maven
מה תלמדו
- איך יוצרים פרויקט Maven באמצעות ה-SDK של Cloud Dataflow
- הפעלת צינור עיבוד נתונים לדוגמה באמצעות Google Cloud Platform Console
- איך מוחקים את הקטגוריה המשויכת ל-Cloud Storage ואת התוכן שלה?
מה צריך?
איך תשתמשו במדריך הזה?
איזה דירוג מתאים לדעתך לחוויית השימוש בשירותי Google Cloud Platform?
הגדרת סביבה בקצב עצמי
אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:
חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם הקודם כבר תפוס, והוא לא יעבוד בשבילך.) נתייחס אליו מאוחר יותר ב-codelab הזה בתור PROJECT_ID
.
לאחר מכן, עליך להפעיל חיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
התהליך של קוד Lab זה לא אמור לעלות יותר מדולר אחד, אבל יכול להיות שתצטרכו לשלם על משאבים נוספים או להשאיר אותו פעיל (עיינו בקטע "cleanup" בסוף המסמך).
משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300 $.
הפעלת ממשקי API
לוחצים על סמל התפריט בפינה הימנית העליונה של המסך.
בוחרים באפשרות API Manager מהתפריט הנפתח.
מחפשים את &"Google Compute Engine" בתיבת החיפוש. לוחצים על "Google Compute Engine API" ברשימת התוצאות שמופיעה.
בדף Google Compute Engine לוחצים על הפעלה
לאחר הפעלת האפשרות, לוחצים על החץ כדי לחזור אחורה.
עכשיו צריך לחפש את ממשקי ה-API הבאים ולהפעיל אותם גם הם:
- ממשק API של Google Dataflow
- Stackdriver Logging API
- Google Cloud Storage
- ממשק API של Google Cloud Storage JSON
- ממשק API של BigQuery
- ממשק API של Google Cloud Pub/Sub
- ממשק API של Google Cloud Datastore
ב-Google Cloud Platform Console, לוחצים על הסמל תפריט בפינה הימנית העליונה של המסך:
גוללים למטה ובוחרים באפשרות Cloud Storage בקטע המשנה Storage:
עכשיו אמור להופיע הדפדפן Cloud Storage, ואם אתם משתמשים בפרויקט שאין לו כרגע קטגוריות ב-Cloud Storage, תופיע תיבת דו-שיח שבה תוכלו ליצור קטגוריה חדשה:
כדי ליצור קטגוריה, לוחצים על הלחצן יצירת קטגוריה:
מזינים שם לקטגוריה שלכם. כפי שצוין בתיבת הדו-שיח, שמות של קטגוריות צריכים להיות ייחודיים בכל האחסון בענן. כך, אם תבחרו שם ברור, כמו "test" , סביר להניח שמישהו אחר כבר יצר קטגוריה עם השם הזה, ושהוא יקבל שגיאה.
יש גם כמה כללים בנוגע לתווים המותרים בשמות של קטגוריות. אם מתחילים ומסיימים את שם הקטגוריה באמצעות אות או מספר, ומשתמשים רק במקפים באמצע, סימן שאין בעיה. אם אתם מנסים להשתמש בתווים מיוחדים, או מנסים או לסיים את שם הקטגוריה שלכם במשהו שאינו אות או מספר, תיבת הדו-שיח תזכיר לכם את הכללים.
מזינים שם ייחודי לקטגוריה ולוחצים על יצירה. אם בוחרים באפשרות שכבר נמצאת בשימוש, תוצג הודעת השגיאה שלמעלה. לאחר שתיצרו בהצלחה קטגוריה, תועברו לקטגוריה החדשה והריקה בדפדפן:
שם הקטגוריה שאתם רואים יהיה שונה כמובן, מפני שהם חייבים להיות ייחודיים בכל הפרויקטים.
הפעלת Google Cloud Shell
במסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
לאחר מכן לוחצים על "Start Cloud Shell":
יחלפו רק כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו:
המכונה הווירטואלית הזו נטענת באמצעות כל כלי הפיתוח הדרושים לך. יש בה ספריית בית בנפח עקבי של 5GB, והיא פועלת ב-Google Cloud, וכך משפרת באופן משמעותי את הביצועים ואת האימות של הרשת. את רוב העבודה שלכם בשיעור ה-Lab הזה (אם לא כולם) אפשר לבצע בדפדפן או ב-Google Chromebook.
לאחר החיבור ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות, ושהפרויקט כבר מוגדר ב-PROJECT_ID.
מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שאתם מאומתים:
gcloud auth list
פלט הפקודה
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם לא, אפשר להגדיר אותה באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
לאחר ההשקה של Cloud Shell, מתחילים ליצור פרויקט Maven שמכיל את ה-Cloud Dataflow SDK ל-Java.
מריצים את פקודת mvn archetype:generate
במעטפת כך:
mvn archetype:generate \
-DarchetypeArtifactId=google-cloud-dataflow-java-archetypes-examples \
-DarchetypeGroupId=com.google.cloud.dataflow \
-DarchetypeVersion=1.9.0 \
-DgroupId=com.example \
-DartifactId=first-dataflow \
-Dversion="0.1" \
-DinteractiveMode=false \
-Dpackage=com.example
אחרי הרצת הפקודה אמורה להופיע ספרייה חדשה בשם first-dataflow
בספרייה הנוכחית. first-dataflow
מכיל פרויקט Maven הכולל את ה-SDK של Cloud Dataflow ל-Java וצינורות לדוגמה.
נתחיל בשמירה של מזהה הפרויקט ושל שמות הקטגוריות שלנו ב-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
אנחנו מפעילים צינור שנקרא WordCounter, שקורא טקסט, ממיר את שורות הטקסט למילים בודדות ומבצע ספירה של התדירות בכל אחת מהמילים האלה. תחילה נפעל בצינור עיבוד הנתונים, ובינתיים נפעל בתהליך.
כדי להפעיל את צינור עיבוד הנתונים, מפעילים את הפקודה mvn compile exec:java
במעטפת או בחלון הטרמינל. בארגומנטים --project, --stagingLocation,
ו---output
, הפקודה הבאה מפנה למשתני הסביבה שהגדרת בשלב קודם.
mvn compile exec:java \
-Dexec.mainClass=com.example.WordCount \
-Dexec.args="--project=${PROJECT_ID} \
--stagingLocation=gs://${BUCKET_NAME}/staging/ \
--output=gs://${BUCKET_NAME}/output \
--runner=BlockingDataflowPipelineRunner"
בזמן העבודה, יש למצוא את המשרה ברשימת המשרות.
פותחים את ממשק המשתמש של Cloud Dataflow בקונסולת Google Cloud Platform. אתם אמורים לראות את המשרה שלכם עם סטטוס סטטוס:
עכשיו נביט בפרמטרים של הצינור. כדי להתחיל, לוחצים על שם המשרה:
כשבוחרים משימה, אפשר להציג את תרשים הביצועים. תרשים ביצוע של צינור עיבוד נתונים מייצג כל טרנספורמציה בצינור בתור תיבה שמכילה את שם הטרנספורמציה וכמה פרטי סטטוס. כדי לראות פרטים נוספים, לחצו על קראט בפינה השמאלית העליונה של כל שלב:
בואו נראה איך צינור עיבוד הנתונים משנה את הנתונים בכל שלב:
- קריאה: בשלב זה, צינור עיבוד הנתונים נקרא ממקור קלט. במקרה הזה, זה קובץ טקסט מ-Cloud Storage עם הטקסט המלא של המשחק שייקספירKing Lear. צינור עיבוד הנתונים שלנו מקריא את השורה בקובץ, עם פלט של כל
PCollection
, כך שכל שורה בקובץ הטקסט היא רכיב באוסף. - מילים: השלב
CountWords
כולל שני חלקים. ראשית, היא משתמשת בפונקציית Parallel המקבילה (ParDo) בשםExtractWords
כדי לשייך כל שורה למילים נפרדות. הפלט של חילוץ Word הוא אוסף חדש שבו כל רכיב הוא מילה. בשלב הבא,Count
, נעשה שימוש בטרנספורמציה שסופקה על ידי Dataflow SDK, שמחזירה זוגות מפתח, ערך שבו המפתח הוא מילה ייחודית והערך הוא מספר הפעמים שהיא מתרחשת. זו השיטה להטמעתCountWords
, ואתם יכולים לבדוק את קובץ WordCount.javascript המלא ב-GitHub:
/**
* A PTransform that converts a PCollection containing lines of text
* into a PCollection of formatted word counts.
*/
public static class CountWords extends PTransform<PCollection<String>,
PCollection<KV<String, Long>>> {
@Override
public PCollection<KV<String, Long>> apply(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.<String>perElement());
return wordCounts;
}
}
- formatAsText: פונקציה שמעצבת כל מפתח, תוך התאמת זוג למחרוזת להדפסה. זהו הטרנספורמציה של
FormatAsText
כדי ליישם זאת:
/** 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
.
תוכלו גם לראות ספירה מותאמת אישית בצינור, שמראה את מספר הקווים הריקים שזוהו במהלך הביצוע. תוכלו להוסיף מונים חדשים לצינור המעקב כדי לעקוב אחר מדדים ספציפיים לאפליקציה.
כדי לראות את הודעות השגיאה הספציפיות, אפשר ללחוץ על סמל היומנים.
אתם יכולים לסנן את ההודעות שמופיעות בכרטיסייה 'יומן משרות' באמצעות התפריט הנפתח 'מידת חוּמרה מינימלית'.
תוכלו להשתמש בלחצן יומני עבודה בכרטיסייה 'יומנים' כדי להציג יומני עובדים של מופעים של Compute Engine שמפעילים את צינור עיבוד הנתונים. יומני עבודה מורכבים משורות יומן שנוצרו על ידי הקוד שלך והקוד שנוצר באמצעות Dataflow.
אם אתם מנסים לנפות באגים הקשורים לצינור עיבוד נתונים, לעיתים קרובות יהיה צורך לבצע רישום נוסף ביומני העבודה כדי לפתור את הבעיה. חשוב לזכור שהיומנים האלה נצברים לכל העובדים, וניתן לסנן ולחפש אותם.
בשלב הבא נבדוק אם העבודה שלך הושלמה בהצלחה.
פותחים את ממשק המשתמש של Cloud Dataflow בקונסולת Google Cloud Platform.
אתם אמורים לראות תחילה את הסטטוס של ספירת המילים בסטטוס פועל ולאחר מכן הוחלפה:
ההפעלה של העבודה תימשך כ-3-4 דקות.
חשוב לזכור מתי הפעלת את צינור עיבוד הנתונים וציינת קטגוריית פלט? בואו נבחן את התוצאה (כי לא רוצים לראות כמה פעמים כל מילה במלך המלך?!). חוזרים לדפדפן Cloud Storage ב-Google Cloud Platform Console. בקטגוריה הזו אמורים לראות את קובצי הפלט ואת קובצי ה-Staging שהעבודה שלכם יצרה:
אפשר לכבות את המשאבים ב-Google Cloud Platform Console.
פותחים את הדפדפן Cloud Storage ב-Google Cloud Platform Console.
מסמנים את תיבת הסימון שליד הקטגוריה שיצרתם.
לוחצים על מחיקה כדי למחוק באופן סופי את הקטגוריה ואת התוכן שלה.
תלמדו איך ליצור פרויקט Maven באמצעות ה-Cloud Dataflow SDK, להריץ צינור לדוגמה באמצעות Google Cloud Platform Console ולמחוק את הקטגוריה המשויכת ל-Cloud Storage ואת התוכן שלה.
למידע נוסף
- מסמכי זרימת נתונים: https://cloud.google.com/dataflow/docs/
רישיון
This work is licensed under a Creative Commons Attribution 3.0 Generic License, and Apache 2.0 license.