יצירת צינור עיבוד נתונים באמצעות Java

במאמר הזה מוסבר איך להגדיר את Google Cloud הפרויקט, ליצור צינור עיבוד נתונים לדוגמה שנבנה באמצעות Apache Beam SDK for Java, ולהריץ את צינור עיבוד הנתונים לדוגמה בשירות Dataflow. הצינור קורא קובץ טקסט מ-Cloud Storage, סופר את מספר המילים הייחודיות בקובץ ואז כותב את ספירת המילים בחזרה ל-Cloud Storage. בסרטון איך משתמשים ב-WordCount ב-Apache Beam יש מבוא לצינור WordCount.

במדריך הזה נדרש Maven, אבל אפשר גם להמיר את פרויקט הדוגמה מ-Maven ל-Gradle. מידע נוסף זמין במאמר בנושא אופציונלי: המרה מ-Maven ל-Gradle.


לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף 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 Logging,‏ Cloud Storage,‏ Google Cloud Storage JSON,‏ BigQuery,‏ Cloud Pub/Sub,‏ Cloud Datastore ו-Cloud Resource Manager:

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

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

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

    gcloud auth application-default login

    אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (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 Logging,‏ Cloud Storage,‏ Google Cloud Storage JSON,‏ BigQuery,‏ Cloud Pub/Sub,‏ Cloud Datastore ו-Cloud Resource Manager:

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

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

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

    gcloud auth application-default login

    אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (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
    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • מחליפים את PROJECT_ID במזהה הפרויקט.
    • מחליפים את PROJECT_NUMBER במספר הפרויקט. כדי למצוא את מספר הפרויקט, אפשר לעיין במאמר בנושא זיהוי פרויקטים או להשתמש בפקודה gcloud projects describe.
    • מחליפים את SERVICE_ACCOUNT_ROLE בכל אחד מהתפקידים.
  19. יוצרים קטגוריה של Cloud Storage ומגדירים אותה כך:
    • מגדירים את סוג האחסון (storage class) לאפשרות הבאה: S (Standard).
    • מגדירים את מיקום האחסון לאזור הבא: US (ארצות הברית).
    • מחליפים את BUCKET_NAME בשם ייחודי לקטגוריה. שם הקטגוריה לא יכול להכיל מידע רגיש כי מרחב השמות של הקטגוריות זמין וגלוי לכולם.
    gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
  20. מעתיקים את הפרטים הבאים כי צריך אותם בהמשך:
    • שם הקטגוריה של Cloud Storage.
    • מזהה הפרויקט Google Cloud . כדי למצוא את המזהה הזה, אפשר לעיין במאמר בנושא זיהוי פרויקטים.
  21. מורידים ומתקינים את ערכת פיתוח Java‏ (JDK) גרסה 11. ‫(Dataflow ממשיך לתמוך בגרסה 8). מוודאים שמשתנה הסביבה JAVA_HOME מוגדר ומפנה להתקנת ה-JDK.
  22. מורידים ומתקינים את Apache Maven לפי מדריך ההתקנה של Maven למערכת ההפעלה הספציפית שלכם.

קבלת קוד הפייפליין

Apache Beam SDK הוא מודל תכנות מבוסס קוד פתוח לצינורות לעיבוד נתונים. אתם מגדירים את צינורות עיבוד הנתונים האלה באמצעות תוכנית Apache Beam, ויכולים לבחור רץ, כמו Dataflow, כדי להריץ את צינור עיבוד הנתונים.

  1. במעטפת או במסוף, משתמשים ב-Maven Archetype Plugin כדי ליצור במחשב פרויקט Maven שמכיל את הדוגמאות של Apache Beam SDK‏: WordCount
    mvn archetype:generate \
        -DarchetypeGroupId=org.apache.beam \
        -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
        -DarchetypeVersion=2.74.0 \
        -DgroupId=org.example \
        -DartifactId=word-count-beam \
        -Dversion="0.1" \
        -Dpackage=org.apache.beam.examples \
        -DinteractiveMode=false
    

    הפקודה יוצרת ספרייה חדשה בשם word-count-beam בספרייה הנוכחית. הספרייה word-count-beam מכילה קובץ pom.xml פשוט וסדרה של צינורות לדוגמה שסופרים מילים בקובצי טקסט.

  2. ודאו שהספרייה word-count-beam מכילה את הקובץ pom.xml:

    Linux או macOS

    cd word-count-beam/
    ls

    הפלט שיתקבל:

    pom.xml   src

    Windows

    cd word-count-beam/
    dir

    הפלט שיתקבל:

    pom.xml   src
  3. מוודאים שהפרויקט ב-Maven מכיל את צינורות הנתונים לדוגמה:

    Linux או macOS

    ls src/main/java/org/apache/beam/examples/

    הפלט שיתקבל:

    DebuggingWordCount.java   WindowedWordCount.java   common
    MinimalWordCount.java   WordCount.java

    Windows

    dir src/main/java/org/apache/beam/examples/

    הפלט שיתקבל:

    DebuggingWordCount.java   WindowedWordCount.java   common
    MinimalWordCount.java   WordCount.java

למידע מפורט על המושגים של Apache Beam שמופיעים בדוגמאות האלה, אפשר לעיין בדוגמה של Apache Beam WordCount. בהוראות שבקטעים הבאים נעשה שימוש ב- WordCount.java.

הפעלת צינור עיבוד הנתונים באופן מקומי

  • במעטפת או בטרמינל, מריצים את צינור עיבוד הנתונים WordCount באופן מקומי מהספרייה word-count-beam:
    mvn compile exec:java \
        -Dexec.mainClass=org.apache.beam.examples.WordCount \
        -Dexec.args="--output=counts"
    

    קבצי הפלט כוללים את הקידומת counts ונכתבים בספרייה word-count-beam. הם מכילים מילים ייחודיות מטקסט הקלט ואת מספר המקרים שבהם כל מילה מופיעה.

הפעלת צינור העיבוד בשירות Dataflow

  • במעטפת או במסוף, יוצרים ומריצים את צינור עיבוד הנתונים WordCount בשירות Dataflow מהספרייה word-count-beam:
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=org.apache.beam.examples.WordCount \
        -Dexec.args="--project=PROJECT_ID \
        --gcpTempLocation=gs://BUCKET_NAME/temp/ \
        --output=gs://BUCKET_NAME/output \
        --runner=DataflowRunner \
        --region=REGION"
    

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

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • BUCKET_NAME: שם הקטגוריה של Cloud Storage
    • REGION: אזור Dataflow, כמו us-central1

צפייה בתוצאות

  1. נכנסים לדף Jobs ב-Dataflow במסוף Google Cloud .

    כניסה לדף Jobs

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

  2. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

    בדף Buckets מוצגת רשימה של כל קטגוריות האחסון בפרויקט.

  3. לוחצים על קטגוריית האחסון שיצרתם.

    בדף פרטי מאגר מוצגים קובצי הפלט וקובצי הביניים שנוצרו על ידי משימת Dataflow.

הסרת המשאבים

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

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

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

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

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

אם רוצים לשמור את הפרויקט Google Cloud שבו השתמשתם במדריך למתחילים הזה, צריך למחוק את המשאבים הבודדים:

  1. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

  2. לוחצים על תיבת הסימון של הקטגוריה שרוצים למחוק.
  3. כדי למחוק את הקטגוריה, לוחצים על Delete ופועלים לפי ההוראות.
  4. מבטלים את התפקידים שהקציתם לחשבון השירות של Compute Engine שמוגדר כברירת מחדל. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=SERVICE_ACCOUNT_ROLE
  5. אם תרצו, תוכלו לבטל את פרטי הכניסה שיצרתם ולמחוק את הקובץ המקומי של פרטי הכניסה.

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

    gcloud auth revoke

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