מחבר Cloud Storage

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

Lightning Engine משפר את הקישוריות ל-Cloud Storage כדי לייעל את הביצועים של המנוע המקורי שלו. מחבר Cloud Storage המשופר מצמצם את פעולות המטא-נתונים כדי להוזיל עלויות, ומבצע אופטימיזציה של קבצים שמועברים ל-Cloud Storage כדי לשפר את הביצועים והאמינות של עומסי עבודה (workload) ב-Spark. כדי לבקש גישה מוקדמת לתכונה הזו בגרסת הפרה-אלפא, צריך למלא את טופס הגישה המוקדמת.

היתרונות של מחבר 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, אתם יכולים להתחיל את העבודה ברגע שצמתי המשימות מתחילים לפעול, וכך לחסוך בעלויות לאורך זמן.

הגדרת מחבר באשכולות של Managed Service for Apache Spark

מחבר Cloud Storage מותקן כברירת מחדל בכל הצמתים של אשכולות Managed Service for Apache Spark בספרייה /usr/local/share/google/managed-spark/lib/. בקטעי המשנה הבאים מתוארים השלבים להשלמת הגדרת המחבר באשכולות של Managed Service for Apache Spark.

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

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

לחשבון השירות של מכונת ה-VM ב-Managed Service for Apache Spark צריכה להיות הרשאה לגשת לקטגוריה של Cloud Storage.

אם אתם משתמשים בחשבון שירות בהתאמה אישית עם 2.2+ Spark job cluster: אם אתם בוחרים חשבון שירות בהתאמה אישית כשאתם יוצרים Managed Service for Apache Spark 2.2+ image version 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 שמשמשות בתמונות העדכניות ביותר שהותקנו באשכולות Managed Service for Apache Spark מפורטות בדפי גרסאות התמונות. אם האפליקציה שלכם מסתמכת על גרסה של מחבר שאינה ברירת המחדל ושהופעלה באשכול שלכם, אתם יכולים לבצע אחת מהפעולות הבאות כדי להשתמש בגרסה של המחבר שבחרתם:

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

הגדרת מחבר באשכולות שאינם Managed Service for Apache Spark

כדי להגדיר את המחבר של Cloud Storage באשכול שאינו שירות מנוהל של Apache Spark, כמו אשכול 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 ותרחישי שימוש. כשמשתמשים בו עם Managed Service for Apache Spark, הוא נתמך באותה רמה כמו Managed Service for Apache Spark. מידע נוסף זמין במאמר איך מקבלים תמיכה.

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

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

שיקולי שימוש

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

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

דרישות

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

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

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

הפעלת אשכול

כדי להפעיל את gRPC במחבר Cloud Storage ברמת האשכול, צריך להגדיר את המאפיין core:fs.gs.client.type=STORAGE_CLIENT כשיוצרים אשכול של Managed Service for Apache Spark. אחרי שמפעילים את gRPC ברמת האשכול, בקשות קריאה של מחבר Cloud Storage שנשלחות על ידי משימות שפועלות באשכול משתמשות ב-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 בצד הלקוח.

משאבים