जार को स्पार्क जॉब में जोड़ें - स्पार्क-सबमिट करें


158

सच ... इसकी काफी चर्चा हुई।

हालांकि बहुत अस्पष्टता है और कुछ उत्तर दिए गए हैं ... जार / निष्पादक / ड्राइवर कॉन्फ़िगरेशन या विकल्पों में जार संदर्भों की नकल करना भी शामिल है।

अस्पष्ट और / या छोड़े गए विवरण

अस्पष्टता के बाद, अस्पष्ट, और / या छोड़े गए विवरणों को प्रत्येक विकल्प के लिए स्पष्ट किया जाना चाहिए:

  • क्लासपाथ कैसे प्रभावित होता है
    • चालक
    • निष्पादक (चल रहे कार्यों के लिए)
    • दोनों
    • बिल्कुल नहीं
  • पृथक्करण वर्ण: अल्पविराम, बृहदान्त्र, अर्धविराम
  • यदि प्रदान की गई फ़ाइलें स्वचालित रूप से वितरित की जाती हैं
    • कार्यों के लिए (प्रत्येक निष्पादक के लिए)
    • दूरस्थ ड्राइवर के लिए (यदि क्लस्टर मोड में चलाया गया)
  • URI का प्रकार स्वीकार किया गया: स्थानीय फ़ाइल, HDfs, http, आदि
  • यदि एक सामान्य स्थान में कॉपी किया जाता है, तो वह स्थान कहां है (hdfs, स्थानीय?)

इसके प्रभावित होने के विकल्प:

  1. --jars
  2. SparkContext.addJar(...) तरीका
  3. SparkContext.addFile(...) तरीका
  4. --conf spark.driver.extraClassPath=... या --driver-class-path ...
  5. --conf spark.driver.extraLibraryPath=..., या --driver-library-path ...
  6. --conf spark.executor.extraClassPath=...
  7. --conf spark.executor.extraLibraryPath=...
  8. भूल नहीं करने के लिए, स्पार्क-सबमिट का अंतिम पैरामीटर भी एक .jar फ़ाइल है।

मुझे पता है कि मुझे मुख्य स्पार्क प्रलेखन कहां मिल सकता है , और विशेष रूप से सबमिट करने के विकल्प , उपलब्ध विकल्प और जावाडॉक के बारे में भी । हालांकि यह मेरे लिए अभी भी काफी कुछ छेद है, हालांकि इसने आंशिक रूप से उत्तर दिया।

मुझे आशा है कि यह सब इतना जटिल नहीं है, और कोई मुझे स्पष्ट और संक्षिप्त जवाब दे सकता है।

अगर मैं प्रलेखन से अनुमान लगाना थे, ऐसा लगता है कि --jars, और SparkContext addJarऔर addFileतरीकों जो कि अपने आप फ़ाइलें वितरित करेंगे, जबकि अन्य विकल्प केवल क्लासपाथ को संशोधित कर रहे हैं।

क्या यह मान लेना सुरक्षित होगा कि सादगी के लिए, मैं एक ही समय में 3 मुख्य विकल्पों का उपयोग करके अतिरिक्त एप्लिकेशन जार फाइलें जोड़ सकता हूं:

spark-submit --jar additional1.jar,additional2.jar \
  --driver-library-path additional1.jar:additional2.jar \
  --conf spark.executor.extraLibraryPath=additional1.jar:additional2.jar \
  --class MyClass main-application.jar

एक और पोस्टिंग के जवाब पर एक अच्छा लेख मिला । हालाँकि कुछ भी नया नहीं सीखा। पोस्टर स्थानीय चालक (यार्न-क्लाइंट) और रिमोट ड्राइवर (यार्न-क्लस्टर) के बीच अंतर पर एक अच्छी टिप्पणी करता है। ध्यान रखने के लिए निश्चित रूप से महत्वपूर्ण है।


1
आप किस क्लस्टर मैनेजर के तहत चल रहे हैं? स्टैंडअलोन / धागा / Mesos?
युवल इत्ज़चकोव

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

