7 मिनट लाल

इंटरएक्टिव स्पार्क जॉब्स के साथ अपने स्पार्क क्लस्टर को कैसे ऑप्टिमाइज़ करें

Spark on Kubernetes

इस लेख में, आप सीखेंगे:

  • अपने स्पार्क नौकरी निष्पादन समय को कैसे कम करें
  • इलम में एक इंटरैक्टिव नौकरी क्या है
  • इंटरैक्टिव स्पार्क जॉब कैसे चलाएं
  • इलम एपीआई और स्पार्क एपीआई का उपयोग करके स्पार्क जॉब चलाने के बीच अंतर

इलम नौकरी के प्रकार

इलम में आप तीन प्रकार की नौकरियां चला सकते हैं: एकल नौकरी , इंटरएक्टिव जॉब और इंटरएक्टिव कोड . इस लेख में, हम इंटरएक्टिव जॉब प्रकार। हालांकि, तीन प्रकार की नौकरियों के बीच अंतर जानना महत्वपूर्ण है, तो आइए प्रत्येक का त्वरित अवलोकन करें।

के साथ एकल नौकरियां , आप कोड जैसे प्रोग्राम सबमिट कर सकते हैं। वे आपको रनटाइम के दौरान बातचीत के बिना, पूर्व-संकलित कोड के साथ क्लस्टर में एक स्पार्क एप्लिकेशन सबमिट करने की अनुमति देते हैं। इस मोड में, आपको इलम को एक संकलित जार भेजना होगा, जिसका उपयोग एकल नौकरी शुरू करने के लिए किया जाता है। आप या तो इसे सीधे भेज सकते हैं, या आप इसे S3 बाल्टी से प्राप्त करने के लिए AWS क्रेडेंशियल्स का उपयोग कर सकते हैं। एकल नौकरी के उपयोग का एक विशिष्ट उदाहरण किसी प्रकार का डेटा तैयार करने का कार्य होगा।

इलम भी एक प्रदान करता है इंटरैक्टिव कोड मोड , जो आपको रनटाइम पर कमांड सबमिट करने की अनुमति देता है। यह उन कार्यों के लिए उपयोगी है जहां आपको डेटा के साथ सहभागिता करने की आवश्यकता होती है, जैसे खोजपूर्ण डेटा विश्लेषण।

इंटरएक्टिव नौकरी

इंटरएक्टिव नौकरियों में लंबे समय तक चलने वाले सत्र होते हैं, जहां आप नौकरी के उदाहरण डेटा को तुरंत निष्पादित करने के लिए भेज सकते हैं। इस तरह के मोड की हत्यारा विशेषता यह है कि आपको स्पार्क संदर्भ को आरंभ करने की प्रतीक्षा करने की आवश्यकता नहीं है। यदि उपयोगकर्ता एक ही नौकरी आईडी की ओर इशारा कर रहे थे, तो वे उसी स्पार्क संदर्भ के साथ बातचीत करेंगे। इलम स्पार्क एप्लिकेशन लॉजिक को लंबे समय तक चलने वाले स्पार्क जॉब में लपेटता है जो स्पार्क संदर्भ आरंभीकरण की प्रतीक्षा किए बिना तुरंत गणना अनुरोधों को संभालने में सक्षम है।

एक इंटरैक्टिव नौकरी शुरू करना

आइए एक नजर डालते हैं कि इलम का इंटरैक्टिव सत्र कैसे शुरू किया जा सकता है। पहली चीज जो हमें करनी है वह है इलम की स्थापना करना। आप इसे मिनिक्यूब के साथ आसानी से कर सकते हैं। इसके तहत इलम इंस्टॉलेशन के साथ एक ट्यूटोरियल उपलब्ध है जोड . अगले चरण में, हमें एक जार फ़ाइल बनानी होगी जिसमें इलम के जॉब इंटरफेस का कार्यान्वयन शामिल है। इलम जॉब एपीआई का उपयोग करने के लिए, हमें इसे कुछ निर्भरता प्रबंधकों, जैसे मेवेन या ग्रैडल के साथ परियोजना में जोड़ना होगा। इस उदाहरण में, हम पीआई की गणना करने के लिए ग्रैडल के साथ कुछ स्काला कोड का उपयोग करेंगे।

पूरा उदाहरण हमारे पर उपलब्ध है। गिटहब .

यदि आप इसे स्वयं नहीं बनाना पसंद करते हैं, तो आप संकलित जार फ़ाइल पा सकते हैं यहाँ .

पहला कदम हमारे प्रोजेक्ट के लिए एक फ़ोल्डर बनाना और निर्देशिका को उसमें बदलना है।

$ mkdir इंटरैक्टिव-जॉब-उदाहरण
$ सीडी इंटरैक्टिव-नौकरी-उदाहरण 

यदि आपके पास अपने कंप्यूटर पर ग्रैडल का नवीनतम संस्करण स्थापित नहीं है, तो आप जांच सकते हैं कि यह कैसे करना है यहाँ . उसके बाद प्रोजेक्ट निर्देशिका के अंदर से एक टर्मिनल में निम्न आदेश चलाएँ:

