تنفيذ مسار معالجة نصوص البيانات الضخمة في Cloud Dataflow

1. نظرة عامة

Cloud-Dataflow.png

ما هي خدمة Dataflow؟

‫Dataflow هي خدمة مُدارة لتنفيذ مجموعة كبيرة من أنماط معالجة البيانات. توضّح لك المستندات على هذا الموقع الإلكتروني كيفية نشر خطوط أنابيب معالجة البيانات المجمّعة وبيانات البث باستخدام Dataflow، بما في ذلك تعليمات استخدام ميزات الخدمة.

حزمة تطوير البرامج (SDK) الخاصة بـ Apache Beam هي نموذج برمجة مفتوح المصدر يتيح لك تطوير مسارات معالجة البيانات المجمّعة والمتواصلة. يمكنك إنشاء سلاسل الإجراءات باستخدام برنامج Apache Beam ثم تشغيلها على خدمة Dataflow. تقدّم مستندات Apache Beam معلومات مفصّلة عن المفاهيم والمواد المرجعية لنموذج برمجة Apache Beam وحِزم تطوير البرامج (SDK) وغيرها من أدوات التنفيذ.

تحليل البيانات المتدفّقة بسرعة

تتيح خدمة Dataflow تطويرًا سريعًا ومبسّطًا لمسار البيانات المتواصلة مع وقت استجابة أقل للبيانات.

تبسيط العمليات والإدارة

تتيح هذه الخدمة للفِرق التركيز على البرمجة بدلاً من إدارة مجموعات الخوادم، لأنّ أسلوب Dataflow بدون خادم يزيل النفقات التشغيلية من أحمال عمل هندسة البيانات.

خفض التكلفة الإجمالية للملكية

إنّ إمكانات المعالجة المجمّعة المحسّنة من حيث التكلفة والمقترنة بتوسيع النطاق التلقائي للموارد تعني أنّ Dataflow توفّر سعة غير محدودة تقريبًا لإدارة أعباء العمل الموسمية والمتقطّعة بدون الإفراط في الإنفاق.

الميزات الأساسية

إدارة الموارد المبرمَجة وإعادة موازنة العمل الديناميكية

تتولّى Dataflow تلقائيًا توفير موارد المعالجة وإدارتها لتقليل وقت الاستجابة وزيادة الاستخدام إلى أقصى حد، وبالتالي لن تحتاج إلى إنشاء مثيلات أو حجزها يدويًا. يتم أيضًا تقسيم العمل آليًا وتحسينه لإعادة موازنة العمل المتأخر بشكل ديناميكي. ليس عليك البحث عن "مفاتيح التشغيل السريع" أو معالجة بيانات الإدخال مسبقًا.

التدرّج التلقائي الأفقي

يؤدي القياس التلقائي الأفقي لموارد المنفِّذ من أجل تحقيق أفضل نتائج سرعة معالجة البيانات إلى تحسين السعر إلى الأداء بشكل عام.

أسعار جدولة الموارد المرنة للمعالجة على دفعات

بالنسبة إلى المعالجة التي تتسم بالمرونة في وقت جدولة المهام، مثل المهام التي تتم ليلاً، توفّر ميزة "جدولة الموارد المرنة" (FlexRS) سعرًا أقل للمعالجة المجمّعة. يتم وضع هذه المهام المرنة في قائمة انتظار مع ضمان استرجاعها لتنفيذها في غضون ست ساعات.

هذا البرنامج التعليمي مقتبس من https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-maven

ما ستتعلمه

  • كيفية إنشاء مشروع Maven باستخدام Apache Beam، وذلك باستخدام حزمة تطوير البرامج (SDK) بلغة Java
  • تشغيل نموذج لبرنامج باستخدام Google Cloud Platform Console
  • كيفية حذف حزمة Cloud Storage المرتبطة ومحتواها

المتطلبات

كيف ستستخدم هذا البرنامج التعليمي؟

قراءة النص فقط قراءة النص وإكمال التمارين

ما هو تقييمك لتجربة استخدام خدمات Google Cloud Platform؟

مبتدئ متوسط متقدّم

2. الإعداد والمتطلبات

إعداد البيئة بالسرعة التي تناسبك

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZwci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيتم الإشارة إليه لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.

لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

تفعيل واجهات برمجة التطبيقات

انقر على رمز القائمة في أعلى يمين الشاشة.

2bfc27ef9ba2ec7d.png

انقر على واجهات برمجة التطبيقات والخدمات > لوحة البيانات من القائمة المنسدلة.

5b65523a6cc0afa6.png

انقر على تفعيل واجهات برمجة التطبيقات والخدمات.

81ed72192c0edd96.png

ابحث عن "Compute Engine" في مربّع البحث. انقر على "Compute Engine API" في قائمة النتائج التي تظهر.

3f201e991c7b4527.png

في صفحة Google Compute Engine، انقر على تفعيل.

ac121653277fa7bb.png

بعد تفعيلها، انقر على السهم للرجوع.

ابحث الآن عن واجهات برمجة التطبيقات التالية وفعِّلها أيضًا:

  • ‫Cloud Dataflow
  • Stackdriver
  • Cloud Storage
  • ملف JSON في Cloud Storage
  • BigQuery
  • خدمة Cloud Pub/Sub
  • Cloud Datastore
  • واجهات برمجة تطبيقات Cloud Resource Manager

3- إنشاء حزمة جديدة في Cloud Storage

في وحدة تحكّم Google Cloud Platform، انقر على رمز القائمة في أعلى يمين الشاشة:

2bfc27ef9ba2ec7d.png

مرِّر لأسفل الصفحة واختَر Cloud Storage > المتصفّح في القسم الفرعي التخزين:

2b6c3a2a92b47015.png

من المفترض أن يظهر لك الآن "متصفّح Cloud Storage"، وإذا كنت تستخدم مشروعًا لا يتضمّن حاليًا أي حِزم Cloud Storage، ستظهر لك دعوة لإنشاء حزمة جديدة. اضغط على الزر إنشاء حزمة لإنشاء حزمة:

a711016d5a99dc37.png

أدخِل اسمًا للحزمة. كما يوضّح مربّع الحوار، يجب أن تكون أسماء الحِزم فريدة في جميع أنحاء Cloud Storage. لذا، إذا اخترت اسمًا واضحًا، مثل "اختبار"، من المحتمل أن تجد أنّ مستخدمًا آخر قد أنشأ مجموعة بهذا الاسم من قبل، وستتلقّى رسالة خطأ.

هناك أيضًا بعض القواعد المتعلقة بالأحرف المسموح بها في أسماء الحِزم. إذا بدأت اسم الحزمة وانتهيت منه بحرف أو رقم، واستخدمت الشرطات في المنتصف فقط، لن تواجه أي مشاكل. إذا حاولت استخدام رموز خاصة أو بدء اسم الحزمة أو إنهائه بشيء آخر غير حرف أو رقم، سيذكّرك مربّع الحوار بالقواعد.

3a5458648cfe3358.png

أدخِل اسمًا فريدًا للحزمة واضغط على إنشاء. إذا اخترت اسمًا مستخدمًا من قبل، ستظهر لك رسالة الخطأ الموضّحة أعلاه. بعد إنشاء حزمة بنجاح، سيتم نقلك إلى الحزمة الجديدة الفارغة في المتصفّح:

3bda986ae88c4e71.png

بالطبع، سيختلف اسم الحزمة الذي يظهر لك، لأنّه يجب أن يكون فريدًا في جميع المشاريع.

4. بدء Cloud Shell

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

إذا لم يسبق لك بدء Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) توضّح ماهيته. في هذه الحالة، انقر على متابعة (ولن تظهر لك مرة أخرى). إليك الشكل الذي ستظهر به هذه الشاشة لمرة واحدة:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم العمل في هذا الدرس البرمجي، إن لم يكن كله، باستخدام متصفّح أو جهاز Chromebook فقط.

بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك.

  1. نفِّذ الأمر التالي في Cloud Shell للتأكّد من إثبات هويتك:
gcloud auth list

ناتج الأمر

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

ناتج الأمر

[core]
project = <PROJECT_ID>

إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:

gcloud config set project <PROJECT_ID>

ناتج الأمر

Updated property [core/project].

5- إنشاء مشروع Maven

