Dataproc على Google Compute Engine

1. مقدمة عن Google Dataproc

Dataproc هي خدمة مُدارة بالكامل وقابلة للتوسّع بشكل كبير لتشغيل Apache Spark وApache Flink وPresto والعديد من الأدوات وأُطر العمل الأخرى المفتوحة المصدر. استخدِم Dataproc لتحديث مستودع البيانات المركزي، وعمليات استخراج البيانات وتحويلها وتحميلها (ETL) أو استخراج البيانات وتحميلها وتحويلها (ELT)، وعلوم البيانات الآمنة على مستوى العالم. تتكامل Dataproc أيضًا بشكل كامل مع العديد من خدمات Google Cloud، بما في ذلك BigQuery وCloud Storage وVertex AI وDataplex.

يتوفّر Dataproc بثلاثة إصدارات:

  • تتيح لك خدمة Dataproc Serverless تشغيل مهام PySpark بدون الحاجة إلى ضبط البنية الأساسية والتوسّع التلقائي. تتيح خدمة Dataproc Serverless أحمال العمل المجمّعة والجلسات / أوراق الملاحظات في PySpark.
  • تتيح لك خدمة Dataproc على Google Compute Engine إدارة مجموعة Hadoop YARN لأحمال عمل Spark المستندة إلى YARN، بالإضافة إلى أدوات مفتوحة المصدر مثل Flink وPresto. يمكنك تخصيص مجموعاتك المستندة إلى السحابة الإلكترونية باستخدام أي قدر من التوسيع العمودي أو الأفقي، بما في ذلك القياس التلقائي.
  • تتيح لك خدمة Dataproc على Google Kubernetes Engine إمكانية ضبط إعدادات المجموعات الافتراضية في Dataproc ضمن البنية الأساسية لخدمة GKE من أجل إرسال مهام Spark أو PySpark أو SparkR أو Spark SQL.

2. إنشاء مجموعة Dataproc على شبكة VPC في Google Cloud

في هذه الخطوة، ستنشئ مجموعة Dataproc على Google Cloud باستخدام "وحدة تحكّم Google Cloud".

كخطوة أولى، فعِّل واجهة برمجة التطبيقات لخدمة Dataproc على وحدة التحكّم. بعد تفعيلها، ابحث عن "Dataproc" في شريط البحث وانقر على إنشاء مجموعة.

اختَر المجموعة على Compute Engine لاستخدام الأجهزة الافتراضية في Google Compute Engine(GCE) كبنية أساسية لتشغيل مجموعات Dataproc.

a961b2e8895e88da.jpeg

أنت الآن في صفحة "إنشاء مجموعة".

9583c91204a09c12.jpeg

في هذه الصفحة:

  • أدخِل اسمًا فريدًا للمجموعة.
  • اختَر المنطقة المحدّدة. يمكنك أيضًا اختيار منطقة، ولكن يوفّر Dataproc إمكانية اختيار منطقة لك تلقائيًا. في هذا الدرس التطبيقي، اختَر "us-central1" و "us-central1-c".
  • اختَر نوع المجموعة "عادية". يضمن ذلك وجود عقدة رئيسية واحدة.
  • في علامة التبويب إعداد العُقد، تأكَّد من أنّ عدد العُقد التي تم إنشاؤها سيكون اثنتين.
  • في قسم تخصيص المجموعة، ضَع علامة في المربّع بجانب تفعيل Component Gateway. يتيح ذلك الوصول إلى واجهات الويب على المجموعة، بما في ذلك واجهة مستخدم Spark وYarn Node Manager ودفاتر ملاحظات Jupyter.
  • في المكوّنات الاختيارية، اختَر Jupyter Notebook. يؤدي ذلك إلى إعداد المجموعة باستخدام خادم دفتر ملاحظات Jupyter.
  • اترك كل شيء آخر كما هو وانقر على إنشاء مجموعة.

سيؤدي ذلك إلى إنشاء مجموعة Dataproc.

