Dataflow, एक यूनिफ़ाइड प्रोग्रामिंग मॉडल है. साथ ही, यह मैनेज की जाने वाली सेवा है. इसका इस्तेमाल, डेटा प्रोसेसिंग के अलग-अलग पैटर्न को डेवलप और एक्ज़ीक्यूट करने के लिए किया जाता है. जैसे, ईटीएल, बैच कंप्यूटेशन, और लगातार कंप्यूटेशन. Dataflow एक मैनेज की गई सेवा है. इसलिए, यह मांग के हिसाब से संसाधनों को बांट सकता है, ताकि कम से कम समय में काम पूरा हो सके. साथ ही, यह संसाधनों का ज़्यादा से ज़्यादा इस्तेमाल करता है.
Dataflow मॉडल, बैच और स्ट्रीम प्रोसेसिंग को एक साथ इस्तेमाल करता है. इससे डेवलपर को सटीकता, लागत, और प्रोसेसिंग में लगने वाले समय के बीच समझौता नहीं करना पड़ता. इस कोडलैब में, आपको Dataflow पाइपलाइन चलाने का तरीका पता चलेगा. यह पाइपलाइन, किसी टेक्स्ट फ़ाइल में मौजूद यूनीक शब्दों की संख्या गिनती है.
यह ट्यूटोरियल, https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-maven से लिया गया है
आपको क्या सीखने को मिलेगा
- Cloud Dataflow SDK टूल की मदद से Maven प्रोजेक्ट बनाने का तरीका
- Google Cloud Platform Console का इस्तेमाल करके, पाइपलाइन का उदाहरण चलाएं
- Cloud Storage से जुड़ी बकेट और उसके कॉन्टेंट को मिटाने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
Google Cloud Platform की सेवाओं को इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?
अपने हिसाब से एनवायरमेंट सेट अप करना
अगर आपके पास पहले से कोई Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform Console (console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं:
प्रोजेक्ट आईडी याद रखें. यह सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इस कोड लैब में इसे बाद में PROJECT_ID
के तौर पर दिखाया जाएगा.
इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.
इस कोडलैब को पूरा करने में आपको कुछ डॉलर से ज़्यादा खर्च नहीं करने पड़ेंगे. हालांकि, अगर आपको ज़्यादा संसाधनों का इस्तेमाल करना है या उन्हें चालू रखना है, तो यह खर्च बढ़ सकता है. इस दस्तावेज़ के आखिर में "सफ़ाई" सेक्शन देखें.
Google Cloud Platform के नए उपयोगकर्ता, 300 डॉलर के क्रेडिट के साथ मुफ़्त में आज़माने की सुविधा पा सकते हैं.
एपीआई चालू करना
स्क्रीन पर सबसे ऊपर बाईं ओर मौजूद, मेन्यू आइकॉन पर क्लिक करें.
ड्रॉप-डाउन से API मैनेजर चुनें.
खोज बॉक्स में "Google Compute Engine" खोजें. नतीजों की सूची में दिखने वाले "Google Compute Engine API" पर क्लिक करें.
Google Compute Engine पेज पर, चालू करें पर क्लिक करें
इसे चालू करने के बाद, वापस जाने के लिए ऐरो पर क्लिक करें.
अब इन एपीआई को खोजें और इन्हें भी चालू करें:
- 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 Console में, स्क्रीन पर सबसे ऊपर बाईं ओर मौजूद मेन्यू आइकॉन पर क्लिक करें:
नीचे की ओर स्क्रोल करें और स्टोरेज सब-सेक्शन में जाकर, Cloud Storage को चुनें:
अब आपको Cloud Storage Browser दिखेगा. अगर आपने ऐसा प्रोजेक्ट इस्तेमाल किया है जिसमें फ़िलहाल कोई Cloud Storage बकेट नहीं है, तो आपको एक डायलॉग बॉक्स दिखेगा. इसमें आपको नया बकेट बनाने का न्योता दिया जाएगा:
बकेट बनाने के लिए, बकेट बनाएं बटन दबाएं:
अपने बकेट का नाम डालें. डायलॉग बॉक्स में दिए गए नोट के मुताबिक, Cloud Storage के सभी बकेट के नाम अलग-अलग होने चाहिए. इसलिए, अगर आपने कोई सामान्य नाम चुना है, जैसे कि "test", तो हो सकता है कि किसी और ने पहले ही उस नाम से कोई बकेट बना ली हो. ऐसे में, आपको गड़बड़ी का मैसेज मिलेगा.
बकेट के नामों में किन वर्णों का इस्तेमाल किया जा सकता है, इसके बारे में भी कुछ नियम हैं. अगर बकेट का नाम किसी अक्षर या संख्या से शुरू और खत्म होता है और बीच में सिर्फ़ डैश का इस्तेमाल किया जाता है, तो आपको कोई समस्या नहीं होगी. अगर आपने बकेट के नाम में खास वर्णों का इस्तेमाल किया है या नाम की शुरुआत या खत्म किसी अक्षर या संख्या के अलावा किसी और वर्ण से की है, तो डायलॉग बॉक्स में आपको नियमों के बारे में याद दिलाया जाएगा.
अपने बकेट के लिए कोई यूनीक नाम डालें और बनाएं पर क्लिक करें. अगर आपने ऐसा नाम चुना है जिसका इस्तेमाल पहले से किया जा रहा है, तो आपको ऊपर दिखाया गया गड़बड़ी का मैसेज दिखेगा. बकेट बन जाने के बाद, आपको ब्राउज़र में अपनी नई, खाली बकेट पर ले जाया जाएगा:
आपको जो बकेट का नाम दिखेगा वह अलग होगा, क्योंकि सभी प्रोजेक्ट के लिए बकेट का नाम अलग होना चाहिए.
Google Cloud Shell चालू करना
GCP Console में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर मौजूद Cloud Shell आइकॉन पर क्लिक करें:
इसके बाद, "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 लॉन्च होने के बाद, चलिए Cloud Dataflow SDK for Java वाला Maven प्रोजेक्ट बनाते हैं.
अपने शेल में 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 प्रोजेक्ट होता है. इसमें Java के लिए Cloud Dataflow SDK और उदाहरण के तौर पर पाइपलाइन शामिल होती हैं.
सबसे पहले, हम अपने प्रोजेक्ट आईडी और 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 \
-Dexec.mainClass=com.example.WordCount \
-Dexec.args="--project=${PROJECT_ID} \
--stagingLocation=gs://${BUCKET_NAME}/staging/ \
--output=gs://${BUCKET_NAME}/output \
--runner=BlockingDataflowPipelineRunner"
जब जॉब चल रही हो, तब जॉब की सूची में जॉब ढूंढें.
Google Cloud Platform Console में, Cloud Dataflow Monitoring UI खोलें. आपको शब्द गिनने का काम चल रहा है स्टेटस के साथ दिखेगा:
अब पाइपलाइन के पैरामीटर देखते हैं. अपनी नौकरी के नाम पर क्लिक करके शुरू करें:
किसी जॉब को चुनने पर, एक्ज़ीक्यूशन ग्राफ़ देखा जा सकता है. पाइपलाइन के एक्ज़ीक्यूशन ग्राफ़ में, पाइपलाइन के हर ट्रांसफ़ॉर्म को एक बॉक्स के तौर पर दिखाया जाता है. इस बॉक्स में ट्रांसफ़ॉर्म का नाम और स्थिति से जुड़ी कुछ जानकारी होती है. ज़्यादा जानकारी देखने के लिए, हर चरण के सबसे ऊपर दाएं कोने में मौजूद कैरट पर क्लिक करें:
आइए, देखते हैं कि पाइपलाइन हर चरण में डेटा को कैसे बदलती है:
- रीड: इस चरण में, पाइपलाइन किसी इनपुट सोर्स से डेटा पढ़ती है. इस मामले में, यह Cloud Storage से ली गई टेक्स्ट फ़ाइल है. इसमें शेक्सपियर के नाटक किंग लियर का पूरा टेक्स्ट मौजूद है. हमारी पाइपलाइन, फ़ाइल को लाइन-दर-लाइन पढ़ती है और हर लाइन को
PCollection
के तौर पर आउटपुट करती है. हमारी टेक्स्ट फ़ाइल की हर लाइन, कलेक्शन में मौजूद एक एलिमेंट होती है. - CountWords:
CountWords
चरण के दो हिस्से होते हैं. यह फ़ंक्शन, हर लाइन को अलग-अलग शब्दों में टोकनाइज़ करने के लिए,ExtractWords
नाम के पैरलल डू फ़ंक्शन (ParDo) का इस्तेमाल करता है. ExtractWords का आउटपुट एक नया PCollection होता है, जिसमें हर एलिमेंट एक शब्द होता है. अगले चरणCount
में, Dataflow SDK से मिले ट्रांसफ़ॉर्म का इस्तेमाल किया जाता है. यह ट्रांसफ़ॉर्म, कुंजी और वैल्यू के ऐसे जोड़े दिखाता है जिनमें कुंजी एक यूनीक शब्द होता है और वैल्यू यह बताती है कि वह शब्द कितनी बार आया है. यहांCountWords
को लागू करने का तरीका बताया गया है. साथ ही, GitHub पर WordCount.java फ़ाइल देखी जा सकती है:
/**
* 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: इस चरण में, हम प्रिंट की जा सकने वाली स्ट्रिंग को कई शार्ड की गई टेक्स्ट फ़ाइलों में लिखते हैं.
हम कुछ ही मिनटों में, पाइपलाइन से मिले आउटपुट पर नज़र डालेंगे.
अब ग्राफ़ के दाईं ओर मौजूद खास जानकारी पेज देखें. इसमें पाइपलाइन के वे पैरामीटर शामिल हैं जिन्हें हमने mvn compile exec:java
कमांड में शामिल किया था.
आपको पाइपलाइन के लिए कस्टम काउंटर भी दिख सकते हैं. इस मामले में, यह दिखाता है कि अब तक कितनी खाली लाइनें मिली हैं. ऐप्लिकेशन से जुड़ी मेट्रिक ट्रैक करने के लिए, अपनी पाइपलाइन में नए काउंटर जोड़े जा सकते हैं.
गड़बड़ी के मैसेज देखने के लिए, लॉग आइकॉन पर क्लिक करें.
'जॉब लॉग' टैब में दिखने वाले मैसेज को फ़िल्टर करने के लिए, 'कम से कम गंभीरता' ड्रॉप-डाउन मेन्यू का इस्तेमाल करें.
पाइपलाइन चलाने वाले Compute Engine इंस्टेंस के वर्कर लॉग देखने के लिए, लॉग टैब में मौजूद वर्कर लॉग बटन का इस्तेमाल करें. वर्कर लॉग में, आपके कोड से जनरेट हुई लॉग लाइनें और उसे चलाने वाला Dataflow जनरेट किया गया कोड शामिल होता है.
अगर आपको पाइपलाइन में हुई गड़बड़ी को ठीक करना है, तो अक्सर वर्कर लॉग में अतिरिक्त लॉगिंग होती है. इससे समस्या को हल करने में मदद मिलती है. ध्यान रखें कि ये लॉग, सभी वर्कर के लिए एग्रीगेट किए जाते हैं. साथ ही, इन्हें फ़िल्टर और खोजा जा सकता है.
अगले चरण में, हम यह देखेंगे कि आपका काम पूरा हुआ है या नहीं.
Google Cloud Platform Console में, Cloud Dataflow Monitoring UI खोलें.
आपको शब्द गिनने का काम, चल रहा है स्टेटस के साथ दिखेगा. इसके बाद, यह पूरा हो गया स्टेटस के साथ दिखेगा:
इस प्रोसेस को पूरा होने में करीब तीन से चार मिनट लगेंगे.
क्या आपको याद है कि आपने पाइपलाइन कब चलाई थी और आउटपुट बकेट के बारे में जानकारी कब दी थी? आइए, नतीजे पर एक नज़र डालते हैं. क्या आपको यह नहीं जानना कि किंग लियर में हर शब्द कितनी बार आया है?!). Google Cloud Platform Console में, Cloud Storage ब्राउज़र पर वापस जाएं. आपको अपने बकेट में, आउटपुट फ़ाइलें और स्टेजिंग फ़ाइलें दिखनी चाहिए. ये फ़ाइलें आपके जॉब ने बनाई हैं:
Google Cloud Platform Console से अपने संसाधनों को बंद किया जा सकता है.
Google Cloud Platform Console में Cloud Storage ब्राउज़र खोलें.
आपने जो बकेट बनाई है उसके बगल में मौजूद चेकबॉक्स को चुनें.
बकेट और उसके कॉन्टेंट को हमेशा के लिए मिटाने के लिए, मिटाएं पर क्लिक करें.
आपने Cloud Dataflow SDK की मदद से Maven प्रोजेक्ट बनाने, Google Cloud Platform Console का इस्तेमाल करके पाइपलाइन का उदाहरण चलाने, और उससे जुड़े Cloud Storage बकेट और उसके कॉन्टेंट को मिटाने का तरीका सीखा.
ज़्यादा जानें
- Dataflow से जुड़े दस्तावेज़: https://cloud.google.com/dataflow/docs/
लाइसेंस
इस काम के लिए, Creative Commons एट्रिब्यूशन 3.0 जेनेरिक लाइसेंस और Apache 2.0 लाइसेंस के तहत लाइसेंस मिला है.