2014-06-16 18 views
32

के लिए मेमोरी प्रति नोड को कैसे बदलें I Apache स्पार्क क्लस्टर को कॉन्फ़िगर कर रहा हूं।अपाचे स्पार्क वर्कर

जब मैं 1 मास्टर और 3 दास के साथ क्लस्टर चलाने के लिए, मैं गुरु की निगरानी पृष्ठ पर इस देखें:

Memory 
2.0 GB (512.0 MB Used) 
2.0 GB (512.0 MB Used) 
6.0 GB (512.0 MB Used) 

मैं श्रमिकों के लिए इस्तेमाल किया स्मृति को बढ़ाने के लिए चाहते हैं, लेकिन मैं सही config नहीं पा सके इसके लिए। मैं spark-env.sh नीचे के रूप में बदल दिया है:

export SPARK_WORKER_MEMORY=6g 
export SPARK_MEM=6g 
export SPARK_DAEMON_MEMORY=6g 
export SPARK_JAVA_OPTS="-Dspark.executor.memory=6g" 
export JAVA_OPTS="-Xms6G -Xmx6G" 

लेकिन इस्तेमाल किया स्मृति अब भी वही है। प्रयुक्त स्मृति को बदलने के लिए मुझे क्या करना चाहिए?

+0

अच्छे प्रश्न के लिए खेद है। मुझे लगता है कि मैं निष्पादकों के लिए स्मृति बदलना चाहता हूं। अब, निष्पादक केवल '2.0 जीबी (512.0 एमबी प्रयुक्त) का उपयोग करें। कॉन्फ़िगरेशन या सिस्टम वातावरण को बदलकर मेमोरी कैसे बढ़ाएं? –

उत्तर

15

1.0.0+ का उपयोग करते समय और स्पार्क-खोल या स्पार्क-सबमिट का उपयोग करते समय, --executor-memory विकल्प का उपयोग करें। जैसे

spark-shell --executor-memory 8G ... 

0.9.0 और के तहत:

तुम्हें नौकरी शुरू करने या खोल स्मृति बदलने शुरू करते हैं। हमें स्पार्क-शेल स्क्रिप्ट को संशोधित करना था ताकि वह अंतर्निहित जावा एप्लिकेशन के लिए तर्क के रूप में कमांड लाइन तर्क ले सके। विशेष रूप से:

OPTIONS="[email protected]" 
... 
$FWDIR/bin/spark-class $OPTIONS org.apache.spark.repl.Main "[email protected]" 

तो हम हमारे चिंगारी खोल इस प्रकार चला सकते हैं:

spark-shell -Dspark.executor.memory=6g 

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

System.setProperty("spark.executor.memory", valueFromCommandLine) 

डिफ़ॉल्ट क्लस्टर चौड़ा बदलने के लिए, क्षमा करें, पूरी तरह से यह सुनिश्चित नहीं है कि इसे ठीक से कैसे किया जाए।

एक अंतिम बिंदु - मैं इस तथ्य से थोड़ा चिंतित हूं कि आपके पास 2 जीबी के साथ 2 नोड्स हैं और एक 6 जीबी है। आप जिस स्मृति का उपयोग कर सकते हैं वह सबसे छोटा नोड तक सीमित होगा - इसलिए यहां 2 जीबी है।

+7

'spark.executor.memory' एप्लिकेशन (नौकरी) द्वारा उपयोग की जाने वाली स्मृति है, न कि कार्यकर्ता के लिए आवंटित स्मृति। – maasg

+1

आदर्श रूप से आप spark.env.sh फ़ाइल में मान सेट करेंगे। यह आपको प्रत्येक बार खोल चलाने पर तर्क में प्रवेश किए बिना डिफ़ॉल्ट सेट करने की अनुमति देता है। –

1

कार्यकर्ता के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन प्रत्येक कार्यकर्ता के लिए Host_Memory - 1Gb आवंटित करना है। उस मान को मैन्युअल रूप से समायोजित करने के लिए कॉन्फ़िगरेशन पैरामीटर SPARK_WORKER_MEMORY है, जैसे आपके प्रश्न में:

export SPARK_WORKER_MEMORY=6g

+0

मुझे आपकी बात मिलती है, और यह थोड़ी सी बात है कि सवाल कैसे phrased है, लेकिन मुझे संदेह है कि वह वही है जो वह चाहता है कि वह मास्टर मॉनिटर पेज पर जो वर्णन करता है उसके आधार पर निर्णय लेता है। – samthebest

+0

@ massag मेरे मामले में, प्रत्येक कार्यकर्ता केवल डिफ़ॉल्ट रूप से ** 512MB ** का उपयोग करता है। जब मैं 'निर्यात SPARK_WORKER_MEMORY = 6g' सेटिंग जोड़ता हूं। यह श्रमिकों के लिए स्मृति में वृद्धि नहीं करता है। मास्टर मैनेजर पेज –

+0

पर प्रत्येक कार्यकर्ता के लिए मुझे अभी भी स्मृति दिखाई देती है ** 512 एमबी ** मास्टर पेज कार्यकर्ता कुल स्मृति और वर्तमान में उपयोग की गई मेमोरी को दिखाता है। आपके श्रमिकों की कुल स्मृति का 2/2/6 जीबी है और वर्तमान में 512 एमबी का उपयोग कर रहे हैं। यह कार्य निष्पादक का स्मृति उपयोग है। उस 'spark.executor.memory' का उपयोग करने के लिए। @ सैमबेस्ट उत्तर देखें। – maasg

10

मेरे मामले में, मैं स्पार्क से कनेक्ट करने के लिए ipython नोटबुक सर्वर का उपयोग करता हूं। मैं निष्पादक के लिए स्मृति को बढ़ाना चाहता हूं।

यह मैं क्या कर रहा है:

from pyspark import SparkContext 
from pyspark.conf import SparkConf 

conf = SparkConf() 
conf.setMaster(CLUSTER_URL).setAppName('ipython-notebook').set("spark.executor.memory", "2g") 

sc = SparkContext(conf=conf) 
+2

मैं अब 2 दिनों के लिए ipython में मेमोरी सेट करने के लिए देख रहा था, और आपका एकमात्र ऐसा है जो मेरे लिए काम करता है। – ninehundred

+1

हाँ, यह एकमात्र चीज थी जिसने मुझे 1024 एमबी ओओएम नरक से बाहर निकालने के लिए काम किया था! : डी –

9

Spark documentation के अनुसार आप मेमोरी नोड प्रति कमांड लाइन तर्क --executor-memory साथ हुए अपने आवेदन जमा करने को बदल सकते हैं। जैसे

./bin/spark-submit \ 
    --class org.apache.spark.examples.SparkPi \ 
    --master spark://master.node:7077 \ 
    --executor-memory 8G \ 
    --total-executor-cores 100 \ 
    /path/to/examples.jar \ 
    1000 

मैंने परीक्षण किया है और यह काम करता है।

12

स्पार्क 1.1.1 में, श्रमिकों की अधिकतम मेमोरी सेट करने के लिए।

export SPARK_EXECUTOR_MEMORY=2G 

आप अभी तक कॉन्फ़िग फ़ाइल उपयोग नहीं किया है, टेम्पलेट फ़ाइल

cp conf/spark-env.sh.template conf/spark-env.sh 

फिर परिवर्तन कर कॉपी और भूल नहीं है: conf/spark.env.sh में , इस बारे में इसे स्रोत करने के लिए

source conf/spark-env.sh 
+0

यह स्पार्क 1.3.0 (निर्यात के बिना) में मेरे लिए काम किया। मैंने spark-env.sh का स्रोत किया हालांकि –

+0

@ ट्रिस्टन-वू यार्न के लिए यह विशिष्ट नहीं है? – dirceusemighini

संबंधित मुद्दे