1
हम स्पार्क स्टैंडअलोन को कैसे तैनात करते हैं, इसके बारे में एक उत्तर पोस्ट करूंगा, जो कुछ चीजें स्पष्ट कर सकता है।
युवल इट्ज़चकोव

6
मैंने आपके सभी प्रश्नों का उत्तर देने का प्रयास किया है। आशा है कि यह मदद करता है :)
युवल इट्ज़चकोव

@Yuval Itzchakov, जैसे योयो ने उल्लेख किया है, मैं भी अपने सभी आश्रितों जैसे मामले वर्गों, और अन्य जार का उपयोग करने के लिए एक छायांकित जार का उपयोग करता हूं जो मैं उपयोग कर सकता हूं। मैं यह समझने की कोशिश कर रहा हूं कि मैं ऐसी स्थिति में कब भागूंगा, जहां मुझे कई जार की जरूरत होगी। मेरा मतलब है कि मैं हमेशा 1 uber जार में उन कई जार को बंडल कर सकता हूं। मैं अपने सभी आश्रितों को बांधकर अपने जर्जर जार के साथ क्यों नहीं रह सकता?
शेल पंचोली

जवाबों:


177

क्लासपाथ:

आप जो प्रदान करते हैं, उसके आधार पर क्लासपैथ प्रभावित होता है। क्लासपैथ पर कुछ सेट करने के कुछ तरीके हैं:

  • spark.driver.extraClassPathया यह --driver-class-pathड्राइवर को चलाने वाले नोड पर अतिरिक्त क्लासपैथ सेट करने के लिए उर्फ है।
  • spark.executor.extraClassPath कार्यकर्ता नोड पर अतिरिक्त वर्ग पथ सेट करने के लिए।

यदि आप चाहते हैं कि एक निश्चित JAR मास्टर और कार्यकर्ता दोनों पर प्रभाव डाले, तो आपको इन्हें अलग-अलग BOTH झंडों में निर्दिष्ट करना होगा।

पृथक्करण वर्ण:

जेवीएम के समान नियमों का पालन :

  • लिनक्स: एक बृहदान्त्र :
    • उदाहरण के लिए: --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar:/opt/prog/aws-java-sdk-1.10.50.jar"
  • विंडोज: एक अर्धविराम ;
    • उदाहरण के लिए: --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar;/opt/prog/aws-java-sdk-1.10.50.jar"

फ़ाइल वितरण:

यह उस मोड पर निर्भर करता है, जिसके तहत आप अपना काम चला रहे हैं:

  1. क्लाइंट मोड - स्पार्क एक नेट्टी HTTP सर्वर को फायर करता है जो कि प्रत्येक कार्यकर्ता नोड्स के लिए स्टार्ट अप पर फाइलों को वितरित करता है। आप देख सकते हैं कि जब आप अपना स्पार्क काम शुरू करते हैं:

    16/05/08 17:29:12 INFO HttpFileServer: HTTP File server directory is /tmp/spark-48911afa-db63-4ffc-a298-015e8b96bc55/httpd-84ae312b-5863-4f4c-a1ea-537bfca2bc2b
    16/05/08 17:29:12 INFO HttpServer: Starting HTTP Server
    16/05/08 17:29:12 INFO Utils: Successfully started service 'HTTP file server' on port 58922.
    16/05/08 17:29:12 INFO SparkContext: Added JAR /opt/foo.jar at http://***:58922/jars/com.mycode.jar with timestamp 1462728552732
    16/05/08 17:29:12 INFO SparkContext: Added JAR /opt/aws-java-sdk-1.10.50.jar at http://***:58922/jars/aws-java-sdk-1.10.50.jar with timestamp 1462728552767
  2. क्लस्टर मोड - क्लस्टर मोड स्पार्क में ड्राइवर प्रक्रिया को निष्पादित करने के लिए एक नेता वर्कर नोड का चयन किया। इसका मतलब है कि नौकरी सीधे मास्टर नोड से नहीं चल रही है। यहां, स्पार्क एक HTTP सर्वर सेट नहीं करेगा । आपको अपने JARS को सभी कार्यकर्ता नोड को HDFS / S3 / अन्य स्रोतों से उपलब्ध कराना होगा जो सभी नोड्स के लिए उपलब्ध हैं।

