یک خط لوله پردازش متن کلان داده را در Cloud Dataflow اجرا کنید

Dataflow یک مدل برنامه نویسی یکپارچه و یک سرویس مدیریت شده برای توسعه و اجرای طیف گسترده ای از الگوهای پردازش داده از جمله ETL، محاسبات دسته ای و محاسبات پیوسته است. از آنجایی که Dataflow یک سرویس مدیریت شده است، می تواند منابع را بر اساس تقاضا تخصیص دهد تا تأخیر را به حداقل برساند و در عین حال بهره وری بالای استفاده را حفظ کند.

مدل Dataflow پردازش دسته ای و جریانی را ترکیب می کند تا توسعه دهندگان مجبور نباشند بین درستی، هزینه و زمان پردازش معاوضه ایجاد کنند. در این کد لبه، شما یاد خواهید گرفت که چگونه یک خط لوله Dataflow را اجرا کنید که تعداد کلمات منحصر به فرد را در یک فایل متنی شمارش می کند.

این آموزش از https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-maven اقتباس شده است

چیزی که یاد خواهید گرفت

  • نحوه ایجاد یک پروژه Maven با Cloud Dataflow SDK
  • یک نمونه خط لوله را با استفاده از کنسول Google Cloud Platform اجرا کنید
  • نحوه حذف سطل Cloud Storage مرتبط و محتویات آن

آنچه شما نیاز دارید

چگونه از این آموزش استفاده خواهید کرد؟

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه خود را در استفاده از سرویس‌های پلتفرم ابری Google چگونه ارزیابی می‌کنید؟

تازه کار متوسط مسلط

تنظیم محیط خود به خود

اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:

اسکرین شات از 10/02/2016 12:45:26.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.

در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در کنسول Cloud فعال کنید .

گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).

کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.

API ها را فعال کنید

روی نماد منو در سمت چپ بالای صفحه کلیک کنید.

از منوی کشویی API Manager را انتخاب کنید.

"Google Compute Engine" را در کادر جستجو جستجو کنید. در لیست نتایج ظاهر شده روی "Google Compute Engine API" کلیک کنید.

در صفحه Google Compute Engine روی Enable کلیک کنید

پس از فعال شدن روی فلش کلیک کنید تا به عقب برگردید.

اکنون API های زیر را جستجو کرده و آنها را نیز فعال کنید:

  • Google Dataflow API
  • Stackdriver Logging API
  • Google Cloud Storage
  • Google Cloud Storage JSON API
  • BigQuery API
  • Google Cloud Pub/Sub API
  • Google Cloud Datastore API

در کنسول Google Cloud Platform ، روی نماد منو در سمت چپ بالای صفحه کلیک کنید:

به پایین بروید و Cloud Storage را در زیربخش Storage انتخاب کنید:

اکنون باید مرورگر Cloud Storage را ببینید و با فرض اینکه از پروژه‌ای استفاده می‌کنید که در حال حاضر هیچ سطل ذخیره‌سازی ابری ندارد، یک کادر محاوره‌ای خواهید دید که از شما دعوت می‌کند یک سطل جدید ایجاد کنید:

برای ایجاد سطل، دکمه Create Bucket را فشار دهید:

یک نام برای سطل خود وارد کنید. همانطور که کادر محاوره ای اشاره می کند، نام سطل باید در تمام فضای ذخیره سازی ابری منحصر به فرد باشد. بنابراین اگر نام واضحی مانند "تست" را انتخاب کنید، احتمالاً متوجه خواهید شد که شخص دیگری قبلاً یک سطل با آن نام ایجاد کرده است و یک خطا دریافت می کند.

همچنین قوانینی در مورد اینکه چه کاراکترهایی در نام سطل مجاز هستند وجود دارد. اگر نام سطل خود را با یک حرف یا عدد شروع کرده و به پایان می رسانید و فقط از خط تیره در وسط استفاده می کنید، آن وقت خوب خواهید بود. اگر سعی می کنید از کاراکترهای خاص استفاده کنید یا سعی کنید نام سطل خود را با چیزی غیر از یک حرف یا عدد شروع یا پایان دهید، کادر محاوره ای قوانین را به شما یادآوری می کند.