$ ग्रैडल इनिट 

डीएसएल के रूप में ग्रूवी के साथ एक स्काला एप्लिकेशन चुनें। आउटपुट इस तरह दिखना चाहिए:

ग्रैडल डेमन शुरू करना (बाद के बिल्ड तेजी से होंगे)

उत्पन्न करने के लिए परियोजना का प्रकार चुनें:
  1: बुनियादी
  2: आवेदन
  3: पुस्तकालय
  4: ग्रैडल प्लगइन
चयन दर्ज करें (डिफ़ॉल्ट: मूल) [1..4] 2

कार्यान्वयन भाषा का चयन करें:
  1: सी ++
  2: ग्रूवी
  3: जावा
  4: कोटलिन
  5: स्काला
  6: स्विफ्ट
चयन दर्ज करें (डिफ़ॉल्ट: जावा) [1..6] 5

एकाधिक उपप्रोजेक्ट्स में कार्यक्षमता विभाजित करें ?:
  1: नहीं - केवल एक आवेदन परियोजना
  2: हाँ - आवेदन और पुस्तकालय परियोजनाएं
चयन दर्ज करें (डिफ़ॉल्ट: नहीं - केवल एक आवेदन परियोजना) [1..2] 1

बिल्ड स्क्रिप्ट DSL का चयन करें:
  1: ग्रूवी
  2: कोटलिन
चयन दर्ज करें (डिफ़ॉल्ट: ग्रूवी) [1..2] 1

नए एपीआई और व्यवहार का उपयोग करके बिल्ड जेनरेट करें (कुछ सुविधाएं अगले मामूली रिलीज में बदल सकती हैं)? (डिफ़ॉल्ट: नहीं) [हाँ, नहीं] नहीं                           
प्रोजेक्ट का नाम (डिफ़ॉल्ट: इंटरैक्टिव-जॉब-उदाहरण): 
स्रोत पैकेज (डिफ़ॉल्ट: interactive.job.example): 

> कार्य: init
अपने प्रोजेक्ट के साथ अधिक सहायता प्राप्त करें: https://docs.gradle.org/7.5.1/samples/sample_building_scala_applications_multi_project.html

30 के दशक में सफल निर्माण
2 कार्रवाई योग्य कार्य: 2 निष्पादित 

अब हमें इलम रिपॉजिटरी और आवश्यक निर्भरताओं को आपके बिल्ड.ग्रैडल रेती। इस ट्यूटोरियल में, हम Scala 2.12 का उपयोग करेंगे।

निर्भरता {
    कार्यान्वयन 'org.scala-lang: scala-library: 2.12.16'
    कार्यान्वयन 'Cloud.ilum: ilum-job-api: 5.0.1'
    संकलन केवल 'org.apache.spark:spark-sql_2.12:3.1.2'
} 

अब हम एक स्काला क्लास बना सकते हैं जो इलम की नौकरी का विस्तार करता है और जो पीआई की गणना करता है:

पैकेज interactive.job.example

आयात cloud.ilum.job.Job
आयात org.apache.spark.sql.SparkSession
आयात Scala.Math.Random

class InteractiveJobExample नौकरी का विस्तार करता है {

def run को ओवरराइड करें (sparkSession: SparkSession, कॉन्फ़िगरेशन: Map[String, Any]): Option[String] = {

वैल स्लाइस = config.getOrelse("स्लाइस", "2").toString.toInt
    वैल एन = math.min (100000L * स्लाइस, Int.MaxValue).toInt
    वैल काउंट = sparkSession.sparkContext.parallelize(1 जब तक n, slices).map { i =>
      वैल एक्स = यादृच्छिक * 2 - 1
      वैल वाई = यादृच्छिक * 2 - 1
      अगर (x * x + y * y <= 1) 1 और 0
    }.कम करें(_ + _)
    कुछ (एस"पाई लगभग $ {4.0 * गिनती / (एन - 1)}")
  }
} 

यदि ग्रैडल ने कुछ मुख्य या परीक्षण कक्षाएं उत्पन्न की हैं, तो बस उन्हें प्रोजेक्ट से हटा दें और एक निर्माण करें।

$ ग्रैडल बिल्ड 

जनरेट की गई जार फ़ाइल ' ./interactive-job-example/app/build/libs/app.jar ', हम फिर इलम पर वापस जा सकते हैं। एक बार सभी पॉड्स चलने के बाद, कृपया इलम-यूआई के लिए एक पोर्ट फॉरवर्ड बनाएं:

Kubectl पोर्ट-फॉरवर्ड SVC/ILUM-UI 9777:9777 

अपने ब्राउज़र में इलम यूआई खोलें और एक नया समूह बनाएं:

ilum ui spark monitoring

समूह का नाम डालें, क्लस्टर चुनें या बनाएं, अपनी जार फ़ाइल अपलोड करें और परिवर्तन लागू करें:

ilum add group

इलम एक स्पार्क ड्राइवर पॉड बनाएगा और आप उन्हें स्केल करके स्पार्क निष्पादक पॉड्स की संख्या को नियंत्रित कर सकते हैं। स्पार्क कंटेनर तैयार होने के बाद, आइए नौकरियों को निष्पादित करें:

ilum execute job

अब हमें अपने स्काला वर्ग का विहित नाम रखना होगा

interactive.job.example.InteractiveJobExample 

और JSON प्रारूप में स्लाइस पैरामीटर को परिभाषित करें:

{
  "कॉन्फ़िगरेशन": {
    "स्लाइस": "10"
  }
} 

काम शुरू होने के ठीक बाद आपको परिणाम देखना चाहिए

आप पैरामीटर बदल सकते हैं, और नौकरी को फिर से चला सकते हैं और आपकी गणना मौके पर ही हो जाएगी।

इंटरएक्टिव और एकल नौकरी की तुलना

इलम में आप एक ही नौकरी भी चला सकते हैं। इंटरैक्टिव मोड की तुलना में सबसे महत्वपूर्ण अंतर यह है कि आपको जॉब एपीआई को लागू करने की आवश्यकता नहीं है। हम स्पार्क उदाहरणों से स्पार्कपी जार का उपयोग कर सकते हैं:

ilum add job

इस तरह की नौकरी चलाना भी त्वरित है, लेकिन इंटरैक्टिव नौकरियां हैं 20 गुना तेज (4s बनाम 200ms) . यदि आप अन्य मापदंडों के साथ एक समान काम शुरू करना चाहते हैं, तो आपको एक नया काम तैयार करना होगा और जार को फिर से अपलोड करना होगा।

इलम और सादा अपाचे स्पार्क तुलना


मैंने अपाचे स्पार्क को स्थानीय रूप से एक के साथ स्थापित किया है बिटनामी/स्पार्क डॉकर छवि। यदि आप अपनी मशीन पर स्पार्क भी चलाना चाहते हैं, तो आप डॉकर-कंपोज़ का उपयोग कर सकते हैं:

$ कर्ल -LO https://raw.githubusercontent.com/bitnami/containers/main/bitnami/spark/docker-compose.yml
$ डॉकर-कंपोज़ अप 

एक बार स्पार्क चलने के बाद, आपको लोकलहोस्ट: 8080 पर जाने और व्यवस्थापक यूआई देखने में सक्षम होना चाहिए। हमें ब्राउज़र से स्पार्क URL प्राप्त करने की आवश्यकता है:

spark admin

फिर, हमें स्पार्क कंटेनर को इंटरैक्टिव मोड में खोलना होगा

$ डॉकर निष्पादन -यह <containerid> -- बैश 
spark container

और अब कंटेनर के अंदर, हम sparkPi जॉब सबमिट कर सकते हैं। इस मामले में, उदाहरण जार से SparkiPi का उपयोग करेगा और, मास्टर पैरामीटर के रूप में, ब्राउज़र से URL डालें:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi\
  --मास्टर spark://78c84485d233:7077 \
  /ऑप्ट/बिटनामी/स्पार्क/उदाहरण/जार/spark-examples_2.12-3.3.0.jar\
  10 

सारांश

जैसा कि आप ऊपर दिए गए उदाहरण में देख सकते हैं, आप इलम का उपयोग करके अपने स्पार्क क्लाइंट के जटिल कॉन्फ़िगरेशन और स्थापना से बच सकते हैं। इलम काम संभालता है और आपको एक सरल और सुविधाजनक इंटरफ़ेस प्रदान करता है। इसके अलावा, यह आपको अपाचे स्पार्क की सीमाओं को पार करने की अनुमति देता है, जिसे आरंभ करने में बहुत लंबा समय लग सकता है। यदि आपको समान तर्क लेकिन अलग-अलग मापदंडों के साथ कई नौकरी निष्पादन करना है और तुरंत गणना करना चाहते हैं, तो आपको निश्चित रूप से इंटरैक्टिव जॉब मोड का उपयोग करना चाहिए।

Ilum ferret

अपाचे लिवी के साथ समानताएं

Ilum कुबेरनेट्स पर Apache Spark परिनियोजन के प्रबंधन के लिए क्लाउड-नेटिव टूल है। यह कार्यक्षमता के मामले में अपाचे लिवी के समान है - यह आरईएसटी एपीआई पर एक स्पार्क सत्र को नियंत्रित कर सकता है और स्पार्क क्लस्टर के साथ वास्तविक समय की बातचीत का निर्माण कर सकता है। हालाँकि, Ilum को विशेष रूप से आधुनिक, क्लाउड-देशी वातावरण के लिए डिज़ाइन किया गया है।

हमने अतीत में अपाचे लिवी का उपयोग किया था, लेकिन हम उस बिंदु पर पहुंच गए हैं जहां लिवी आधुनिक वातावरण के लिए उपयुक्त नहीं था। लिवी अप्रचलित है इलम की तुलना में। 2018 में, हमने अपने सभी वातावरणों को कुबेरनेट्स में स्थानांतरित करना शुरू कर दिया, और हमें कुबेरनेट्स पर अपाचे स्पार्क को तैनात करने, निगरानी करने और बनाए रखने का एक तरीका खोजना पड़ा। इलम बनाने का यह सही मौका था।