1. بررسی اجمالی
Dataflow چیست؟
Dataflow یک سرویس مدیریت شده برای اجرای طیف گسترده ای از الگوهای پردازش داده است. اسناد موجود در این سایت به شما نشان میدهد که چگونه خطوط لوله پردازش دادههای دستهای و جریانی خود را با استفاده از Dataflow اجرا کنید، از جمله دستورالعملهایی برای استفاده از ویژگیهای سرویس.
Apache Beam SDK یک مدل برنامه نویسی متن باز است که به شما امکان می دهد خطوط لوله دسته ای و جریانی را توسعه دهید. شما خطوط لوله خود را با یک برنامه Apache Beam ایجاد می کنید و سپس آنها را در سرویس Dataflow اجرا می کنید. مستندات پرتو آپاچی اطلاعات مفهومی و مطالب مرجع عمیقی را برای مدل برنامهنویسی پرتو آپاچی، SDKها و سایر اجراکنندهها فراهم میکند.
جریان تجزیه و تحلیل داده ها با سرعت
جریان داده توسعه سریع و ساده خط لوله داده را با تأخیر داده کمتر امکان پذیر می کند.
عملیات و مدیریت را ساده کنید
به تیم ها اجازه دهید به جای مدیریت خوشه های سرور بر برنامه نویسی تمرکز کنند زیرا رویکرد بدون سرور Dataflow سربار عملیات را از بارهای کاری مهندسی داده حذف می کند.
هزینه کل مالکیت را کاهش دهید
مقیاس خودکار منابع همراه با قابلیتهای پردازش دستهای بهینهسازیشده هزینه به این معنی است که Dataflow ظرفیت تقریباً نامحدودی را برای مدیریت بارهای کاری فصلی و پراکنده بدون هزینههای بیش از حد ارائه میدهد.
ویژگی های کلیدی
مدیریت خودکار منابع و تعادل مجدد کار پویا
Dataflow تدارک و مدیریت منابع پردازش را خودکار می کند تا تأخیر را به حداقل برساند و استفاده را به حداکثر برساند، بنابراین نیازی به چرخش نمونه ها یا رزرو آنها به صورت دستی نیست. پارتیشن بندی کار نیز به صورت خودکار و بهینه سازی شده است تا به صورت پویا در کار عقب مانده تعادل ایجاد کند. نیازی به تعقیب "کلیدهای داغ" یا پیش پردازش داده های ورودی نیست.
مقیاس خودکار افقی
مقیاس خودکار افقی منابع کارگر برای توان عملیاتی بهینه منجر به عملکرد کلی قیمت به عملکرد بهتر می شود.
قیمتگذاری زمانبندی منابع انعطافپذیر برای پردازش دستهای
برای پردازش با انعطافپذیری در زمانبندی کار، مانند کارهای شبانه، زمانبندی منابع انعطافپذیر (FlexRS) قیمت پایینتری را برای پردازش دستهای ارائه میدهد. این مشاغل انعطاف پذیر با تضمین بازیابی آنها برای اجرا در یک پنجره شش ساعته در یک صف قرار می گیرند.
این آموزش از https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-maven اقتباس شده است
چیزی که یاد خواهید گرفت
- نحوه ایجاد یک پروژه Maven با Apache Beam با استفاده از Java SDK
- یک نمونه خط لوله را با استفاده از کنسول Google Cloud Platform اجرا کنید
- نحوه حذف سطل Cloud Storage مرتبط و محتویات آن
آنچه شما نیاز دارید
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را در استفاده از سرویسهای پلتفرم ابری Google چگونه ارزیابی میکنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
API ها را فعال کنید
روی نماد منو در سمت چپ بالای صفحه کلیک کنید.
APIs & Services > Dashboard را از منوی کشویی انتخاب کنید.
+ Enable APIs and Services را انتخاب کنید.
"موتور محاسباتی" را در کادر جستجو جستجو کنید. در لیست نتایج ظاهر شده روی "Compute Engine API" کلیک کنید.
در صفحه Google Compute Engine روی Enable کلیک کنید
پس از فعال شدن روی فلش کلیک کنید تا به عقب برگردید.
اکنون API های زیر را جستجو کرده و آنها را نیز فعال کنید:
- Cloud Dataflow
- Stackdriver
- فضای ذخیره سازی ابری
- فضای ذخیره سازی ابری JSON
- BigQuery
- Cloud Pub/Sub
- Cloud Datastore
- APIهای مدیریت منابع ابری
3. یک سطل Cloud Storage جدید ایجاد کنید
در کنسول Google Cloud Platform ، روی نماد منو در سمت چپ بالای صفحه کلیک کنید:
به پایین بروید و Cloud Storage > Browser را در زیربخش Storage انتخاب کنید:
اکنون باید مرورگر Cloud Storage را ببینید و با فرض اینکه از پروژه ای استفاده می کنید که در حال حاضر هیچ سطل ذخیره سازی ابری ندارد، دعوت نامه ای برای ایجاد یک سطل جدید خواهید دید. برای ایجاد سطل، دکمه Create Bucket را فشار دهید:
یک نام برای سطل خود وارد کنید. همانطور که کادر محاوره ای اشاره می کند، نام سطل باید در تمام فضای ذخیره سازی ابری منحصر به فرد باشد. بنابراین اگر نام واضحی مانند "تست" را انتخاب کنید، احتمالاً متوجه خواهید شد که شخص دیگری قبلاً یک سطل با آن نام ایجاد کرده است و یک خطا دریافت می کند.
همچنین قوانینی در مورد اینکه چه کاراکترهایی در نام سطل مجاز هستند وجود دارد. اگر نام سطل خود را با یک حرف یا عدد شروع کرده و به پایان می رسانید و فقط از خط تیره در وسط استفاده می کنید، آن وقت خوب خواهید بود. اگر سعی می کنید از کاراکترهای خاص استفاده کنید یا سعی کنید نام سطل خود را با چیزی غیر از یک حرف یا عدد شروع یا پایان دهید، کادر محاوره ای قوانین را به شما یادآوری می کند.
یک نام منحصر به فرد برای سطل خود وارد کنید و ایجاد را فشار دهید. اگر چیزی را انتخاب کنید که از قبل استفاده شده است، پیام خطای بالا را مشاهده خواهید کرد. هنگامی که با موفقیت یک سطل ایجاد کردید، به سطل جدید و خالی خود در مرورگر منتقل می شوید:
نام سطلی که مشاهده می کنید، البته متفاوت خواهد بود، زیرا آنها باید در همه پروژه ها منحصر به فرد باشند.
4. Cloud Shell را راه اندازی کنید
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر قبلاً Cloud Shell را راهاندازی نکردهاید، با یک صفحه میانی (زیر تاشو) روبرو میشوید که آن را توصیف میکند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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 با استفاده از Java SDK برای Apache Beam شروع کنیم.
Apache Beam یک مدل برنامه نویسی منبع باز برای خطوط لوله داده است. شما این خطوط لوله را با یک برنامه Apache Beam تعریف می کنید و می توانید یک runner مانند 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 است که شامل Cloud Dataflow SDK برای جاوا و خطوط لوله نمونه است.
6. یک خط لوله پردازش متن را در Cloud Dataflow اجرا کنید
بیایید با ذخیره شناسه پروژه و نام سطل فضای ذخیره سازی ابری خود به عنوان متغیرهای محیطی شروع کنیم. می توانید این کار را در 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 \
-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 باز کنید. شما باید کار تعداد کلمات خود را با وضعیت Running ببینید:
حالا بیایید به پارامترهای خط لوله نگاه کنیم. با کلیک بر روی نام شغل خود شروع کنید:
هنگامی که یک کار را انتخاب می کنید، می توانید نمودار اجرا را مشاهده کنید. نمودار اجرای خط لوله، هر تبدیل در خط لوله را به عنوان کادری نشان می دهد که حاوی نام تبدیل و برخی اطلاعات وضعیت است. برای مشاهده جزئیات بیشتر می توانید روی قیراط در گوشه سمت راست بالای هر مرحله کلیک کنید:
بیایید ببینیم که خط لوله چگونه داده ها را در هر مرحله تبدیل می کند:
- Read : در این مرحله خط لوله از یک منبع ورودی می خواند. در این مورد، این یک فایل متنی از Cloud Storage با کل متن نمایشنامه شکسپیر شاه لیر است. خط لوله ما فایل را خط به خط می خواند و از هر کدام یک
PCollection
به بیرون می دهد، که در آن هر خط در فایل متنی ما یک عنصر در مجموعه است. - CountWords : مرحله
CountWords
دارای دو بخش است. ابتدا، از یک تابع do موازی (ParDo) به نامExtractWords
استفاده می کند تا هر خط را به کلمات جداگانه تبدیل کند. خروجی ExtractWords یک مجموعه PC جدید است که هر عنصر یک کلمه است. مرحله بعدی،Count
، از تبدیل ارائه شده توسط Java SDK استفاده میکند که کلید، جفتهای مقدار را برمیگرداند که در آن کلید یک کلمه منحصربهفرد است و مقدار آن تعداد دفعاتی است که رخ میدهد. در اینجا روش پیاده سازی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 : در این مرحله رشته های قابل چاپ را در چندین فایل متنی خرد شده می نویسیم.
چند دقیقه دیگر به خروجی حاصل از خط لوله نگاهی خواهیم انداخت.
اکنون به صفحه Job info در سمت راست نمودار نگاهی بیندازید که شامل پارامترهای خط لوله است که در دستور mvn compile exec:java
قرار داده ایم.
شما همچنین می توانید شمارنده های سفارشی برای خط لوله را مشاهده کنید که در این حالت نشان می دهد که تا کنون با چند خط خالی در حین اجرا مواجه شده است. می توانید شمارنده های جدیدی را به خط لوله خود اضافه کنید تا معیارهای خاص برنامه را ردیابی کنید.
برای مشاهده پیام های خطای خاص می توانید روی نماد Logs در پایین کنسول کلیک کنید.
پانل به طور پیش فرض پیام های Job Log را نشان می دهد که وضعیت کار را به طور کلی گزارش می کند. می توانید از انتخابگر حداقل شدت برای فیلتر کردن پیشرفت کار و پیام های وضعیت استفاده کنید.
انتخاب یک مرحله خط لوله در نمودار، نمای را به گزارشهای تولید شده توسط کد شما و کد تولید شده در مرحله خط لوله تغییر میدهد.
برای بازگشت به گزارش کار، با کلیک کردن در خارج از نمودار یا با استفاده از دکمه بستن در پانل سمت راست، مرحله را از حالت انتخاب خارج کنید.
میتوانید از دکمه Worker Logs در برگه گزارشها برای مشاهده گزارشهای کارگر برای نمونههای Compute Engine که خط لوله شما را اجرا میکنند استفاده کنید. Worker Logs شامل خطوط لاگ ایجاد شده توسط کد شما و کد تولید شده Dataflow است که آن را اجرا می کند.
اگر میخواهید نقصی را در خط لوله اشکالزدایی کنید، اغلب اوقات ثبتهای اضافی در Worker Logs وجود دارد که به حل مشکل کمک میکند. به خاطر داشته باشید که این گزارشها در همه کارگران جمعآوری شدهاند و میتوانند فیلتر و جستجو شوند.
رابط نظارت جریان داده فقط جدیدترین پیامهای گزارش را نشان میدهد. میتوانید با کلیک کردن روی پیوند Google Cloud Observability در سمت راست صفحه گزارشها، همه گزارشها را مشاهده کنید.
در اینجا خلاصه ای از انواع مختلف گزارش موجود برای مشاهده از صفحه مانیتورینگ → گزارش ها آمده است:
- گزارشهای پیام شغلی حاوی پیامهای سطح کار هستند که اجزای مختلف Dataflow تولید میکنند. به عنوان مثال می توان به پیکربندی مقیاس خودکار، هنگام راه اندازی یا خاموش شدن کارگران، پیشرفت در مرحله کار و خطاهای شغلی اشاره کرد. خطاهای سطح کارگر که از خراب شدن کد کاربر منشأ میگیرند و در گزارشهای کارگر وجود دارند، تا لاگهای پیام شغلی نیز منتشر میشوند.
- لاگ های کارگر توسط کارگران Dataflow تولید می شوند. کارگران بیشتر کارهای خط لوله را انجام می دهند (به عنوان مثال، استفاده از ParDos شما روی داده ها). گزارشهای کارگر حاوی پیامهایی هستند که توسط کد و جریان داده شما ثبت شدهاند.
- گزارشهای کارگر-استارتاپ در اکثر کارهای Dataflow وجود دارند و میتوانند پیامهای مربوط به فرآیند راهاندازی را ضبط کنند. فرآیند راهاندازی شامل بارگیری شیشههای یک کار از فضای ذخیرهسازی ابری و سپس راهاندازی کارگران است. اگر مشکلی در راه اندازی کارگران وجود دارد، این سیاههها مکان خوبی برای جستجو هستند.
- گزارشهای shuffler حاوی پیامهایی از کارگران است که نتایج عملیات خط لوله موازی را ادغام میکند.
- لاگهای docker و kubelet حاوی پیامهای مرتبط با این فناوریهای عمومی هستند که روی کارگران Dataflow استفاده میشوند.
در مرحله بعد، بررسی می کنیم که آیا کار شما موفق بوده است.
7. بررسی کنید که کار شما موفق بوده است
رابط وب Cloud Dataflow را در کنسول Google Cloud Platform باز کنید.
ابتدا باید کار تعداد کلمات خود را با وضعیت Running و سپس Succeeded مشاهده کنید:
کار تقریباً 3-4 دقیقه طول خواهد کشید.
زمانی را که خط لوله را اجرا کردید و یک سطل خروجی مشخص کردید را به خاطر دارید؟ بیایید نتیجه را بررسی کنیم (چون نمی خواهید ببینید هر کلمه در شاه لیر چند بار اتفاق افتاده است؟!). در Google Cloud Platform Console به مرورگر Cloud Storage برگردید. در سطل خود، باید فایل های خروجی و فایل های مرحله بندی که شغل شما ایجاد کرده است را ببینید:
8. منابع خود را خاموش کنید
میتوانید منابع خود را از Google Cloud Platform Console خاموش کنید.
مرورگر Cloud Storage را در کنسول Google Cloud Platform باز کنید.
کادر کنار سطلی که ایجاد کردید را انتخاب کنید و روی DELETE کلیک کنید تا سطل و محتویات آن برای همیشه حذف شود.
9. تبریک!
شما یاد گرفتید که چگونه با Cloud Dataflow SDK یک پروژه Maven ایجاد کنید، یک نمونه خط لوله را با استفاده از کنسول Google Cloud Platform اجرا کنید، و سطل Cloud Storage مرتبط و محتویات آن را حذف کنید.
بیشتر بدانید
- اسناد جریان داده: https://cloud.google.com/dataflow/docs/
مجوز
این اثر تحت مجوز Creative Commons Attribution 3.0 Generic و مجوز Apache 2.0 مجوز دارد.