फ़ाइलों के लिए URI स्वीकृत

में "भेजने से अनुप्रयोग" , स्पार्क प्रलेखन फ़ाइलों के लिए स्वीकार किए जाते हैं उपसर्गों समझाने का एक अच्छा काम करता है:

स्पार्क-सबमिट का उपयोग करते समय, - jars विकल्प के साथ शामिल किसी भी जार के साथ आवेदन जार स्वचालित रूप से क्लस्टर में स्थानांतरित हो जाएगा। स्पार्क निम्नलिखित यूआरएल योजना का उपयोग करता है ताकि जार को फैलाने के लिए अलग रणनीति बनाई जा सके:

  • फ़ाइल: - निरपेक्ष पथ और फ़ाइल: / URI को ड्राइवर के HTTP फ़ाइल सर्वर द्वारा सेवा दी जाती है, और प्रत्येक निष्पादक फ़ाइल को चालक HTTP सर्वर से खींचता है।
  • hdfs:, http :, https :, ftp: - ये URI से फाइल और JAR को उम्मीद के मुताबिक नीचे खींचते हैं
  • स्थानीय: - एक यूआरआई जो स्थानीय के साथ शुरू होता है: / प्रत्येक कार्यकर्ता नोड पर एक स्थानीय फ़ाइल के रूप में मौजूद होने की उम्मीद है। इसका मतलब यह है कि कोई भी नेटवर्क IO नहीं होगा, और बड़ी फ़ाइलों / JAR के लिए अच्छी तरह से काम करता है जो प्रत्येक कार्यकर्ता को धकेल दिया जाता है, या NFS, GlusterFS, आदि के माध्यम से साझा किया जाता है।

ध्यान दें कि निष्पादक नोड्स पर JAR और फ़ाइलों को प्रत्येक SparkContext के लिए कार्यशील निर्देशिका में कॉपी किया जाता है।

जैसा कि कहा गया है, JAR को प्रत्येक वर्कर नोड के लिए काम करने वाले डायरेक्टरी में कॉपी किया जाता है । वास्तव में वह कहां है? यह आमतौर पर नीचे है /var/run/spark/work, आप उन्हें इस तरह देखेंगे:

drwxr-xr-x    3 spark spark   4096 May 15 06:16 app-20160515061614-0027
drwxr-xr-x    3 spark spark   4096 May 15 07:04 app-20160515070442-0028
drwxr-xr-x    3 spark spark   4096 May 15 07:18 app-20160515071819-0029
drwxr-xr-x    3 spark spark   4096 May 15 07:38 app-20160515073852-0030
drwxr-xr-x    3 spark spark   4096 May 15 08:13 app-20160515081350-0031
drwxr-xr-x    3 spark spark   4096 May 18 17:20 app-20160518172020-0032
drwxr-xr-x    3 spark spark   4096 May 18 17:20 app-20160518172045-0033

और जब आप अंदर देखते हैं, तो आप अपने साथ तैनात सभी JAR को देखेंगे:

[*@*]$ cd /var/run/spark/work/app-20160508173423-0014/1/
[*@*]$ ll
total 89988
-rwxr-xr-x 1 spark spark   801117 May  8 17:34 awscala_2.10-0.5.5.jar
-rwxr-xr-x 1 spark spark 29558264 May  8 17:34 aws-java-sdk-1.10.50.jar
-rwxr-xr-x 1 spark spark 59466931 May  8 17:34 com.mycode.code.jar
-rwxr-xr-x 1 spark spark  2308517 May  8 17:34 guava-19.0.jar
-rw-r--r-- 1 spark spark      457 May  8 17:34 stderr
-rw-r--r-- 1 spark spark        0 May  8 17:34 stdout

प्रभावित विकल्प:

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

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

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

