מחבר Cloud Storage

מחבר Cloud Storage – ספריית Java בקוד פתוח – מאפשר להריץ משימות של Apache Hadoop או של Apache Spark ישירות על נתונים ב-Cloud Storage.

היתרונות של מחבר Cloud Storage

  • גישה ישירה לנתונים: אפשר לאחסן את הנתונים ב-Cloud Storage ולגשת אליהם ישירות. לא צריך להעביר אותו קודם ל-HDFS.
  • תאימות ל-HDFS: אפשר לגשת לנתונים ב-Cloud Storage באמצעות הקידומת gs:// במקום hdfs://.
  • יכולת פעולה הדדית: אחסון נתונים ב-Cloud Storage מאפשר יכולת פעולה הדדית חלקה בין Spark,‏ Hadoop ושירותי Google.
  • נגישות לנתונים: כשמשביתים אשכול Hadoop, בניגוד ל-HDFS, ממשיכים לקבל גישה לנתונים ב-Cloud Storage.
  • זמינות גבוהה של נתונים: הנתונים שמאוחסנים ב-Cloud Storage זמינים מאוד ומשוכפלים באופן גלובלי בלי לפגוע בביצועים.
  • אין תקורה של ניהול אחסון: בניגוד ל-HDFS, ‏ Cloud Storage לא דורש תחזוקה שוטפת, כמו בדיקת מערכת הקבצים, או שדרוג או חזרה לגרסה קודמת של מערכת הקבצים.
  • הפעלה מהירה: ב-HDFS, אי אפשר להפעיל משימת MapReduce עד ש-NameNode יוצא ממצב בטוח. התהליך הזה יכול להימשך כמה שניות או כמה דקות, בהתאם לגודל ולמצב של הנתונים. עם Cloud Storage, אתם יכולים להתחיל את העבודה ברגע שצמתי המשימות מתחילים לפעול, וכך לחסוך בעלויות לאורך זמן.

הגדרת מחבר באשכולות Dataproc

מחבר Cloud Storage מותקן כברירת מחדל בכל הצמתים של אשכול Dataproc בספרייה /usr/local/share/google/dataproc/lib/. בקטעי המשנה הבאים מתוארים השלבים להשלמת הגדרת מחבר באשכולות Dataproc.

חשבון שירות של מכונה וירטואלית

כשמריצים את המחבר בצמתים של אשכול Dataproc ובמכונות וירטואליות אחרות של Compute Engine, המאפיין google.cloud.auth.service.account.enable מוגדר כ-false כברירת מחדל. המשמעות היא שלא צריך להגדיר את פרטי הכניסה של חשבון השירות של המכונה הווירטואלית עבור המחבר – פרטי הכניסה של חשבון השירות של המכונה הווירטואלית מסופקים על ידי שרת המטא-נתונים של המכונה הווירטואלית.

לחשבון השירות של מכונת ה-VM ב-Dataproc צריכה להיות הרשאה לגשת לקטגוריה שלכם ב-Cloud Storage.

אם אתם משתמשים בחשבון שירות בהתאמה אישית עם 2.2+ Spark job cluster: אם אתם בוחרים חשבון שירות בהתאמה אישית כשאתם יוצרים גרסת תמונה של Dataproc 2.2+ cluster שאתם שולחים אליו משימות Spark, ואם משימות Spark קוראות מ-Cloud Storage או כותבות ל-Cloud Storage, כדי למנוע בעיות הרשאה שעלולות לגרום לכשלים במשימות, צריך להוסיף את ההגדרה הבאה (מודגשת) לקוד של יצירת סשן Spark:

spark = SparkSession.builder \
.appName(appName) \
.config("fs.gs.auth.type", "SERVICE_ACCOUNT_JSON_KEYFILE") \
.config("fs.gs.auth.service.account.json.keyfile", "path/to/your/keyfile.json") \
.getOrCreate()

כדי לוודא שההרשאות מוגדרות בצורה נכונה, צריך לבדוק שלחשבון השירות המותאם אישית יש את ההרשאות storage.objects.get ו-storage.objects.create:

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

