1. जानकारी - Google Dataproc
Dataproc, Apache Spark, Apache Flink, Presto, और अन्य कई ओपन सोर्स टूल और फ़्रेमवर्क चलाने के लिए, पूरी तरह से मैनेज की जाने वाली और आसानी से स्केल की जा सकने वाली सेवा है. Dataproc का इस्तेमाल, डेटा लेक को बेहतर बनाने, ईटीएल / ईएलटी, और सुरक्षित डेटा साइंस के लिए किया जा सकता है. साथ ही, इसे दुनिया भर में कहीं भी इस्तेमाल किया जा सकता है. Dataproc को Google Cloud की कई सेवाओं के साथ इंटिग्रेट किया गया है. इनमें BigQuery, Cloud Storage, Vertex AI, और Dataplex शामिल हैं.
Dataproc तीन तरह से उपलब्ध है:
- Dataproc Serverless की मदद से, PySpark की जॉब चलाई जा सकती हैं. इसके लिए, आपको इंफ़्रास्ट्रक्चर और ऑटो स्केलिंग को कॉन्फ़िगर करने की ज़रूरत नहीं होती. Dataproc Serverless, PySpark के बैच वर्कलोड और सेशन / नोटबुक के साथ काम करता है.
- Google Compute Engine पर Dataproc की मदद से, Hadoop YARN क्लस्टर को मैनेज किया जा सकता है. इसका इस्तेमाल, YARN पर आधारित Spark के वर्कलोड के लिए किया जा सकता है. इसके अलावा, Flink और Presto जैसे ओपन सोर्स टूल भी इस्तेमाल किए जा सकते हैं. अपने क्लाउड-आधारित क्लस्टर को, वर्टिकल या हॉरिज़ॉन्टल स्केलिंग के हिसाब से बनाया जा सकता है. इसमें ऑटो स्केलिंग भी शामिल है.
- Google Kubernetes Engine पर Dataproc की मदद से, GKE इंफ़्रास्ट्रक्चर में Dataproc के वर्चुअल क्लस्टर कॉन्फ़िगर किए जा सकते हैं. इनका इस्तेमाल, Spark, PySpark, SparkR या Spark SQL की जॉब सबमिट करने के लिए किया जा सकता है.
2. Google Cloud VPC पर Dataproc क्लस्टर बनाना
इस चरण में, Google Cloud Console का इस्तेमाल करके, Google Cloud पर Dataproc क्लस्टर बनाया जाएगा.
सबसे पहले, कंसोल पर Dataproc सेवा का एपीआई चालू करें. एपीआई चालू होने के बाद, खोज बार में "Dataproc" खोजें और क्लस्टर बनाएं पर क्लिक करें.
Dataproc क्लस्टर चलाने के लिए, Google Compute Engine(GCE) के वीएम को बुनियादी इंफ़्रास्ट्रक्चर के तौर पर इस्तेमाल करने के लिए, Compute Engine पर क्लस्टर चुनें.

अब आप क्लस्टर बनाने वाले पेज पर हैं.

इस पेज पर:
- क्लस्टर के लिए कोई यूनीक नाम डालें.
- कोई खास इलाका चुनें. ज़ोन भी चुना जा सकता है. हालांकि, Dataproc आपके लिए अपने-आप कोई ज़ोन चुन सकता है. इस कोडलैब के लिए, "us-central1" और "us-central1-c" चुनें.
- "स्टैंडर्ड" क्लस्टर टाइप चुनें. इससे यह पक्का होता है कि एक मास्टर नोड मौजूद हो.
- नोड कॉन्फ़िगर करें टैब में, पुष्टि करें कि दो वर्कर नोड बनाए जाएंगे.
- क्लस्टर को पसंद के मुताबिक बनाएं सेक्शन में, कॉम्पोनेंट गेटवे चालू करें के बगल में मौजूद बॉक्स को चुनें. इससे क्लस्टर पर वेब इंटरफ़ेस का ऐक्सेस मिलता है. इनमें Spark यूज़र इंटरफ़ेस (यूआई), Yarn Node Manager, और Jupyter नोटबुक शामिल हैं.
- वैकल्पिक कॉम्पोनेंट में, Jupyter नोटबुक चुनें. इससे क्लस्टर को Jupyter नोटबुक सर्वर के साथ कॉन्फ़िगर किया जाता है.
- बाकी सेटिंग में कोई बदलाव न करें और क्लस्टर बनाएं पर क्लिक करें.
इससे एक Dataproc क्लस्टर स्पिन अप हो जाएगा.
3. क्लस्टर लॉन्च करना और उसमें SSH करना
जब क्लस्टर की स्थिति चालू है में बदल जाए, तब Dataproc कंसोल में जाकर, क्लस्टर के नाम पर क्लिक करें.