3- تشغيل المجموعة والاتصال بها باستخدام بروتوكول SSH

بعد أن تتغيّر حالة المجموعة إلى قيد التشغيل، انقر على اسم المجموعة من وحدة تحكّم Dataproc.

7332f1c2cb25807d.jpeg

انقر على علامة التبويب مثيل الجهاز الظاهري لعرض العقدة الرئيسية وعقدتَي العامل في المجموعة.

25be1578e00f669f.jpeg

انقر على SSH بجانب العقدة الرئيسية لتسجيل الدخول إليها.

2810ffd97f315bdb.jpeg

نفِّذ أوامر hdfs للاطّلاع على بنية الدليل.

hadoop_commands_example

sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51 
sudo hadoop fs -ls /

4. واجهات الويب وبوابات المكوّنات

من وحدة تحكّم مجموعة Dataproc، انقر على اسم مجموعتك، ثم انقر على علامة التبويب واجهات الويب.

6398f71d6293d6ff.jpeg

تعرض هذه القائمة واجهات الويب المتاحة، بما في ذلك Jupyter. انقر على Jupyter لفتح دفتر ملاحظات Jupyter. يمكنك استخدام هذا الخيار لإنشاء دفاتر ملاحظات في PySpark مخزَّنة على GCS، وذلك لتخزين دفتر ملاحظاتك على Google Cloud Storage وفتح دفتر ملاحظات PySpark لاستخدامه في هذا الدرس التطبيقي حول الترميز العملي.

5- مراقبة مهام Spark

بعد إعداد مجموعة Dataproc وتشغيلها، أنشئ مهمة مجمّعة في PySpark وأرسِلها إلى مجموعة Dataproc.

أنشئ حزمة في Google Cloud Storage (GCS) لتخزين نص PySpark البرمجي. احرص على إنشاء الحزمة في المنطقة نفسها التي تتوفّر فيها مجموعة Dataproc.

679fd2f76806f4e2.jpeg

بعد إنشاء حزمة GCS، انسخ الملف التالي إلى هذه الحزمة.

https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py

ينشئ هذا النص البرمجي نموذجًا لـ Spark DataFrame ويكتبه كجدول Hive.

hive_job.py

from pyspark.sql import SparkSession
from datetime import datetime, date
from pyspark.sql import Row

spark = SparkSession.builder.master("local").enableHiveSupport().getOrCreate()