بعد تشغيل Cloud Shell، لنبدأ بإنشاء مشروع Maven باستخدام حزمة تطوير البرامج (SDK) في Java لـ Apache Beam.

‫Apache Beam هو نموذج برمجة مفتوح المصدر لمسارات البيانات. يمكنك تحديد هذه المسارات باستخدام برنامج Apache Beam واختيار أداة تنفيذ، مثل Dataflow، لتنفيذ المسار.

نفِّذ الأمر mvn archetype:generate في الصدفة على النحو التالي:

  mvn archetype:generate \
     -DarchetypeGroupId=org.apache.beam \
     -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
     -DarchetypeVersion=2.46.0 \
     -DgroupId=org.example \
     -DartifactId=first-dataflow \
     -Dversion="0.1" \
     -Dpackage=org.apache.beam.examples \
     -DinteractiveMode=false

بعد تنفيذ الأمر، من المفترض أن يظهر دليل جديد باسم first-dataflow ضمن دليلك الحالي. يحتوي first-dataflow على مشروع Maven يتضمّن حزمة تطوير البرامج (SDK) الخاصة بـ Cloud Dataflow للغة Java ومسارات نموذجية.

6. تشغيل مسار معالجة نصية على Cloud Dataflow

لنبدأ بحفظ رقم تعريف مشروعنا وأسماء حِزم Cloud Storage كمتغيّرات بيئية. يمكنك إجراء ذلك في Cloud Shell. احرص على استبدال <your_project_id> برقم تعريف مشروعك.

 export PROJECT_ID=<your_project_id>

سننفّذ الآن الإجراء نفسه لحزمة Cloud Storage. تذكَّر استبدال <your_bucket_name> بالاسم الفريد الذي استخدمته لإنشاء الحزمة في خطوة سابقة.

 export BUCKET_NAME=<your_bucket_name>

انتقِل إلى الدليل first-dataflow/.

 cd first-dataflow

سننفّذ مسارًا باسم WordCount، وهو يقرأ النص ويقسّم أسطر النص إلى كلمات فردية ويحصي عدد مرات تكرار كل كلمة من هذه الكلمات. سنشغّل أولاً خط الأنابيب، وأثناء تشغيله، سنلقي نظرة على ما يحدث في كل خطوة.

ابدأ عملية النقل عن طريق تنفيذ الأمر mvn compile exec:java في واجهة الأوامر أو نافذة المحطة الطرفية. بالنسبة إلى الوسيطتين --project, --stagingLocation, و--output، يشير الأمر أدناه إلى متغيرات البيئة التي أعددتها سابقًا في هذه الخطوة.

 mvn compile exec:java \
      -Pdataflow-runner compile exec:java \
      -Dexec.mainClass=org.apache.beam.examples.WordCount \
      -Dexec.args="--project=${PROJECT_ID} \
      --stagingLocation=gs://${BUCKET_NAME}/staging/ \
      --output=gs://${BUCKET_NAME}/output \
      --runner=DataflowRunner \
      --region=us-central1 \
      --gcpTempLocation=gs://${BUCKET_NAME}/temp"

أثناء تنفيذ المهمة، لنبحث عنها في قائمة المهام.

افتح واجهة مستخدم الويب الخاصة بخدمة Cloud Dataflow في وحدة تحكّم Google Cloud Platform. من المفترض أن تظهر مهمة عدد الكلمات بالحالة قيد التنفيذ:

3623be74922e3209.png

لنلقِ الآن نظرة على مَعلمات خط الأنابيب. ابدأ بالنقر على اسم وظيفتك:

816d8f59c72797d7.png

عند اختيار مهمة، يمكنك عرض الرسم البياني للتنفيذ. يمثّل الرسم البياني لتنفيذ المسار كل عملية تحويل في المسار كمربّع يحتوي على اسم عملية التحويل وبعض معلومات الحالة. يمكنك النقر على علامة السهم في أعلى يسار كل خطوة للاطّلاع على مزيد من التفاصيل:

80a972dd19a6f1eb.png

