स्पार्क नौकरी के लिए -D पैरामीटर या पर्यावरण चर कैसे पारित करें?


83

मैं देव / ठेस के माहौल में स्पार्क जॉब के टाइपसैफ कॉन्फिगर को बदलना चाहता हूं । यह मुझे लगता है कि इसे पूरा करने का सबसे आसान तरीका है -Dconfig.resource=ENVNAMEनौकरी पास करना। फिर टाइपसेफ कॉन्फिगर लाइब्रेरी मेरे लिए काम करेगी।

क्या उस विकल्प को सीधे नौकरी में पास करने का कोई तरीका है? या हो सकता है कि रनटाइम पर जॉब कॉन्फिगरेशन को बदलने का बेहतर तरीका हो?

संपादित करें:

  • जब मैं स्पार्क-सबमिट कमांड का --conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"विकल्प जोड़ता हूं तो कुछ भी नहीं होता है ।
  • मुझे मिला Error: Unrecognized option '-Dconfig.resource=dev'.जब मैं स्पार्क-सबमिट कमांड -Dconfig.resource=devको पास करता हूं ।

1
कृपया निर्दिष्ट करें कि आप अपना काम कैसे शुरू कर रहे हैं। सामान्य तौर पर आप केवल -Dx=yकमांड लाइन पर चिपक सकते हैं ।
डेनियल डाराबोस

@DanielDarabos मैं YARN पर स्पार्क-सबमिट के साथ अपना काम शुरू करता हूं।
kopiczko

क्या आप एक उत्तर स्वीकार कर सकते हैं?
डॉन ब्रैनसन

@DonBranson मैं यहाँ सभी जवाबों की कोशिश कर चुका हूँ और किसी ने भी मुझसे स्पार्क 1.6.0 पर काम नहीं किया! मेरे पास यह सटीक मुद्दा है। मैं -D Param के माध्यम से अपने Typeafe विन्यास विन्यास फाइल में एक विन्यास संपत्ति को ओवरराइड नहीं कर सकता।
नीमो

@kopiczko आप एक समाधान खोजने के लिए प्रबंधित किया था?
नीमो

जवाबों:


58

spark-submitतीन विकल्प जोड़कर कमांड लाइन बदलें :

  • --files <location_to_your_app.conf>
  • --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
  • --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'

19
ध्यान दें कि --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'जब स्पार्क क्लाइंट मोड में ड्राइवर को जमा करता है तो विकल्प का उपयोग करने से काम नहीं चलेगा। --driver-java-options "-Dconfig.resource=app"इसके बजाय उपयोग करें । स्पार्क कॉन्फ़िगरेशन देखें ।
योयो

2
यार्न मैं इस्तेमाल किया पर: फाइलों में निष्पादकों को नाम रिश्तेदार देता है; इसलिए वे application.conf के रूप में निर्दिष्ट फ़ाइल देखेंगे। --files <location_to_your.conf>#application.conf --driver-java-options -Dconfig.file=your.conf#
vpipkt

वैकल्पिक रूप सेspark-submit --driver-java-options='-Dmy.config.path=myConfigValue'
जीन-एड्रिएन

@kopiczko यह मेरे लिए काम नहीं कर रहा है ... क्या इससे आपकी समस्या हल हो गई?
नीमो

यह मेरे लिए 2015 में वापस काम कर रहा था। एटीएम मैं यह भी नहीं बता सकता कि स्पार्क संस्करण क्या था।
kopiczko

21

यहाँ मेरा स्पार्क प्रोग्राम अतिरिक्त जावा विकल्प के साथ चलाया गया है

/home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
--files /home/spark/jobs/fact_stats_ad.conf \
--conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf \
--conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf' \
--class jobs.DiskDailyJob \
--packages com.databricks:spark-csv_2.10:1.4.0 \
--jars /home/spark/jobs/alluxio-core-client-1.2.0-RC2-jar-with-dependencies.jar \
--driver-memory 2g \
/home/spark/jobs/convert_to_parquet.jar \
AD_COOKIE_REPORT FACT_AD_STATS_DAILY | tee /data/fact_ad_stats_daily.log