प्रश्न में प्रत्येक विकल्प का विश्लेषण करें:

  • --jarsबनाम SparkContext.addJar: ये समान हैं, केवल एक स्पार्क सबमिट के माध्यम से और एक कोड के माध्यम से सेट किया गया है। वह चुनें जो आपको बेहतर बनाता है। ध्यान देने वाली एक महत्वपूर्ण बात यह है कि इनमें से किसी भी विकल्प का उपयोग करने से आपके ड्राइवर / निष्पादक वर्गपथ में JAR नहीं जुड़ता है , आपको extraClassPathदोनों पर विन्यास का उपयोग करके उन्हें स्पष्ट रूप से जोड़ना होगा ।
  • SparkContext.addJarबनाम SparkContext.addFile: पूर्व का उपयोग करें जब आपके पास एक निर्भरता होती है जिसे आपके कोड के साथ उपयोग करने की आवश्यकता होती है। जब आप अपने कार्यकर्ता नोड्स के चारों ओर एक मनमानी फ़ाइल पास करना चाहते हैं, तो बाद का उपयोग करें, जो आपके कोड में रन-टाइम निर्भरता नहीं है।
  • --conf spark.driver.extraClassPath=...या --driver-class-path: ये उपनाम हैं, कोई फर्क नहीं पड़ता कि आप किसे चुनते हैं
  • --conf spark.driver.extraLibraryPath=..., or --driver-library-path ... ऊपर के समान, उपनाम।
  • --conf spark.executor.extraClassPath=...: इसका उपयोग तब करें जब आपके पास एक निर्भरता हो, जिसे एक uber JAR में शामिल नहीं किया जा सकता है (उदाहरण के लिए, क्योंकि पुस्तकालय संस्करणों के बीच संकलन समय संघर्ष हैं) और जिसे आपको रनटाइम पर लोड करने की आवश्यकता है।
  • --conf spark.executor.extraLibraryPath=...यह java.library.pathजेवीएम के विकल्प के रूप में पारित किया गया है। इसका उपयोग तब करें जब आपको JVM को दिखाई जाने वाली लाइब्रेरी पथ की आवश्यकता हो।

क्या यह मान लेना सुरक्षित होगा कि सादगी के लिए, मैं एक ही समय में 3 मुख्य विकल्पों का उपयोग करके अतिरिक्त एप्लिकेशन जार फाइलें जोड़ सकता हूं:

आप इसे केवल क्लाइंट मोड के लिए सुरक्षित रूप से मान सकते हैं, न कि क्लस्टर मोड के लिए। जैसा कि मैंने पहले कहा है। इसके अलावा, आपके द्वारा दिए गए उदाहरण में कुछ निरर्थक तर्क हैं। उदाहरण के लिए, JAR को पास --driver-library-pathकरना बेकार है, आपको उन्हें पास करने की आवश्यकता है extraClassPathयदि आप चाहते हैं कि वे आपके क्लासपाथ पर हों। अंततः, जब आप चालक और कर्मी दोनों पर बाहरी JAR तैनात करते हैं तो आप क्या करना चाहते हैं:

spark-submit --jars additional1.jar,additional2.jar \
  --driver-class-path additional1.jar:additional2.jar \
  --conf spark.executor.extraClassPath=additional1.jar:additional2.jar \
  --class MyClass main-application.jar

4
शानदार और व्यापक जवाब। धन्यवाद। क्या आप जुबेर के बाहर uber JAR बनाम निर्भरता के साथ तैनाती में सर्वोत्तम प्रथाओं के बारे में अधिक बता सकते हैं (बाहरी फ़ोल्डर में सूचीबद्ध और MANIFEST.MFफ़ाइल में सूचीबद्ध )?
jsosnowski

2
@jsosnowski आमतौर पर, मैं केवल बाहरी जार का उपयोग करने के लिए टालता हूं जब ऐसे संघर्ष होते हैं जो मेरे uber JAR के साथ हल करने के लिए बहुत जटिल हैं। मैं आमतौर पर एसबीटी का उपयोग करके प्राप्त करता हूं assemblyMergeStrategyऔर उन वर्गों का चयन करता हूं जिनकी मुझे आवश्यकता होती है यदि संघर्ष होते हैं। मैं आम तौर पर एक ही सिफारिश करेंगे।
युवल इत्जाचोव 13

