ממשק המעקב של Dataflow מספק ייצוג גרפי של כל משימה: תרשים המשימה. גרף המשימות כולל גם סיכום של המשימה, יומן משימות ומידע על כל שלב בצינור.
כדי לראות את גרף העבודה של משימה:
במסוף Google Cloud , נכנסים לדף Dataflow > Jobs.
בוחרים משרה.
לוחצים על הכרטיסייה תרשים משימות.
כברירת מחדל, בדף של תרשים העבודה מוצגת תצוגת התרשים. כדי לראות את גרף העבודה כטבלה, בJob steps view, בוחרים באפשרות Table view. תצוגת הטבלה מכילה את אותו מידע בפורמט שונה. התצוגה של הטבלה שימושית בתרחישים הבאים:
- למשימה יש שלבים רבים, ולכן קשה לנווט בתרשים המשימה.
- אתם רוצים למיין את שלבי העבודה לפי מאפיין ספציפי. לדוגמה, אפשר למיין את הטבלה לפי זמן בפועל כדי לזהות שלבים איטיים.
תצוגת תרשים
בתרשים של העבודה, כל טרנספורמציה בצינור מוצגת כתיבה. בתמונה הבאה מוצג גרף של עבודה עם שלוש טרנספורמציות: Read PubSub Events, 5m Window ו-Write File(s).
כל תיבה מכילה את הפרטים הבאים:
סטטוס; אחד מהערכים הבאים:
- פועל: השלב פועל
- בתור: השלב בעבודת FlexRS נמצא בתור
- הושלם: השלב הסתיים בהצלחה
- Stopped: השלב הופסק כי העבודה הופסקה
- לא ידוע: השלב נכשל ולא דיווח על הסטטוס
- נכשל: השלב לא הושלם
מספר השלבים בעבודות שבהם מבוצע השלב הזה
אם שלב מייצג טרנספורמציה מורכבת, אפשר להרחיב את השלב כדי לראות את טרנספורמציות המשנה. כדי להרחיב את השלב, לוחצים על החץ הרחבת הצומת.
שינוי שמות
יש כמה דרכים שונות להשיג את שם הטרנספורמציה ב-Dataflow שמוצג בתרשים של משימת המעקב. שמות של טרנספורמציות משמשים במקומות שגלויים לכולם, כולל ממשק המעקב של Dataflow, קובצי יומן וכלי ניפוי באגים. אל תשתמשו בשמות של טרנספורמציות שכוללים פרטים אישיים מזהים (PII), כמו שמות משתמשים או שמות של ארגונים.
Java
- אפשר להשתמש בשם שאתם מקצים ל-Dataflow כשמחילים את הטרנספורמציה. הארגומנט הראשון שמעבירים לשיטה
applyהוא שם הטרנספורמציה. - מערכת Dataflow יכולה להסיק את שם הטרנספורמציה, או משם המחלקה, אם יוצרים טרנספורמציה בהתאמה אישית, או מהשם של אובייקט הפונקציה
DoFn, אם משתמשים בטרנספורמציה מרכזית כמוParDo.
Python
- אפשר להשתמש בשם שאתם מקצים ל-Dataflow כשמחילים את הטרנספורמציה. אפשר להגדיר את שם הטרנספורמציה על ידי ציון הארגומנט
labelשל הטרנספורמציה. - מערכת Dataflow יכולה להסיק את שם הטרנספורמציה, או משם המחלקה, אם יוצרים טרנספורמציה בהתאמה אישית, או מהשם של אובייקט הפונקציה
DoFn, אם משתמשים בטרנספורמציה מרכזית כמוParDo.
Go
- אפשר להשתמש בשם שאתם מקצים ל-Dataflow כשמחילים את הטרנספורמציה. אפשר להגדיר את שם הטרנספורמציה על ידי ציון
Scope. - מערכת Dataflow יכולה להסיק את שם הטרנספורמציה, או משם המבנה אם משתמשים ב-
DoFnמבני, או משם הפונקציה אם משתמשים ב-DoFnפונקציונלי.
הצגת פרטי השלב
כשלוחצים על שלב בתרשים המשימה, בחלונית Step Info מוצגים פרטים נוספים על השלב. מידע נוסף זמין במאמר מידע על שלבי עבודה.
צווארי בקבוק
אם Dataflow מזהה צוואר בקבוק, בתרשים של העבודה מופיע סמל התראה בשלבים המושפעים. כדי לראות את הגורם לצוואר הבקבוק, לוחצים על השלב כדי לפתוח את החלונית 'פרטי השלב'. מידע נוסף זמין במאמר פתרון בעיות של צווארי בקבוק.
דוגמאות לתרשימי משימות
בקטע הזה מוצג קוד לדוגמה של צינורות וגרפים של משימות שמתאימים לקוד.
תרשים בסיסי של משימה
קוד צינור עיבוד הנתונים:
Java// Read the lines of the input text. p.apply("ReadLines", TextIO.read().from(options.getInputFile())) // Count the words. .apply(new CountWords()) // Write the formatted word counts to output. .apply("WriteCounts", TextIO.write().to(options.getOutput())); Python( pipeline # Read the lines of the input text. | 'ReadLines' >> beam.io.ReadFromText(args.input_file) # Count the words. | CountWords() # Write the formatted word counts to output. | 'WriteCounts' >> beam.io.WriteToText(args.output_path)) Go// Create the pipeline. p := beam.NewPipeline() s := p.Root() // Read the lines of the input text. lines := textio.Read(s, *input) // Count the words. counted := beam.ParDo(s, CountWords, lines) // Write the formatted word counts to output. textio.Write(s, *output, formatted) |
תרשים המשימה:
|
תרשים של משימות עם טרנספורמציות מורכבות
טרנספורמציות מורכבות הן טרנספורמציות שמכילות כמה טרנספורמציות משנה מקוננות. בתרשים העבודות, אפשר להרחיב טרנספורמציות מורכבות. כדי להרחיב את הטרנספורמציה ולהציג את טרנספורמציות המשנה, לוחצים על החץ.
קוד צינור עיבוד הנתונים:
Java// The CountWords Composite Transform // inside the WordCount pipeline. public static class CountWords extends PTransform<PCollection<String>, PCollection<String>> { @Override public PCollection<String> 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; } } Python# The CountWords Composite Transform inside the WordCount pipeline. @beam.ptransform_fn def CountWords(pcoll): return ( pcoll # Convert lines of text into individual words. | 'ExtractWords' >> beam.ParDo(ExtractWordsFn()) # Count the number of times each word occurs. | beam.combiners.Count.PerElement() # Format each word and count into a printable string. | 'FormatCounts' >> beam.ParDo(FormatCountsFn())) Go// The CountWords Composite Transform inside the WordCount pipeline. func CountWords(s beam.Scope, lines beam.PCollection) beam.PCollection { s = s.Scope("CountWords") // Convert lines of text into individual words. col := beam.ParDo(s, &extractFn{SmallWordLength: *smallWordLength}, lines) // Count the number of times each word occurs. return stats.Count(s, col) } |
תרשים המשימה:
|
בקוד של צינור הנתונים, אפשר להשתמש בקוד הבא כדי להפעיל את הטרנספורמציה המורכבת:
result = transform.apply(input);
כשמפעילים טרנספורמציות מורכבות באופן הזה, הקינון הצפוי מושמט והן עשויות להופיע בממשק המעקב של Dataflow במצב מורחב. יכול להיות שצינור עיבוד הנתונים יפיק גם אזהרות או שגיאות לגבי שמות ייחודיים ויציבים בזמן ההפעלה של צינור עיבוד הנתונים.
כדי להימנע מהבעיות האלה, צריך להפעיל את ההמרות באמצעות הפורמט המומלץ:
result = input.apply(transform);
המאמרים הבאים
- הצגת מידע מפורט על שלבי המשימה
- צפייה בשלבי המשימה בכרטיסייה פרטי ההפעלה
- פתרון בעיות בצינור עיבוד הנתונים