जैसा कि आप कस्टम कॉन्फ़िग फ़ाइल देख सकते हैं --files /home/spark/jobs/fact_stats_ad.conf

जल्लाद जावा विकल्प --conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf

ड्राइवर जावा विकल्प। --conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf'

आशा है कि यह मदद कर सकता है।


यह उत्तर अंतरिक्ष के अलग-अलग सूची -Dkey = value जोड़े के रूप में कई विकल्पों को पारित करने के लिए प्रारूप दिखाने में मदद करता है।
पॉल

9

मुझे पास करने के लिए बहुत सी समस्याएँ थीं -D पैरामीटर से स्पार्क एक्ज़िक्यूटर्स और ड्राइवर तक, मैंने अपने ब्लॉग पोस्ट से इसके बारे में एक उद्धरण जोड़ा है: "पैरामीटर को पास करने का सही तरीका संपत्ति के माध्यम से है:" spark.driver.extraJavaOptions"और" spark.executor.extraJavaOptions": मैं दोनों log4J विन्यास संपत्ति और पैरामीटर है कि मैं विन्यास के लिए की जरूरत है पारित किया है? (ड्राइवर के लिए मैं केवल log4j विन्यास पारित करने में सक्षम था)। उदाहरण के लिए (गुण के साथ लिखा था स्पार्क-प्रस्तुत में पारित फ़ाइल) -। गुण-फ़ाइल "):"

spark.driver.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties -
spark.executor.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties -Dapplication.properties.file=hdfs:///some/path/on/hdfs/app.properties
spark.application.properties.file hdfs:///some/path/on/hdfs/app.properties

"

आप चिंगारी के समग्र विन्यास के बारे में मेरे ब्लॉग पोस्ट को पढ़ सकते हैं । मैं यार्न पर भी चल रहा हूं।


कृपया इसमें कुछ और सामग्री जोड़ें और केवल उत्तर देने से बचें।
अजय गुप्ता

7

--files <location_to_your_app.conf> --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app' --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'

यदि आप इस तरह से लिखते हैं, तो बाद --confमें पिछले वाले को अधिलेखित कर देंगे, आप Environmentटैब के तहत नौकरी शुरू होने के बाद स्पार्कयूआई को देखकर इसे सत्यापित कर सकते हैं ।

इसलिए सही तरीका यह है --conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d' कि आप इस तरह से एक ही लाइन के तहत विकल्पों को डाल सकते हैं : यदि आप ऐसा करते हैं, तो आप पा सकते हैं कि आपकी सभी सेटिंग्स स्पार्कयूआई के तहत दिखाई जाएंगी।


मेरा मानना ​​है कि यह "--conf" ध्वज के लिए सच है, हालांकि यह "--files" के लिए सच है।
Penumbra

मैंने 2.1.0 और 2.1.1 पर परीक्षण किया है। स्पार्कयूआई के अनुसार-> पर्यावरण, मैं केवल एक बाद में देखता हूं अगर हम --confदो बार उपयोग करते हैं ।
लाइनर्र

1
मुझे लगता है कि आपका उदाहरण त्रुटिपूर्ण है। आप "--conf" ध्वज (एक निष्पादक, एक ड्राइवर) के बाद दो अलग और पूरी तरह से अलग-अलग कुंजी / मान दिखा रहे हैं। वे एक दूसरे को अधिलेखित नहीं कर सकते। यदि आप कह रहे हैं कि किसी भी --conf विकल्प का केवल अंतिम दोहराव ही प्रभावी होगा, तो आप सही हैं लेकिन आपका उदाहरण यह नहीं दिखाता है। स्पार्क-सबमिट में: - आपके पास वन - फाइल्स विकल्प हो सकता है, जिनमें से अंतिम (यदि एकाधिक) का उपयोग किया जाएगा और पहले वाले को अनदेखा कर दिया गया है - आपके पास कई - कुंजी कुंजी = मान विकल्प हो सकते हैं, लेकिन यदि आप एक कुंजी की नकल करते हैं यह अंतिम मूल्य लेगा
पेनुम्ब्रा