9
@ युवल-इत्जाकोव महान जवाब के लिए धन्यवाद, बहुत उपयोगी। एक बिंदु मैं उन अन्य लोगों की मदद करने पर जोर देना चाहूंगा, जिन्होंने शायद मेरी जैसी गलती की है। --Jars तर्क केवल क्लस्टर में प्रत्येक मशीन पर जार पहुंचाता है। यह कक्षा पथ खोज में उन्हें उपयोग करने के लिए स्पार्क नहीं बताता है। Thedriver-class-path (या समान तर्क या कॉन्फ़िगर पैरामीटर) की भी आवश्यकता होती है। मैंने शुरू में सोचा था कि वे एक ही काम करने के वैकल्पिक तरीके थे।
टिम रयान

1
@ टिमरन निश्चित रूप से। यदि आप उत्तर के अंतिम भाग को देखते हैं, तो मैं --jarsझंडे और ड्राइवर / निष्पादक वर्ग पथ दोनों को पास करता हूं ।
युवल इट्ज़चकोव

1
आखिरकार मैंने पाया कि पर्यावरण चर को कैसे इंजेक्ट किया जाए zeppelin-env.shऔर इसमें जोड़ा --jarsजाए SPARK_SUBMIT_OPTIONS। वह काम किया। यूआरआई प्रारूप मैं उपयोग करता हूं --jars=local:///mnt/dir/file.jar
माइक

4

स्पार्क-सबमिट के दौरान spark 2.1.0उपयोग करने के लिए एक और तरीका है --conf spark.driver.userClassPathFirst=trueजो निर्भरता भार की प्राथमिकता को बदलता है, और इस प्रकार स्पार्क-नौकरी का व्यवहार, उपयोगकर्ता को प्राथमिकता देते हुए --jarsविकल्प के साथ क्लास-पाथ में जोड़ रहा है ।


2
आपको इससे सावधान रहना होगा - क्योंकि ऐसा करने से स्पार्क टूटना संभव है। यह एक अंतिम विकल्प समाधान होना चाहिए। संभावित रूप से यह यार्न-क्लाइंट मोड का उपयोग करते समय यार्न के साथ परत की इंटरफेसिंग में हस्तक्षेप कर सकता है, हालांकि मुझे यकीन नहीं है।
योयो

चेतावनी देने के लिए आपका धन्यवाद। क्या केवल 1 जार को प्राथमिकता देने का कोई तरीका है, जो निश्चित रूप से पुराने संस्करण में सर्वर में मौजूद है, लेकिन आप भौतिक रूप से प्रतिस्थापित नहीं कर सकते हैं और आप जानते हैं कि आप उपयोग नहीं करना चाहते हैं?
स्टेनिस्लाव

1
मुझे लगता है कि इस मामले में आप जैसा सुझाएंगे वैसा ही आप कोशिश कर सकते हैं। नहीं कहा कि यह एक पूर्ण नहीं था। यह भी ध्यान रखें कि विकल्प को 'प्रायोगिक' के रूप में चिह्नित किया गया है - ध्यान रखने योग्य चेतावनी! लाइब्रेरी के एक संस्करण को दूसरे पर प्राथमिकता देने का कोई सुरक्षित तरीका नहीं है। कुछ कार्यान्वयन में, यह पुस्तकालयों में से एक को एक अलग नामस्थान में स्थानांतरित करके हल किया जाता है, इसलिए आप एक ही समय में दोनों संस्करणों का उपयोग कर सकते हैं।
योयो

1

जार और क्लासपैथ से संबंधित अन्य विन्यास योग्य स्पार्क विकल्प, yarnजैसे कि मोड के तैनाती के मामले में
स्पार्क प्रलेखन से निम्नानुसार हैं:

spark.yarn.jars

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

spark.yarn.archive

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

उपयोगकर्ता अपने जार को निर्दिष्ट करने के लिए इस पैरामीटर को कॉन्फ़िगर कर सकते हैं, जो स्पार्क चालक के क्लासपाथ में शामिल हो जाता है।


