הקצאה ושימוש באשכול Hadoop/Spark מנוהל באמצעות Cloud Dataproc (שורת פקודה)

1. סקירה כללית

‫Cloud Dataproc הוא שירות מנוהל ל-Spark ול-Hadoop שמאפשר לכם להשתמש בכלים של קוד פתוח לנתונים כדי לבצע עיבוד ברצף (batch processing), לשלוח שאילתות, להעביר נתונים בסטרימינג ולבצע למידת מכונה. אוטומציה של Cloud Dataproc עוזרת ליצור אשכולות במהירות, לנהל אותם בקלות ולחסוך כסף על ידי השבתת אשכולות כשלא צריך אותם. כך תוכלו להשקיע פחות זמן וכסף באדמיניסטרציה ולהתמקד בעבודה ובנתונים שלכם.

המדריך הזה מבוסס על המאמר https://cloud.google.com/dataproc/overview

מה תלמדו

  • איך ליצור אשכול מנוהל של Cloud Dataproc (עם Apache Spark שמותקן מראש).
  • איך שולחים עבודת Spark
  • איך משנים את הגודל של אשכול
  • איך מתחברים באמצעות SSH לצומת הראשי של אשכול Dataproc
  • איך משתמשים ב-gcloud כדי לבדוק אשכולות, עבודות וכללים של חומת אש
  • איך משביתים את האשכול

מה תצטרכו

איך תשתמשו במדריך הזה?

רק לקרוא לקרוא ולבצע את התרגילים

איזה דירוג מגיע לדעתך לחוויית השימוש שלך בשירותים של Google Cloud Platform?

מתחילים ביניים מומחים

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, אתם צריכים ליצור חשבון).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZwci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.

  1. לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.

העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' שבו מוסבר איך להשבית משאבים כדי שלא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי ‎300 USD.

3. הפעלת ממשקי ה-API של Cloud Dataproc ו-Google Compute Engine

לוחצים על סמל התפריט בפינה השמאלית העליונה.

2bfc27ef9ba2ec7d.png

בתפריט הנפתח, בוחרים באפשרות 'API Manager'.

408af5f32c4b7c25.png

לוחצים על Enable APIs and Services.

a9c0e84296a7ba5b.png

בתיבת החיפוש, מחפשים את Compute Engine. לוחצים על Google Compute Engine API ברשימת התוצאות שמופיעה.

b6adf859758d76b3.png

בדף Google Compute Engine לוחצים על הפעלה.

da5584a1cbc77104.png

אחרי ההפעלה, לוחצים על החץ שפונה ימינה כדי לחזור.

עכשיו מחפשים את Google Cloud Dataproc API ומפעילים אותו.

f782195d8e3d732a.png

4. הפעלת Cloud Shell

המכונה הווירטואלית הזו מבוססת על Debian, וטעונים בה כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות של הרשת. כלומר, כל מה שצריך כדי לבצע את ההדרכה הזו הוא דפדפן (כן, היא פועלת ב-Chromebook).

  1. כדי להפעיל את Cloud Shell ממסוף Cloud, פשוט לוחצים על הפעלת Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (הקצאת המשאבים והחיבור לסביבה אמורים להימשך רק כמה רגעים).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01AScreen Shot 2017-06-14 at 10.13.43 PM.png

אחרי שמתחברים ל-Cloud Shell, אפשר לראות שהאימות כבר בוצע והפרויקט כבר הוגדר ל-PROJECT_ID.

gcloud auth list

פלט הפקודה

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

אם מסיבה כלשהי הפרויקט לא מוגדר, פשוט מריצים את הפקודה הבאה:

gcloud config set project <PROJECT_ID>

חיפשת את PROJECT_ID? בודקים באיזה מזהה השתמשתם בשלבי ההגדרה או מחפשים אותו בלוח הבקרה של Cloud Console:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

ב-Cloud Shell מוגדרים גם כמה משתני סביבה כברירת מחדל, שיכולים להיות שימושיים כשמריצים פקודות בעתיד.

echo $GOOGLE_CLOUD_PROJECT

פלט הפקודה

<PROJECT_ID>
  1. לבסוף, מגדירים את אזור ברירת המחדל ואת הגדרת הפרויקט.
gcloud config set compute/zone us-central1-f

אפשר לבחור מתוך מגוון אזורים שונים. מידע נוסף זמין במאמר בנושא אזורים ותחומים.

5. יצירת אשכול Cloud Dataproc

אחרי שמפעילים את Cloud Shell, אפשר להשתמש בשורת הפקודה כדי להפעיל את הפקודה gcloud של Cloud SDK או כלים אחרים שזמינים במופע של המכונה הווירטואלית.

בוחרים שם לאשכול שבו רוצים להשתמש במעבדה הזו:

$ CLUSTERNAME=${USER}-dplab

כדי להתחיל, יוצרים אשכול חדש:

$ gcloud dataproc clusters create ${CLUSTERNAME} \
  --region=us-central1 \
  --scopes=cloud-platform \
  --tags codelab \
  --zone=us-central1-c

הגדרות ברירת המחדל של האשכול, שכוללות שני צמתי עובדים, אמורות להספיק למדריך הזה. הפקודה שלמעלה כוללת את האפשרות --zone לציין את האזור הגיאוגרפי שבו ייווצר האשכול, ושתי אפשרויות מתקדמות, --scopes ו---tags, שמוסברות בהמשך כשמשתמשים בתכונות שהן מפעילות. במאמר על הפקודה Cloud SDK gcloud dataproc clusters create מוסבר איך משתמשים בסימונים של שורת הפקודה כדי להתאים אישית את הגדרות האשכול.