df = spark.createDataFrame([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
        (2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
    ], schema='a long, b double, c string, d date, e timestamp')
print("..... Writing data .....")
df.write.mode("overwrite").saveAsTable("test_table_1")
print("..... Complete .....")

أرسِل هذا النص البرمجي كمهمة دفعية في Spark في Dataproc. انقر على المهام في قائمة التنقّل اليمنى، ثمّ انقر على إرسال مهمة

5767fc7c50b706d3.jpeg

قدِّم معرف الوظيفة ومنطقة. اختَر مجموعتك وقدِّم الموقع الجغرافي لبرنامج Spark النصي الذي نسخته في "خدمة التخزين السحابي من Google" (GCS). سيتم تشغيل هذه المهمة كمهمة مجمّعة في Spark على Dataproc.

ضمن السمات، أضِف المفتاح spark.submit.deployMode والقيمة client للتأكّد من أنّ برنامج التشغيل يعمل في العقدة الرئيسية في Dataproc وليس في عقد العاملين. انقر على إرسال لإرسال مهمة الدُفعة إلى Dataproc.

a7ca90f5132faa31.jpeg

سينشئ نص Spark البرمجي إطار بيانات ويكتب في جدول Hive test_table_1.

بعد تشغيل المهمة بنجاح، يمكنك الاطّلاع على عبارات الطباعة في وحدة التحكّم ضمن علامة التبويب المراقبة.

bdec2f3ae1055f9.jpeg

بعد إنشاء جدول Hive، أرسِل مهمة طلب بحث أخرى في Hive لاختيار محتوى الجدول وعرضه على وحدة التحكّم.

أنشئ مهمة أخرى بالسمات التالية:

c16f02d1b3afaa27.jpeg

لاحظ أنّ نوع المهمة مضبوط على Hive وأنّ نوع مصدر طلب البحث هو نص طلب البحث، ما يعني أنّنا سنكتب عبارة HiveQL الكاملة في مربّع النص نص طلب البحث.

أرسِل مهمة مع الاحتفاظ ببقية المَعلمات كإعدادات تلقائية.

e242e50bc2519bf4.jpeg

لاحظ كيف يختار HiveQL جميع السجلات ويعرضها على وحدة التحكّم.

6. القياس التلقائي

القياس التلقائي هو مهمة تقدير العدد "الصحيح" لعُقد العامل في المجموعة من أجل حجم المعالجة.

توفّر واجهة برمجة التطبيقات AutoscalingPolicies في Dataproc آلية لأتمتة إدارة موارد المجموعة وتتيح إمكانية القياس التلقائي لعدد الأجهزة الافتراضية للعاملين في المجموعة. سياسة القياس التلقائي هي إعدادات قابلة لإعادة الاستخدام توضّح كيفية تحجيم العاملين في المجموعة الذين يستخدمون سياسة القياس التلقائي. ويحدّد هذا المقياس حدود التوسيع ومعدّل التكرار والحدة لتوفير تحكّم دقيق في موارد المجموعة طوال مدة بقائها.

تتم كتابة سياسات التوسّع التلقائي في Dataproc باستخدام ملفات YAML، ويتم تمرير ملفات YAML هذه في أمر واجهة سطر الأوامر لإنشاء المجموعة أو اختيارها من حزمة GCS عند إنشاء مجموعة من "وحدة تحكّم Google Cloud".

في ما يلي مثال على سياسة التوسيع التلقائي في Dataproc :

policy.yaml

workerConfig:
  minInstances: 10
  maxInstances: 10
secondaryWorkerConfig:
  maxInstances: 50
basicAlgorithm:
  cooldownPeriod: 4m
  yarnConfig:
    scaleUpFactor: 0.05
    scaleDownFactor: 1.0
    gracefulDecommissionTimeout: 1h

7. ضبط المكوّنات الاختيارية في Dataproc

سيؤدي ذلك إلى إنشاء مجموعة Dataproc.

عند إنشاء مجموعة Dataproc، يتم تلقائيًا تثبيت مكوّنات نظام Apache Hadoop الأساسي على المجموعة (راجِع قائمة إصدارات Dataproc). يمكنك تثبيت مكوّنات إضافية، تُعرف باسم المكوّنات الاختيارية، على المجموعة عند إنشائها.

e39cc34245af3f01.jpeg

أثناء إنشاء مجموعة Dataproc من وحدة التحكّم، فعّلنا المكوّنات الاختيارية واخترنا Jupyter Notebook كمكوّن اختياري.

8. إخلاء مساحة الموارد

لتنظيف المجموعة، انقر على إيقاف بعد اختيار المجموعة من وحدة تحكّم Dataproc. بعد إيقاف المجموعة، انقر على حذف لحذفها.

بعد حذف مجموعة Dataproc، احذف حِزم GCS التي تم نسخ الرمز إليها.

لتنظيف الموارد وإيقاف أي فواتير غير مرغوب فيها، يجب أولاً إيقاف مجموعة Dataproc ثم حذفها.

قبل إيقاف المجموعة وحذفها، تأكَّد من نسخ جميع البيانات التي تمت كتابتها إلى مساحة تخزين HDFS إلى GCS لتخزينها بشكل دائم.

لإيقاف المجموعة، انقر على إيقاف.

52065de928ab52e7.jpeg

بعد إيقاف المجموعة، انقر على حذف لحذفها.

في مربّع حوار التأكيد، انقر على حذف لحذف المجموعة.

52065de928ab52e7.jpeg