קריאה מ-Cloud Storage אל Dataflow

לרוב צריך להטמיע נתונים לא מובְנים או מובְנים למחצה שמאוחסנים ב-Cloud Storage (כמו קובצי טקסט, CSV,‏ JSON או Avro) ולשנות אותם בקנה מידה נרחב לצורך ניתוח במורד הזרם. הטמעת נתונים מ-Cloud Storage ב-Dataflow מאפשרת להריץ צינורות עיבוד נתונים מקבילים ומבוזרים כדי לקרוא ולעבד קבוצות נתונים של קבצים בנפח גבוה, באופן מהימן בעומסי עבודה באצווה ובסטרימינג.

כדי ליצור צינורות עיבוד נתונים בהתאמה אישית, אתם יכולים להשתמש במחברי קלט/פלט של Apache Beam, כמו TextIO או AvroIO, כדי לקרוא קבצים לעיבוד. בתהליכי עבודה נפוצים, אתם יכולים גם להשתמש בתבניות Dataflow ש-Google מספקת כדי לפרוס צינורות עיבוד נתונים מוכנים מראש בלי לכתוב קוד בהתאמה אישית.

הוספת התלות של הפרויקט בספרייה Google Cloud

כדי להשתמש במחבר TextIO או AvroIO עם Cloud Storage, צריך לכלול את התלות הבאה. הספרייה הזו מספקת handler של סכימה לשמות קבצים מסוג "gs://".

Java

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
  <version>${beam.version}</version>
</dependency>

Python

apache-beam[gcp]==VERSION

המשך

import _ "github.com/apache/beam/sdks/v2/go/pkg/beam/io/filesystem/gcs"

למידע נוסף, קראו את המאמר התקנת Apache Beam SDK.

הפעלת gRPC במחבר קלט/פלט של Apache Beam ב-Dataflow

אתם יכולים להתחבר ל-Cloud Storage באמצעות gRPC דרך מחבר הקלט/פלט של Apache Beam ב-Dataflow. gRPC הוא מסגרת קריאה לשירות מרוחק (RPC) בקוד פתוח עם ביצועים גבוהים שפותחה על ידי Google, ואפשר להשתמש בה כדי לקיים אינטראקציה עם Cloud Storage.

כדי לזרז את בקשות הקריאה של משימת Dataflow ל-Cloud Storage, אתם יכולים להפעיל את מחבר הקלט/פלט של Apache Beam ב-Dataflow לשימוש ב-gRPC.

שורת הפקודה

  1. חשוב להשתמש בגרסה 2.55.0 ואילך של Apache Beam SDK.
  2. כדי להריץ משימה ב-Dataflow, משתמשים באפשרות --additional-experiments=use_grpc_for_gcs של צינור עיבוד הנתונים. למידע על האפשרויות השונות של צינורות עיבוד נתונים, ראו דגלים אופציונליים.

Apache Beam SDK

  1. חשוב להשתמש בגרסה 2.55.0 ואילך של Apache Beam SDK.
  2. כדי להריץ משימה ב-Dataflow, משתמשים באפשרות --experiments=use_grpc_for_gcs של צינור עיבוד הנתונים. למידע על האפשרויות השונות של צינורות עיבוד נתונים, ראו אפשרויות בסיסיות.

אתם יכולים להגדיר מחבר קלט/פלט של Apache Beam ב-Dataflow כדי ליצור מדדים שקשורים ל-gRPC ב-Cloud Monitoring. המדדים שקשורים ל-gRPC יכולים לעזור לכם:

  • מעקב אחרי הביצועים של בקשות gRPC ל-Cloud Storage ושיפור שלהם.
  • לפתור בעיות ולנפות באגים.
  • לקבל תובנות לגבי השימוש באפליקציה וההתנהגות שלה.