גרסאות מחברים שנבחרו על ידי המשתמש

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

  • יוצרים אשכול עם האפשרות --metadata=GCS_CONNECTOR_VERSION=x.y.z שמעדכנת את המחבר שבו משתמשות אפליקציות שפועלות באשכול לגרסת המחבר שצוינה.
  • צריך לכלול את מחלקות המחברים ואת התלויות של המחברים בגרסה שבה אתם משתמשים בקובץ ה-JAR של האפליקציה, ולהעביר אותן לשם. העברה נדרשת כדי למנוע התנגשות בין גרסת המחבר שפרסתם לבין גרסת המחבר שמוגדרת כברירת מחדל ומופיעה באשכול Dataproc. אפשר גם לעיין בדוגמה להעברה של יחסי תלות ב-Maven.

הגדרת מחבר באשכולות שאינם Dataproc

כדי להגדיר את המחבר של Cloud Storage באשכול שאינו Dataproc, כמו אשכול Apache Hadoop או Spark שמשמש להעברת נתונים מקומיים של HDFS ל-Cloud Storage, אפשר לבצע את השלבים הבאים.

  1. מורידים את המחבר.

  2. מתקינים את המחבר.

    פועלים לפי ההוראות של GitHub כדי להתקין, להגדיר ולבדוק את המחבר של Cloud Storage.

שימוש במחבר

אפשר להשתמש במחבר כדי לגשת לנתונים ב-Cloud Storage בדרכים הבאות:

שימוש ב-Java

כדי להשתמש במחבר Cloud Storage, צריך Java 8.

הקטע הבא הוא דוגמה לניהול תלות ב-Maven POM עבור מחבר Cloud Storage. מידע נוסף זמין במאמר בנושא ניהול יחסי תלות.

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
</dependency>

לגרסה מוצללת:

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
    <classifier>shaded</classifier>
</dependency>

תמיכה במחברים

המחבר של Cloud Storage נתמך על ידי Google Cloud לשימוש עם מוצריGoogle Cloud ותרחישי שימוש. כשמשתמשים בו עם Dataproc, הוא נתמך באותה רמה כמו Dataproc. מידע נוסף זמין במאמר איך מקבלים תמיכה.

התחברות ל-Cloud Storage באמצעות gRPC

כברירת מחדל, המחבר של Cloud Storage ב-Dataproc משתמש ב-API בפורמט JSON של Cloud Storage. בקטע הזה מוסבר איך להפעיל את המחבר של Cloud Storage כדי להשתמש ב-gRPC.

שיקולי שימוש

השימוש במחבר Cloud Storage עם gRPC כולל את ההיבטים הבאים:

  • מיקום אזורי של קטגוריה: פרוטוקול gRPC יכול לשפר את זמן האחזור של קריאה רק כשמכונות וירטואליות של Compute Engine וקטגוריות של Cloud Storage נמצאות באותו אזור של Compute Engine.
  • משימות שדורשות קריאה אינטנסיבית: ‏gRPC יכול לשפר את זמן האחזור של קריאות ארוכות, ויכול לעזור בעומסי עבודה שדורשים קריאה אינטנסיבית. לא מומלץ להשתמש בשיטה הזו באפליקציות שיוצרות ערוץ gRPC, מריצות חישוב קצר ואז סוגרות את הערוץ.
  • בקשות לא מאומתות: פרוטוקול gRPC לא תומך בבקשות לא מאומתות.

דרישות

הדרישות הבאות חלות כשמשתמשים ב-gRPC עם מחבר Cloud Storage:

  • רשת ה-VPC של אשכול Dataproc צריכה לתמוך בקישוריות ישירה. כלומר, המסלולים והכללים של חומת האש ברשת צריכים לאפשר לתעבורת נתונים יוצאת להגיע אל 34.126.0.0/18 ו-2001:4860:8040::/42.

  • כשיוצרים אשכול Dataproc, צריך להשתמש בגרסה 2.2.23 ואילך של מחבר Cloud Storage עם גרסת אימג' 2.1.56+, או בגרסה v3.0.0 ואילך של מחבר Cloud Storage עם גרסת אימג' 2.2.0 ואילך. גרסת מחבר Cloud Storage שמותקנת בכל גרסת אימג' של Dataproc מפורטת בדפים של גרסאות האימג' של Dataproc.

    • אם אתם יוצרים ומשתמשים באשכול וירטואלי של Dataproc ב-GKE לבקשות gRPC Cloud Storage, מומלץ להשתמש בגרסה GKE 1.28.5-gke.1199000 עם gke-metadata-server 0.4.285. השילוב הזה תומך בקישוריות ישירה.
  • אתם או האדמין הארגוני שלכם צריכים להקצות תפקידים בניהול זהויות והרשאות גישה (IAM) שכוללים את ההרשאות שנדרשות כדי להגדיר את המחבר של Cloud Storage ולשלוח אליו בקשות gRPC. התפקידים האלה יכולים לכלול את התפקידים הבאים:

הפעלת gRPC במחבר Cloud Storage

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

הפעלת אשכול

כדי להפעיל gRPC במחבר Cloud Storage ברמת האשכול, צריך להגדיר את המאפיין core:fs.gs.client.type=STORAGE_CLIENT כשיוצרים אשכול Dataproc. אחרי שמפעילים את gRPC ברמת האשכול, בקשות קריאה של Cloud Storage Connector שנשלחות על ידי משימות שפועלות באשכול משתמשות ב-gRPC.

דוגמה ל-CLI של gcloud:

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --properties=core:fs.gs.client.type=STORAGE_CLIENT

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

  • CLUSTER_NAME: מציינים שם לאשכול.
  • PROJECT_NAME: מזהה הפרויקט שבו נמצא האשכול. מזהי הפרויקטים מופיעים בקטע Project info במרכז הבקרה של מסוף Google Cloud .
  • REGION: מציינים אזור של Compute Engine שבו ימוקם האשכול.

הפעלת משרה

כדי להפעיל את gRPC במחבר Cloud Storage למשימה ספציפית, צריך לכלול את --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT כששולחים משימה.

דוגמה: הרצת משימה באשכול קיים שמשתמש ב-gRPC כדי לקרוא מ-Cloud Storage.

  1. יוצרים סקריפט מקומי של /tmp/line-count.py PySpark שמשתמש ב-gRPC כדי לקרוא קובץ טקסט ב-Cloud Storage ולהציג את מספר השורות בקובץ.

    cat <<EOF >"/tmp/line-count.py"
    #!/usr/bin/python
    import sys
    from pyspark.sql import SparkSession
    path = sys.argv[1]
    spark = SparkSession.builder.getOrCreate()
    rdd = spark.read.text(path)
    lines_counter = rdd.count()
    print("There are {} lines in file: {}".format(lines_counter,path))
    EOF
    
  2. יוצרים קובץ טקסט מקומי /tmp/line-count-sample.txt.

    cat <<EOF >"/tmp/line-count-sample.txt"
    Line 1
    Line 2
    line 3
    EOF
    
  3. מעלים את הקבצים המקומיים /tmp/line-count.py ו-/tmp/line-count-sample.txt לקטגוריה ב-Cloud Storage.

    gcloud storage cp /tmp/line-count* gs://BUCKET
    
  4. מריצים את משימת line-count.py באשכול. מגדירים את --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT כדי להפעיל את gRPC לבקשות קריאה של מחבר Cloud Storage.

    gcloud dataproc jobs submit pyspark gs://BUCKET/line-count.py \
    --cluster=CLUSTER_NAME \
    --project=PROJECT_ID  \
    --region=REGION \
    --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT \
    -- gs://BUCKET/line-count-sample.txt
    

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

    • CLUSTER_NAME: השם של אשכול קיים.
    • PROJECT_NAME: מזהה הפרויקט. מזהי הפרויקטים מופיעים בקטע Project info בלוח הבקרה של מסוף Google Cloud .
    • REGION: האזור ב-Compute Engine שבו נמצא האשכול.
    • BUCKET: הקטגוריה שלכם ב-Cloud Storage.

יצירת מדדים בצד הלקוח של gRPC

אתם יכולים להגדיר את המחבר של Cloud Storage כך שיפיק מדדים שקשורים ל-gRPC ב-Cloud Monitoring. המדדים שקשורים ל-gRPC יכולים לעזור לכם:

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

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

משאבים