3

मैं अपने स्पार्क एप्लिकेशन को एक अन्य स्काला एप्लिकेशन के भीतर से शुरू की गई स्पार्क-सबमिट कमांड के माध्यम से शुरू कर रहा हूं। इसलिए मेरे पास एक ऐरे की तरह है

Array(".../spark-submit", ..., "--conf", confValues, ...)

कहाँ confValuesहै:

  • के लिए yarn-clusterमोड:
    "spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
  • के लिए local[*]मोड:
    "run.mode=development"

यह समझना मुश्किल है कि कहाँ (नहीं) उद्धरण और रिक्त स्थान से बचने के लिए, हालांकि। आप सिस्टम गुण मान के लिए स्पार्क वेब इंटरफ़ेस की जांच कर सकते हैं।


यह मेरे लिए काम किया! (कम से कम local[*]मोड के लिए)। मैं yarn-clusterमोड के साथ कोशिश करूंगा और टिप्पणी को अपडेट करूंगा (यदि मैं नहीं भूलता हूं ..: D)
acidghost

3
spark-submit --driver-java-options "-Denv=DEV -Dmode=local" --class co.xxx.datapipeline.jobs.EventlogAggregator target/datapipeline-jobs-1.0-SNAPSHOT.jar

उपरोक्त आदेश मेरे लिए काम करता है:

-Denv=DEV=> DEV env गुण फ़ाइल पढ़ने के लिए, और
-Dmode=local=> स्थानीय में SparkContext बनाने के लिए - .setMaster ("स्थानीय [*]")


0

नीचे दिए गए आदेश की तरह विधि का उपयोग करें, आपके लिए उपयोगी हो सकता है -

स्पार्क-सबमिट -मास्टर - स्थानीय [2] --conf 'spark.driver.extraJavaOptions = Dlog4j.configuration = फ़ाइल: /tmp/log4j.properties' --conf 'spark.exeror.extraJavaOptions = -Dlog4j.configuration = फ़ाइल: /tmp/log4j.properties ' --class com.test.spark.application.TestSparkJob target / application-0.0.1-SNAPSHOT-jar-with-dependencies.jar ठेस

मैंने कोशिश की है और यह मेरे लिए काम करता है, मैं सुझाव दूंगा कि नीचे जाने के बाद स्पार्क पोस्ट जो वास्तव में उपयोगी है - https://spark.apache.org/docs/latest/running-on-yarn.html


0

मेरे पास मूल रूप से यह कॉन्फ़िग फ़ाइल थी:

my-app {
  environment: dev
  other: xxx
}

इस तरह से मैं अपने स्पार्क स्कैला कोड में अपना कॉन्फिगर लोड कर रहा हूं:

val config = ConfigFactory.parseFile(File<"my-app.conf">)
  .withFallback(ConfigFactory.load())
  .resolve
  .getConfig("my-app")

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

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --name my-app \
  --driver-java-options='-XX:MaxPermSize=256M -Dmy-app.environment=prod' \
  --files my-app.conf \
  my-app.jar

इसे काम पर लाने के लिए मुझे अपनी कॉन्फ़िग फ़ाइल को इसमें बदलना पड़ा:

my-app {
  environment: dev
  environment: ${?env.override}
  other: xxx
}

और फिर इसे इस तरह लॉन्च करें:

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --name my-app \
  --driver-java-options='-XX:MaxPermSize=256M -Denv.override=prod' \
  --files my-app.conf \
  my-app.jar

मैं स्पार्क 1.6.0 BTW
nemo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.