במאמר שימוש במדדים בצד הלקוח מוסבר איך להגדיר את מחבר הקלט/פלט של Apache Beam ב-Dataflow כדי ליצור מדדים שקשורים ל-gRPC. אם איסוף המדדים לא נחוץ לתרחיש לדוגמה שלכם, אתם יכולים לבטל את ההסכמה לאיסוף המדדים. הוראות מפורטות מופיעות במאמר ביטול ההסכמה לאיסוף מדדים בצד הלקוח.

מקביליות

המחברים TextIO ו-AvroIO תומכים בשתי רמות של מקבילוּת:

  • קבצים נפרדים מקבלים מפתחות בנפרד, כך שכמה עובדים יכולים לקרוא אותם.
  • אם הקבצים לא דחוסים, המחבר יכול לקרוא טווחי משנה של כל קובץ בנפרד, מה שמוביל לרמה גבוהה מאוד של מקביליות. הפיצול הזה אפשרי רק אם כל שורה בקובץ היא רשומה משמעותית. לדוגמה, כברירת מחדל היא לא זמינה לקובצי JSON.

ביצועים

בטבלה הבאה מוצגים מדדי הביצועים לקריאה מ-Cloud Storage. עומסי העבודה הופעלו ב-worker אחד של e2-standard2, באמצעות Apache Beam SDK 2.49.0 ל-Java. הם לא השתמשו ב-Portable Runner.

‫100 מיליון רשומות | 1KB | עמודה אחת תפוקה (בייטים) תפוקה (רכיבים)
קריאה 320 MBps ‫320,000 רכיבים לשנייה

המדדים האלה מבוססים על צינורות עיבוד נתונים פשוטים של אצווה. הם נועדו להשוות בין הביצועים של מחברי קלט/פלט, ולא בהכרח מייצגים צינורות עיבוד נתונים בעולם האמיתי. הביצועים של צינור עיבוד הנתונים ב-Dataflow הם מורכבים, והם פונקציה של סוג ה-VM, הנתונים שעוברים עיבוד, הביצועים של מקורות וכיורים חיצוניים וקוד המשתמש. המדדים מבוססים על הפעלת Java SDK, והם לא מייצגים את מאפייני הביצועים של ערכות SDK בשפות אחרות. מידע נוסף זמין במאמר ביצועי קלט/פלט של Beam.

שיטות מומלצות

  • אל תשתמשו ב-watchForNewFiles עם Cloud Storage. הגישה הזו לא מתאימה לצינורות עיבוד נתונים גדולים בסביבת הייצור, כי המחבר צריך לשמור בזיכרון רשימה של הקבצים שכבר נראו. אי אפשר לרוקן את הרשימה מהזיכרון, מה שמקטין את זיכרון העבודה של ה-workers לאורך זמן. במקום זאת, כדאי להשתמש בהתראות Pub/Sub ל-Cloud Storage. מידע נוסף זמין במאמר דפוסי עיבוד קבצים.

  • אם גם שם הקובץ וגם תוכן הקובץ הם נתונים שימושיים, משתמשים במחלקה FileIO כדי לקרוא את שמות הקבצים. לדוגמה, שם קובץ יכול להכיל מטא-נתונים שמועילים כשמעבדים את הנתונים בקובץ. איך ניגשים לשמות של קבצים? במסמכי התיעוד של FileIO מוצגת דוגמה לתבנית הזו.

דוגמה

בדוגמה הבאה מוסבר איך לקרוא מ-Cloud Storage.

Java

כדי לבצע אימות ב-Dataflow, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.PipelineResult;
import org.apache.beam.sdk.io.TextIO;
import org.apache.beam.sdk.options.Description;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.MapElements;
import org.apache.beam.sdk.values.TypeDescriptors;

public class ReadFromStorage {
  public static Pipeline createPipeline(Options options) {
    var pipeline = Pipeline.create(options);
    pipeline
        // Read from a text file.
        .apply(TextIO.read().from(
            "gs://" + options.getBucket() + "/*.txt"))
        .apply(
            MapElements.into(TypeDescriptors.strings())
                .via(
                    (x -> {
                      System.out.println(x);
                      return x;
                    })));
    return pipeline;
  }
}

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