הפעלת צינור עיבוד טקסט Big Data לעיבוד טקסט ב-Cloud Dataflow

1. סקירה כללית

Cloud-Dataflow.png

מה זה 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. הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת ממשקי ה-API

לוחצים על סמל התפריט בפינה השמאלית העליונה.

2bfc27ef9ba2ec7d.png

בוחרים באפשרות APIs & (ממשקי API &) שירותים > מרכז שליטה בתפריט הנפתח.

5b65523a6cc0afa6.png

בוחרים באפשרות + Enable APIs and Services (הפעלת ממשקי API ושירותים).

81ed72192c0edd96.png

מחפשים את Compute Engine. בתיבת החיפוש. לוחצים על "Compute Engine API" ברשימת התוצאות שמופיעה.

3f201e991c7b4527.png

בדף Google Compute Engine, לוחצים על Enable (הפעלה).

ac121653277fa7bb.png

לאחר ההפעלה, יש ללחוץ על החץ כדי לחזור אחורה.

עכשיו צריך לחפש את ממשקי ה-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, לוחצים על הסמל תפריט בפינה הימנית העליונה של המסך:

2bfc27ef9ba2ec7d.png

גוללים למטה ובוחרים באפשרות Cloud Storage > דפדפן בקטע המשנה אחסון:

2b6c3a2a92b47015.png

עכשיו אמור להופיע דפדפן Cloud Storage, ובהנחה שאתם משתמשים בפרויקט שאין לו כרגע קטגוריות של Cloud Storage, תוצג לכם הזמנה ליצירת קטגוריה חדשה. לוחצים על הלחצן Create bucket כדי ליצור קטגוריה:

a711016d5a99dc37.png

נותנים שם לקטגוריה. כפי שצוין בתיבת הדו-שיח, שמות הקטגוריות צריכים להיות ייחודיים בכל Cloud Storage. לכן אם תבחרו שם ברור כמו "test", סביר להניח שתגלו שמישהו אחר כבר יצר קטגוריה בשם הזה ויקבל שגיאה.

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

3a5458648cfe3358.png

נותנים שם ייחודי לקטגוריה ולוחצים על Create. אם בוחרים משהו שכבר נמצא בשימוש, תוצג הודעת השגיאה שמוצגת למעלה. אחרי שתיצרו קטגוריה, תועברו לקטגוריה החדשה והריקה בדפדפן:

3bda986ae88c4e71.png

שם הקטגוריה שתראו יהיה כמובן שונה, כי הוא חייב להיות ייחודי בכל הפרויקטים.

4. הפעלת Cloud Shell

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RWzVad_4nCwUyfp1RWzVad_4nCwlZUDZ5LtFCZUHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RWzVad_4nCwZlZ5Lt.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (בחלק הנגלל) שמתאר מהו. במקרה כזה, לוחצים על המשך (וזה לא יקרה שוב). כך נראה המסך החד-פעמי:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן או Chromebook.

אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות ושהפרויקט כבר מוגדר למזהה הפרויקט שלכם.

  1. מריצים את הפקודה הבאה ב-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. אתם אמורים לראות את המשימה בספירת המילים עם הסטטוס פועל:

3623be74922e3209.png

עכשיו נסתכל על הפרמטרים של צינור עיבוד הנתונים. כדי להתחיל, לוחצים על שם המשרה:

816d8f59c72797d7.png

כשבוחרים משימה, אפשר לראות את תרשים הביצוע. תרשים הביצוע של צינור עיבוד נתונים מייצג כל טרנספורמציה בצינור עיבוד הנתונים כתיבה שמכילה את שם הטרנספורמציה ומידע על הסטטוס שלה. אפשר ללחוץ על סמל ה-Carat בפינה השמאלית העליונה של כל שלב כדי לראות פרטים נוספים:

80a972dd19a6f1eb.png

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

  • קריאה: בשלב הזה, צינור עיבוד הנתונים קורא ממקור קלט. במקרה הזה, מדובר בקובץ טקסט מ-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.

9723815a1f5bf08b.png

208a7f0d6973acf6.png

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

a2e2800e2c6893f8.png

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

23c64138a1027f8.png

כברירת מחדל, החלונית תציג הודעות של 'יומן משרות' שמדווחות על הסטטוס של המשימה בכללותה. אתם יכולים להשתמש בבורר 'רמת חומרה מינימלית' כדי לסנן את ההתקדמות של המשימה והודעות הסטטוס.

94ba42015fdafbe2.png

בחירה של שלב בצינור עיבוד נתונים בתרשים משנה את התצוגה ליומנים שנוצרו על ידי הקוד שלך ולקוד שנוצר שפועל בשלב צינור עיבוד הנתונים.

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

אפשר ללחוץ על הלחצן Worker Logs (יומני עבודה) בכרטיסיית היומנים כדי לצפות ביומני עובדים עבור המכונות של Compute Engine שמפעילות את צינור עיבוד הנתונים שלכם. יומני Worker מורכבים משורות יומן שנוצרו על ידי הקוד שלכם, ומהקוד שנוצר ב-Dataflow שמפעיל אותו.

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

5a53c244f28d5478.png

ממשק המעקב של Dataflow מציג רק את הודעות היומן האחרונות. כדי להציג את כל היומנים, לוחצים על הקישור Google Cloud Observability (ניראות) בצד שמאל של חלונית היומנים.

2bc704a4d6529b31.png

לפניכם סיכום של סוגי היומנים השונים הזמינים לצפייה בדף 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.

המשימה בספירת המילים אמורה להופיע בהתחלה עם הסטטוס פועלת, ואז הסטטוס בוצע בהצלחה:

4c408162416d03a2.png

המשימה תימשך בין 3 ל-4 דקות.

זוכרים כשהרצתם את צינור עיבוד הנתונים וציינו קטגוריית פלט? בואו נסתכל על התוצאה (כי לא רוצים לראות כמה פעמים התרחשה כל מילה בקינג ליר?!). חוזרים לדף Cloud Storage Browser במסוף Google Cloud Platform. בקטגוריה שלכם אמורים לראות קובצי הפלט וקובצי ה-Staging שהמשימה יצרה:

25a5d3d4b5d0b567.png

8. השבתת המשאבים

אתם יכולים להשבית את המשאבים ממסוף Google Cloud Platform.

פותחים את דפדפן Cloud Storage במסוף Google Cloud Platform.

2b6c3a2a92b47015.png

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

2f7780bdf10b69ba.png

8051ef293a8e5cfe.png

9. מעולה!

למדתם איך ליצור פרויקט Maven באמצעות Cloud Dataflow SDK, להריץ צינור עיבוד נתונים לדוגמה באמצעות מסוף Google Cloud Platform ולמחוק את הקטגוריה המשויכת של Cloud Storage ואת התוכן שלה.

מידע נוסף

רישיון

העבודה הזו בשימוש ברישיון Creative Commons Attribution 3.0 גנרי ורישיון Apache 2.0.