لنطّلع على كيفية تحويل مسار التعلّم للبيانات في كل خطوة:

  • القراءة: في هذه الخطوة، تقرأ سلسلة نقل البيانات من مصدر إدخال. في هذه الحالة، يكون الملف عبارة عن ملف نصي من Cloud Storage يتضمّن النص الكامل لمسرحية الملك لير لشكسبير. تقرأ عملية النقل هذه الملف سطرًا سطرًا وتنتج PCollection لكل سطر، حيث يمثّل كل سطر في ملفنا النصي عنصرًا في المجموعة.
  • CountWords: تحتوي الخطوة CountWords على جزأين. أولاً، تستخدِم دالة ParDo متوازية باسم ExtractWords لتقسيم كل سطر إلى كلمات فردية. ناتج عملية ExtractWords هو PCollection جديد يكون كل عنصر فيه عبارة عن كلمة. تستخدِم الخطوة التالية، Count، عملية تحويل تقدّمها حزمة تطوير البرامج (SDK) في Java، وتعرض أزواجًا من المفاتيح والقيم، حيث يكون المفتاح كلمة فريدة والقيمة هي عدد مرات تكرارها. في ما يلي الطريقة التي تنفّذ CountWords، ويمكنك الاطّلاع على ملف WordCount.java الكامل على GitHub:
 /**
   * A PTransform that converts a PCollection containing lines of text into a PCollection of
   * formatted word counts.
   *
   * <p>Concept #3: This is a custom composite transform that bundles two transforms (ParDo and
   * Count) as a reusable PTransform subclass. Using composite transforms allows for easy reuse,
   * modular testing, and an improved monitoring experience.
   */
  public static class CountWords
      extends PTransform<PCollection<String>, PCollection<KV<String, Long>>> {
    @Override
    public PCollection<KV<String, Long>> expand(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.perElement());

      return wordCounts;
    }
  }
  • MapElements: يؤدي هذا إلى استدعاء FormatAsTextFn، الذي تم نسخه أدناه، والذي ينسّق كل زوج من المفتاح والقيمة في سلسلة قابلة للطباعة.
  /** A SimpleFunction that converts a Word and Count into a printable string. */
  public static class FormatAsTextFn extends SimpleFunction<KV<String, Long>, String> {
    @Override
    public String apply(KV<String, Long> input) {
      return input.getKey() + ": " + input.getValue();
    }
  }
  • WriteCounts: في هذه الخطوة، نكتب السلاسل القابلة للطباعة في ملفات نصية متعددة مقسّمة.

سنلقي نظرة على الناتج الناتج من خط الأنابيب في غضون بضع دقائق.

الآن، ألقِ نظرة على صفحة معلومات الوظيفة على يسار الرسم البياني، والتي تتضمّن مَعلمات خط الأنابيب التي أدرجناها في الأمر mvn compile exec:java.

9723815a1f5bf08b.png208a7f0d6973acf6.png

يمكنك أيضًا الاطّلاع على عدادات مخصّصة للمسار، والتي تعرض في هذه الحالة عدد الأسطر الفارغة التي تمت مواجهتها حتى الآن أثناء التنفيذ. يمكنك إضافة عدّادات جديدة إلى مسار المعالجة لتتبُّع مقاييس خاصة بالتطبيق.

a2e2800e2c6893f8.png

يمكنك النقر على رمز السجلّات في أسفل وحدة التحكّم لعرض رسائل الخطأ المحدّدة.

23c64138a1027f8.png

تعرض اللوحة تلقائيًا رسائل "سجلّ المهام" التي تُبلغ عن حالة المهمة ككل. يمكنك استخدام أداة اختيار "الحدّ الأدنى لدرجة الأهمية" لفلترة رسائل حالة تقدّم المهمة.

94ba42015fdafbe2.png

يؤدي اختيار خطوة مسار تعلّم في الرسم البياني إلى تغيير طريقة العرض إلى السجلات التي أنشأها الرمز والرمز الذي تم إنشاؤه والذي يتم تشغيله في خطوة مسار التعلّم.

للرجوع إلى "سجلّات المهام"، ألغِ اختيار الخطوة من خلال النقر خارج الرسم البياني أو باستخدام الزر "إغلاق" في اللوحة الجانبية اليسرى.

يمكنك استخدام الزر سجلات العامل في علامة التبويب "السجلات" للاطّلاع على سجلات العامل الخاصة بمثيلات Compute Engine التي تشغّل خط الأنابيب. تتألف سجلّات المنفِّذ من أسطر سجلّات تم إنشاؤها بواسطة الرمز البرمجي والرمز البرمجي الذي أنشأته Dataflow لتشغيله.

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