یک نام منحصر به فرد برای سطل خود وارد کنید و ایجاد را فشار دهید. اگر چیزی را انتخاب کنید که از قبل استفاده شده است، پیام خطای بالا را مشاهده خواهید کرد. هنگامی که با موفقیت یک سطل ایجاد کردید، به سطل جدید و خالی خود در مرورگر منتقل می شوید:

نام سطلی که مشاهده می کنید، البته متفاوت خواهد بود، زیرا آنها باید در همه پروژه ها منحصر به فرد باشند.

Google Cloud Shell را فعال کنید

از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

سپس روی "Start Cloud Shell" کلیک کنید:

تهیه و اتصال به محیط فقط چند لحظه طول می کشد:

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را بسیار افزایش می دهد. بسیاری از کارهای شما، اگر نه همه، در این آزمایشگاه را می توان به سادگی با یک مرورگر یا Google Chromebook انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی PROJECT_ID شما تنظیم شده است.

برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:

gcloud auth list

خروجی فرمان

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

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

پس از راه اندازی Cloud Shell، بیایید با ایجاد یک پروژه Maven که حاوی Cloud Dataflow SDK برای جاوا است، شروع کنیم.

دستور mvn archetype:generate در پوسته خود به صورت زیر اجرا کنید:

  mvn archetype:generate \
     -DarchetypeArtifactId=google-cloud-dataflow-java-archetypes-examples \
     -DarchetypeGroupId=com.google.cloud.dataflow \
     -DarchetypeVersion=1.9.0 \
     -DgroupId=com.example \
     -DartifactId=first-dataflow \
     -Dversion="0.1" \
     -DinteractiveMode=false \
     -Dpackage=com.example

پس از اجرای دستور، باید یک دایرکتوری جدید به نام first-dataflow در زیر فهرست فعلی خود مشاهده کنید. first-dataflow شامل یک پروژه Maven است که شامل Cloud Dataflow SDK برای جاوا و خطوط لوله نمونه است.

بیایید با ذخیره شناسه پروژه و نام سطل فضای ذخیره سازی ابری خود به عنوان متغیرهای محیطی شروع کنیم. می توانید این کار را در Cloud Shell انجام دهید. حتماً شناسه پروژه خود را جایگزین <your_project_id> کنید.

 export PROJECT_ID=<your_project_id>

اکنون همین کار را برای سطل فضای ذخیره سازی ابری انجام می دهیم. به یاد داشته باشید، برای جایگزینی <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 \
      -Dexec.mainClass=com.example.WordCount \
      -Dexec.args="--project=${PROJECT_ID} \
      --stagingLocation=gs://${BUCKET_NAME}/staging/ \
      --output=gs://${BUCKET_NAME}/output \
      --runner=BlockingDataflowPipelineRunner"

در حالی که کار در حال اجرا است، بیایید کار را در لیست مشاغل پیدا کنیم.

رابط کاربری Cloud Dataflow Monitoring را در کنسول Google Cloud Platform باز کنید. شما باید کار تعداد کلمات خود را با وضعیت Running ببینید:

حالا بیایید به پارامترهای خط لوله نگاه کنیم. با کلیک بر روی نام شغل خود شروع کنید:

هنگامی که یک کار را انتخاب می کنید، می توانید نمودار اجرا را مشاهده کنید. نمودار اجرای خط لوله، هر تبدیل در خط لوله را به عنوان کادری نشان می دهد که حاوی نام تبدیل و برخی اطلاعات وضعیت است. برای مشاهده جزئیات بیشتر می توانید روی قیراط در گوشه سمت راست بالای هر مرحله کلیک کنید:

بیایید ببینیم که خط لوله چگونه داده ها را در هر مرحله تبدیل می کند:

  • Read : در این مرحله خط لوله از یک منبع ورودی می خواند. در این مورد، این یک فایل متنی از Cloud Storage با کل متن نمایشنامه شکسپیر شاه لیر است. خط لوله ما فایل را خط به خط می خواند و از هر کدام یک PCollection به بیرون می دهد، که در آن هر خط در فایل متنی ما یک عنصر در مجموعه است.
  • CountWords : مرحله CountWords دارای دو بخش است. ابتدا، از یک تابع do موازی (ParDo) به نام ExtractWords استفاده می کند تا هر خط را به کلمات جداگانه تبدیل کند. خروجی ExtractWords یک مجموعه PC جدید است که هر عنصر یک کلمه است. مرحله بعدی، Count ، از تبدیل ارائه شده توسط Dataflow SDK استفاده می‌کند که کلید، جفت‌های مقدار را برمی‌گرداند که در آن کلید یک کلمه منحصربه‌فرد است و مقدار آن تعداد دفعاتی است که رخ می‌دهد. در اینجا روش پیاده سازی CountWords آمده است و می توانید فایل WordCount.java کامل را در GitHub بررسی کنید:
  /**
   * A PTransform that converts a PCollection containing lines of text 
   * into a PCollection of formatted word counts.
   */
  public static class CountWords extends PTransform<PCollection<String>,
      PCollection<KV<String, Long>>> {
    @Override
    public PCollection<KV<String, Long>> apply(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.<String>perElement());

      return wordCounts;
    }
  }
  • FormatAsText : این تابعی است که هر کلید، جفت مقدار را در یک رشته قابل چاپ قالب بندی می کند. در اینجا تبدیل FormatAsText برای پیاده سازی این است:
  /** 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 : در این مرحله رشته های قابل چاپ را در چندین فایل متنی خرد شده می نویسیم.

چند دقیقه دیگر به خروجی حاصل از خط لوله نگاهی خواهیم انداخت.

اکنون به صفحه Summary در سمت راست نمودار نگاهی بیندازید که شامل پارامترهای خط لوله است که در دستور mvn compile exec:java قرار داده ایم.

شما همچنین می توانید شمارنده های سفارشی برای خط لوله را مشاهده کنید که در این حالت نشان می دهد که تا کنون با چند خط خالی در حین اجرا مواجه شده است. می توانید شمارنده های جدیدی را به خط لوله خود اضافه کنید تا معیارهای خاص برنامه را ردیابی کنید.

برای مشاهده پیام های خطای خاص می توانید روی نماد Logs کلیک کنید.

با استفاده از منوی کشویی حداقل شدت، پیام هایی را که در برگه گزارش کار ظاهر می شوند فیلتر می کنید.

می‌توانید از دکمه Worker Logs در برگه گزارش‌ها برای مشاهده گزارش‌های کارگر برای نمونه‌های Compute Engine که خط لوله شما را اجرا می‌کنند استفاده کنید. Worker Logs شامل خطوط لاگ ایجاد شده توسط کد شما و کد تولید شده Dataflow است که آن را اجرا می کند.

اگر می‌خواهید نقصی را در خط لوله اشکال‌زدایی کنید، اغلب اوقات ثبت‌های اضافی در Worker Logs وجود دارد که به حل مشکل کمک می‌کند. به خاطر داشته باشید که این گزارش‌ها در همه کارگران جمع‌آوری شده‌اند و می‌توانند فیلتر و جستجو شوند.

در مرحله بعد، بررسی می کنیم که آیا کار شما موفق بوده است.

رابط کاربری Cloud Dataflow Monitoring را در کنسول Google Cloud Platform باز کنید.

ابتدا باید کار تعداد کلمات خود را با وضعیت Running و سپس Succeeded مشاهده کنید:

کار تقریباً 3-4 دقیقه طول خواهد کشید.

زمانی را که خط لوله را اجرا کردید و یک سطل خروجی مشخص کردید را به خاطر دارید؟ بیایید نتیجه را بررسی کنیم (چون نمی خواهید ببینید هر کلمه در شاه لیر چند بار اتفاق افتاده است؟!). در Google Cloud Platform Console به مرورگر Cloud Storage برگردید. در سطل خود، باید فایل های خروجی و فایل های مرحله بندی که شغل شما ایجاد کرده است را ببینید:

می‌توانید منابع خود را از Google Cloud Platform Console خاموش کنید.

مرورگر Cloud Storage را در کنسول Google Cloud Platform باز کنید.

کادر کنار سطلی که ایجاد کردید را انتخاب کنید.

برای حذف دائمی سطل و محتویات آن، روی DELETE کلیک کنید.

شما یاد گرفتید که چگونه با Cloud Dataflow SDK یک پروژه Maven ایجاد کنید، یک نمونه خط لوله را با استفاده از کنسول Google Cloud Platform اجرا کنید، و سطل Cloud Storage مرتبط و محتویات آن را حذف کنید.

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 3.0 Generic و مجوز Apache 2.0 مجوز دارد.