क्लस्टर के मास्टर नोड और दो वर्कर नोड देखने के लिए, वीएम इंस्टेंस टैब पर क्लिक करें.

मास्टर नोड में लॉग इन करने के लिए, मास्टर नोड के बगल में मौजूद SSH पर क्लिक करें.

डायरेक्ट्री का स्ट्रक्चर देखने के लिए, hdfs कमांड चलाएं.
hadoop_commands_example
sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51
sudo hadoop fs -ls /
4. वेब इंटरफ़ेस और कॉम्पोनेंट गेटवे
Dataproc क्लस्टर कंसोल में जाकर, अपने क्लस्टर के नाम पर क्लिक करें. इसके बाद, वेब इंटरफ़ेस टैब पर क्लिक करें.

इससे उपलब्ध वेब इंटरफ़ेस दिखते हैं. इनमें Jupyter भी शामिल है. Jupyter नोटबुक खोलने के लिए, Jupyter पर क्लिक करें. इसका इस्तेमाल, GCS पर सेव किए गए PySpark में नोटबुक बनाने के लिए किया जा सकता है. साथ ही, Google Cloud Storage पर अपनी नोटबुक सेव की जा सकती है और इस कोडलैब में इस्तेमाल करने के लिए, PySpark नोटबुक खोली जा सकती है.
5. Spark की जॉब की निगरानी करना और उन्हें देखना
Dataproc क्लस्टर चालू होने के बाद, PySpark की बैच जॉब बनाएं और उसे Dataproc क्लस्टर में सबमिट करें.
PySpark स्क्रिप्ट सेव करने के लिए, Google Cloud Storage (GCS) बकेट बनाएं. पक्का करें कि बकेट, Dataproc क्लस्टर वाले इलाके में ही बनाई गई हो.

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 .....")
इस स्क्रिप्ट को Dataproc में, Spark की बैच जॉब के तौर पर सबमिट करें. बाईं ओर दिए गए नेविगेशन मेन्यू में, जॉब पर क्लिक करें. इसके बाद, जॉब सबमिट करें पर क्लिक करें

जॉब आईडी और इलाका डालें. अपना क्लस्टर चुनें और Spark स्क्रिप्ट की GCS लोकेशन डालें. आपने इस स्क्रिप्ट को कॉपी किया था. यह जॉब, Dataproc पर Spark की बैच जॉब के तौर पर चलेगी.
प्रॉपर्टी में, spark.submit.deployMode की और client वैल्यू जोड़ें. इससे यह पक्का होगा कि ड्राइवर, Dataproc के मास्टर नोड में चलेगा, न कि वर्कर नोड में. बैच जॉब को Dataproc में सबमिट करने के लिए, सबमिट करें पर क्लिक करें.

Spark स्क्रिप्ट, Dataframe बनाएगी और उसे Hive टेबल test_table_1 में लिखेगी.
जॉब के सही तरीके से चलने के बाद, मॉनिटरिंग टैब में कंसोल प्रिंट स्टेटमेंट देखे जा सकते हैं.

Hive टेबल बनने के बाद, Hive की एक और क्वेरी वाली जॉब सबमिट करें. इससे टेबल का कॉन्टेंट चुना जा सकेगा और उसे कंसोल पर दिखाया जा सकेगा.
इन प्रॉपर्टी के साथ एक और जॉब बनाएं:

ध्यान दें कि जॉब टाइप को Hive पर सेट किया गया है और क्वेरी सोर्स टाइप क्वेरी टेक्स्ट है. इसका मतलब है कि हम क्वेरी टेक्स्ट टेक्स्टबॉक्स में, पूरा HiveQL स्टेटमेंट लिखेंगे.
जॉब सबमिट करें. बाकी पैरामीटर डिफ़ॉल्ट के तौर पर सेट रहेंगे.

ध्यान दें कि HiveQL, सभी रिकॉर्ड कैसे चुनता है और उन्हें कंसोल पर दिखाता है.
6. ऑटो स्केलिंग
ऑटो स्केलिंग, किसी वर्कलोड के लिए क्लस्टर के वर्कर नोड की "सही" संख्या का अनुमान लगाने का काम है.
Dataproc AutoscalingPolicies API, क्लस्टर के संसाधन मैनेजमेंट को ऑटोमेट करने का एक तरीका उपलब्ध कराता है. साथ ही, यह क्लस्टर के वर्कर वीएम की ऑटो स्केलिंग की सुविधा देता है. ऑटो स्केलिंग की नीति, एक ऐसा कॉन्फ़िगरेशन है जिसे दोबारा इस्तेमाल किया जा सकता है. इसमें बताया जाता है कि ऑटो स्केलिंग की नीति का इस्तेमाल करने वाले क्लस्टर के वर्कर को कैसे स्केल किया जाना चाहिए. यह क्लस्टर के चालू रहने तक, क्लस्टर के संसाधनों पर बेहतर कंट्रोल पाने के लिए, स्केलिंग की सीमाएं, फ़्रीक्वेंसी, और एग्रेसिवनेस तय करता है.
Dataproc की ऑटो स्केलिंग नीतियां, YAML फ़ाइलों का इस्तेमाल करके लिखी जाती हैं. इन YAML फ़ाइलों को, क्लस्टर बनाने के लिए सीएलआई कमांड में पास किया जाता है. इसके अलावा, Cloud Console से क्लस्टर बनाते समय, इन्हें GCS बकेट से चुना जाता है.
यहां 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 के वर्शन की सूची देखें. क्लस्टर बनाते समय, वैकल्पिक कॉम्पोनेंट नाम के अन्य कॉम्पोनेंट इंस्टॉल किए जा सकते हैं.

कंसोल से Dataproc क्लस्टर बनाते समय, हमने वैकल्पिक कॉम्पोनेंट चालू किए हैं और Jupyter नोटबुक को वैकल्पिक कॉम्पोनेंट के तौर पर चुना है.
8. संसाधन साफ़ करना
क्लस्टर को साफ़ करने के लिए, Dataproc कंसोल में जाकर क्लस्टर चुनें. इसके बाद, बंद करें पर क्लिक करें. क्लस्टर बंद होने के बाद, उसे मिटाने के लिए मिटाएं पर क्लिक करें.
Dataproc क्लस्टर मिटाने के बाद, उन GCS बकेट को मिटाएं जिनमें कोड कॉपी किया गया था.
संसाधनों को साफ़ करने और अनचाहे बिलिंग को रोकने के लिए, Dataproc क्लस्टर को पहले बंद करना होगा और फिर मिटाना होगा.
क्लस्टर को बंद करने और मिटाने से पहले, पक्का करें कि HDFS स्टोरेज में लिखा गया सारा डेटा, ड्यूरेबल स्टोरेज के लिए GCS में कॉपी कर लिया गया हो.
क्लस्टर को बंद करने के लिए, बंद करें पर क्लिक करें.

क्लस्टर बंद होने के बाद, उसे मिटाने के लिए मिटाएं पर क्लिक करें.
पुष्टि करने वाले डायलॉग में, क्लस्टर को मिटाने के लिए मिटाएं पर क्लिक करें.