5a53c244f28d5478.png

لا تعرض واجهة مراقبة Dataflow سوى أحدث رسائل السجلّ. يمكنك عرض جميع السجلات من خلال النقر على رابط Google Cloud Observability على يسار لوحة السجلات.

2bc704a4d6529b31.png

في ما يلي ملخّص لأنواع السجلّات المختلفة التي يمكن الاطّلاع عليها من صفحة "المراقبة"→"السجلّات":

  • تحتوي سجلّات job-message على رسائل على مستوى المهمة تنشئها مكوّنات مختلفة من Dataflow. وتشمل الأمثلة إعدادات التوسّع التلقائي، ووقت بدء تشغيل العاملين أو إيقافهم، والتقدّم في خطوة المهمة، وأخطاء المهمة. تنتقل الأخطاء على مستوى المنفِّذ التي تنشأ عن تعطُّل رمز المستخدم والموجودة في سجلات المنفِّذ أيضًا إلى سجلات رسالة المهمة.
  • يتم إنشاء سجلات المنفِّذ بواسطة منفِّذي Dataflow. ينفّذ العاملون معظم مهام خط أنابيب المعالجة (مثل تطبيق ParDo على البيانات). تحتوي سجلات المنفِّذ على الرسائل التي يسجّلها الرمز وDataflow.
  • تتوفّر سجلات worker-startup في معظم مهام Dataflow ويمكنها تسجيل الرسائل ذات الصلة بعملية بدء التشغيل. تتضمّن عملية بدء التشغيل تنزيل ملفات JAR الخاصة بمهمة من Cloud Storage، ثم بدء العاملين. إذا حدثت مشكلة في بدء العاملين، ستكون هذه السجلات مكانًا جيدًا للبحث.
  • تحتوي سجلات shuffler على رسائل من المنفِّذين الذين يدمجون نتائج عمليات مسار التعلّم المتوازية.
  • تحتوي سجلات docker وkubelet على رسائل ذات صلة بهذه التقنيات المتاحة للجميع، والتي يتم استخدامها على العاملين في Dataflow.

في الخطوة التالية، سنتأكّد من نجاح مهمتك.

7. التأكّد من نجاح مهمتك

افتح واجهة مستخدم الويب الخاصة بخدمة Cloud Dataflow في وحدة تحكّم Google Cloud Platform.

من المفترض أن تظهر مهمة عدد الكلمات بحالة قيد التشغيل في البداية، ثم تمت بنجاح:

4c408162416d03a2.png

سيستغرق تشغيل المهمة من 3 إلى 4 دقائق تقريبًا.

هل تتذكر عندما شغّلت خط الأنابيب وحدّدت حزمة إخراج؟ لنلقِ نظرة على النتيجة (ألا تريد معرفة عدد مرات تكرار كل كلمة في الملك لير؟). ارجع إلى "متصفّح Cloud Storage" في وحدة تحكّم Google Cloud Platform. في الحزمة، من المفترض أن تظهر لك ملفات الإخراج وملفات التخزين المؤقت التي أنشأتها مهمتك:

25a5d3d4b5d0b567.png

8. إيقاف مواردك

يمكنك إيقاف مواردك من وحدة تحكّم Google Cloud Platform.

افتح متصفّح Cloud Storage في "وحدة تحكّم Google Cloud Platform".

2b6c3a2a92b47015.png

ضَع علامة في مربّع الاختيار بجانب الحزمة التي أنشأتها، ثم انقر على حذف لحذف الحزمة ومحتواها نهائيًا.

2f7780bdf10b69ba.png8051ef293a8e5cfe.png

9. تهانينا!

تعرّفت على كيفية إنشاء مشروع Maven باستخدام Cloud Dataflow SDK، وتشغيل نموذج مسار باستخدام Google Cloud Platform Console، وحذف حزمة Cloud Storage المرتبطة ومحتوياتها.

مزيد من المعلومات

الترخيص

يخضع هذا العمل لترخيص Creative Commons Attribution 3.0 Generic License وترخيص Apache 2.0.