1

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

उदाहरण :

स्पार्क-सबमिट - मास्टर-यार्न-क्लस्टर - जार ../lib/misc.jar, ../lib/test.jar --class MainClass MainApp.jar

https://spark.apache.org/docs/latest/submitting-applications.html


0

उपयोग करने पर प्रतिबंध है --jars: यदि आप jar/xmlफ़ाइल के स्थान के लिए निर्देशिका निर्दिष्ट करना चाहते हैं , तो यह निर्देशिका के विस्तार की अनुमति नहीं देता है। इसका मतलब है अगर आपको प्रत्येक जार के लिए पूर्ण पथ निर्दिष्ट करने की आवश्यकता है।

यदि आप निर्दिष्ट करते हैं --driver-class-pathऔर आप यार्न क्लस्टर मोड में निष्पादित कर रहे हैं, तो ड्राइवर वर्ग अपडेट नहीं होता है। हम यह सत्यापित कर सकते हैं कि टैब वातावरण के तहत स्पार्क यूआई या स्पार्क इतिहास सर्वर के तहत क्लास पथ अपडेट किया गया है या नहीं।

विकल्प जो मेरे लिए काम करता था जार को पारित करने के लिए जिसमें निर्देशिका विस्तार शामिल थे और जो यार्न क्लस्टर मोड में काम करता था वह --confविकल्प था । चालक और निष्पादक वर्ग पथ को पास करना बेहतर है --conf, जो उन्हें स्पार्क सत्र ऑब्जेक्ट को स्वयं जोड़ता है और वे पथ स्पार्क कॉन्फ़िगरेशन पर प्रतिबिंबित होते हैं। लेकिन कृपया क्लस्टर भर में एक ही रास्ते पर जार रखना सुनिश्चित करें।

spark-submit \
  --master yarn \
  --queue spark_queue \
  --deploy-mode cluster    \
  --num-executors 12 \
  --executor-memory 4g \
  --driver-memory 8g \
  --executor-cores 4 \
  --conf spark.ui.enabled=False \
  --conf spark.driver.extraClassPath=/usr/hdp/current/hbase-master/lib/hbase-server.jar:/usr/hdp/current/hbase-master/lib/hbase-common.jar:/usr/hdp/current/hbase-master/lib/hbase-client.jar:/usr/hdp/current/hbase-master/lib/zookeeper.jar:/usr/hdp/current/hbase-master/lib/hbase-protocol.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/scopt_2.11-3.3.0.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/spark-examples_2.10-1.1.0.jar:/etc/hbase/conf \
  --conf spark.hadoop.mapred.output.dir=/tmp \
  --conf spark.executor.extraClassPath=/usr/hdp/current/hbase-master/lib/hbase-server.jar:/usr/hdp/current/hbase-master/lib/hbase-common.jar:/usr/hdp/current/hbase-master/lib/hbase-client.jar:/usr/hdp/current/hbase-master/lib/zookeeper.jar:/usr/hdp/current/hbase-master/lib/hbase-protocol.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/scopt_2.11-3.3.0.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/spark-examples_2.10-1.1.0.jar:/etc/hbase/conf \
  --conf spark.hadoop.mapreduce.output.fileoutputformat.outputdir=/tmp

नववर्ष की शुभकामना!
योयो

हैप्पी न्यू ईयर योयो
तनवीर

0

जबकि हम स्पार्क-सबमिट उपयोगिता का उपयोग करके स्पार्क जॉब्स जमा करते हैं, एक विकल्प है --jars। इस विकल्प का उपयोग करके, हम स्पार्क एप्लिकेशन को जार फाइल पास कर सकते हैं।


यह है कि इस —jarविकल्प का उल्लेख मूल पोस्टर द्वारा किया गया था, साथ ही एक से अधिक उत्तरों द्वारा और अधिक विस्तार से चर्चा की गई थी। ऐसा नहीं लगता है कि आप कुछ नया प्रदान कर रहे हैं?
योयो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.