6. שליחת עבודת Spark לאשכול

אפשר לשלוח עבודה באמצעות בקשת Cloud Dataproc API‏ jobs.submit, באמצעות כלי שורת הפקודה gcloud או מתוך קונסולת Google Cloud Platform. אפשר גם להתחבר למכונת מופע באשכול באמצעות SSH, ואז להריץ עבודה מהמופע.

נשלח עכשיו עבודה באמצעות הכלי gcloud משורת הפקודה של Cloud Shell:

$ gcloud dataproc jobs submit spark --cluster ${CLUSTERNAME} \
  --class org.apache.spark.examples.SparkPi \
  --jars file:///usr/lib/spark/examples/jars/spark-examples.jar -- 1000

במהלך הרצת המשימה, הפלט יוצג בחלון Cloud Shell.

כדי להפסיק את הפלט, מזינים Control-C. הפעולה הזו תעצור את הפקודה gcloud, אבל העבודה עדיין תפעל באשכול Dataproc.

7. הצגת רשימת המשרות וחיבור מחדש

כדי להדפיס רשימת משרות:

$ gcloud dataproc jobs list --cluster ${CLUSTERNAME}

המשימה שנשלחה לאחרונה מופיעה בראש הרשימה. מעתיקים את מזהה העבודה ומדביקים אותו במקום jobId בפקודה שלמטה. הפקודה תתחבר מחדש לעבודה שצוינה ותציג את הפלט שלה:

$ gcloud dataproc jobs wait jobId

כשהעבודה מסתיימת, הפלט יכלול קירוב של הערך של פאי.

493928df54f61386.png

8. שינוי הגודל של האשכול

כדי להריץ חישובים גדולים יותר, כדאי להוסיף עוד צמתים לאשכול כדי להאיץ את התהליך. ב-Dataproc אפשר להוסיף צמתים לאשכול ולהסיר צמתים מהאשכול בכל שלב.

בודקים את הגדרות האשכול:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

כדי להגדיל את האשכול, מוסיפים כמה צמתים שניתן לקטוע את הפעולה שלהם:

$ gcloud dataproc clusters update ${CLUSTERNAME} --num-secondary-workers=2

בודקים שוב את האשכול:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

שימו לב: בנוסף ל-workerConfig מתיאור האשכול המקורי, יש עכשיו גם secondaryWorkerConfig שכולל שני instanceNames לעובדים שניתן להפסיק את הפעולה שלהם. ב-Dataproc מוצג שהסטטוס של האשכול הוא 'מוכן' בזמן שהצמתים החדשים מופעלים.

מכיוון שהתחלתם עם שני צמתים ועכשיו יש לכם ארבעה, משימות Spark אמורות לפעול בערך פי שניים מהר יותר.

9. התחברות לאשכול באמצעות SSH

מתחברים באמצעות SSH לצומת הראשי, ששם המופע שלו הוא תמיד שם האשכול עם התוספת -m:

$ gcloud compute ssh ${CLUSTERNAME}-m --zone=us-central1-c

בפעם הראשונה שמריצים פקודת SSH ב-Cloud Shell, המערכת יוצרת מפתחות SSH לחשבון שלכם. אתם יכולים לבחור ביטוי סיסמה, או להשתמש בביטוי סיסמה ריק כרגע ולשנות אותו מאוחר יותר באמצעות ssh-keygen אם תרצו.

במופע, בודקים את שם המארח:

$ hostname

מכיוון שציינתם --scopes=cloud-platform כשיצרתם את האשכול, אתם יכולים להריץ פקודות gcloud באשכול. מציגים ברשימה את האשכולות בפרויקט:

$ gcloud dataproc clusters list

בסיום, מתנתקים מחיבור ה-SSH:

$ logout

10. בדיקת התגים

כשיוצרים את האשכול, כוללים את האפשרות --tags להוספת תג לכל צומת באשכול. התגים משמשים לצירוף כללי חומת אש לכל צומת. לא יצרתם כללי חומת אש תואמים ב-codelab הזה, אבל עדיין תוכלו לבדוק את התגים בצומת ואת כללי חומת האש ברשת.

הדפסת התיאור של צומת הראשי:

$ gcloud compute instances describe ${CLUSTERNAME}-m --zone us-central1-c

מחפשים את tags: לקראת סוף הפלט ומוודאים שהוא כולל את codelab.

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

$ gcloud compute firewall-rules list

שימו לב לעמודות SRC_TAGS ו-TARGET_TAGS. כשמצרפים תג לכלל חומת אש, אפשר לציין שהתג ישמש בכל הצמתים שמוגדר בהם התג הזה.

11. כיבוי האשכול

אפשר להשבית אשכול באמצעות בקשת Cloud Dataproc API‏ clusters.delete, משורת הפקודה באמצעות קובץ ההפעלה gcloud dataproc clusters delete או ממסוף Google Cloud Platform.

נכבה את האשכול באמצעות שורת הפקודה של Cloud Shell:

$ gcloud dataproc clusters delete ${CLUSTERNAME} --region us-central1

12. מעולה!

למדתם איך ליצור אשכול Dataproc, לשלוח משימת Spark, לשנות את גודל האשכול, להשתמש ב-SSH כדי להתחבר לצומת הראשי, להשתמש ב-gcloud כדי לבדוק אשכולות, משימות וכללי חומת אש, ולסגור את האשכול באמצעות gcloud.

מידע נוסף

רישיון

עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 3.0 כללי, ורישיון Apache 2.0.