2014-09-07 11 views
23

मेरी स्पार्क नौकरी में शफल होने पर विफल रहता है और कहता है "डिवाइस पर कोई स्थान नहीं छोड़ा गया", लेकिन जब मैं df -h चलाता हूं तो यह कहता है कि मेरे पास खाली स्थान शेष है! ऐसा क्यों होता है, और मैं इसे कैसे ठीक कर सकता हूं?"डिवाइस पर कोई स्थान नहीं छोड़ा गया" के साथ नौकरी विफल क्यों होती है, लेकिन डीएफ अन्यथा कहता है?

+0

यह सवाल विषय से हटकर हो सकता है क्योंकि यह प्रोग्रामिंग के बारे में नहीं है प्रकट होता है। –

+0

क्या आपके पास ड्राइव पर खाली स्थान छोड़ा गया है कि स्पार्क टीएमपी फाइलें लिख रहा है? –

+1

@ यूजीन मेवेव्स्की'एलीडबिट रनिंग और समस्या निवारण स्पार्क नौकरियों को एक एसओएफ विषय माना जाता है। यह स्पष्ट रूप से, 2015 – javadba

उत्तर

7

आपको df -i पर भी निगरानी करने की आवश्यकता है जो दिखाता है कि कितने इनोड उपयोग में हैं।

on each machine, we create M * R temporary files for shuffle, where M = number of map tasks, R = number of reduce tasks.

https://spark-project.atlassian.net/browse/SPARK-751

आप वास्तव में लगता है कि डिस्क inodes से बाहर चल रहे हैं समस्या आप कर सकते हैं ठीक करने के लिए करते हैं:

  • घटाएँ विभाजन (shuffle = false साथ coalesce देखें)।
  • कोई "फ़ाइलों को समेकित करके" संख्या को ओ (आर) में छोड़ सकता है। चूंकि अलग-अलग फ़ाइल-सिस्टम अलग-अलग व्यवहार करते हैं, यह अनुशंसा की जाती है कि आप spark.shuffle.consolidateFiles पर पढ़ लें और https://spark-project.atlassian.net/secure/attachment/10600/Consolidating%20Shuffle%20Files%20in%20Spark.pdf देखें।
  • कभी-कभी आप आसानी से पाते हैं कि एफएस का समर्थन करने वाले इनोडों की संख्या बढ़ाने के लिए आपको अपने देवोपों की आवश्यकता है।

संपादित

समेकन फ़ाइलें संस्करण 1.6 के बाद से चिंगारी से हटा दिया गया। https://issues.apache.org/jira/browse/SPARK-9808

1

कुछ अन्य समाधान:

  • स्पष्ट रूप intermidiate shuffe फ़ाइलों को हटाने। यदि आप बाद में गणना के लिए आरडीडी रखने के लिए नहीं चाहते हैं, तो आप .unpersist() पर कॉल कर सकते हैं जो हटाने के लिए इंटरमीडिएट शफल फ़ाइलों को ध्वजांकित करेगा (आप भी किसी भी को rdd चर को फिर से असाइन कर सकते हैं)।

  • अधिक श्रमिकों का उपयोग करें, और अधिक श्रमिक औसत इंटरमीडिएट पर्याप्त फ़ाइल आवश्यक/कार्यकर्ता की संख्या को कम कर देंगे। "डिवाइस पर कोई स्थान छोड़ दिया" इस पर त्रुटि के बारे में

अधिक धागा databricks: https://forums.databricks.com/questions/277/how-do-i-avoid-the-no-space-left-on-device-error.html

16

डिफ़ॉल्ट Spark तक मध्यवर्ती डाटा स्टोर करने /tmp निर्देशिका का उपयोग करता है। यदि आपके पास वास्तव में पर कुछ डिवाइस पर स्थान छोड़ा गया है - तो आप फ़ाइल SPARK_HOME/conf/spark-defaults.conf फ़ाइल बनाकर और लाइन जोड़कर इसे बदल सकते हैं। यहां पर SPARK_HOME जहां भी आप स्पार्क इंस्टॉल के लिए रूट निर्देशिका है।

spark.local.dir      SOME/DIR/WHERE/YOU/HAVE/SPACE 
6

मुझे एक जैसी समस्या का सामना करना पड़ा। डिफ़ॉल्ट रूप से, स्पार्क इंटरमीडिएट फ़ाइलों को सहेजने के लिए "/ tmp" का उपयोग करता है। जब नौकरी चल रही है, तो आप "/" बढ़ते हुए fs के उपयोग की गई जगह को देखने के लिए "df -h" टैब कर सकते हैं। जब देव की जगह समाप्त हो जाती है, तो यह अपवाद फेंक दिया जाता है। समस्या को हल करने के लिए, मैंने SPARK_HOME/conf/spark_defaults.conf में SPARK_LOCAL_DIRS को पर्याप्त स्थान छोड़कर एक fs में पथ के साथ सेट किया है।

1

इस त्रुटि के लिए एक अन्य परिदृश्य:

  1. मैं एक चिंगारी से काम जो डेटा (~ 150GB और ~ 100GB) के दो स्रोतों का उपयोग करता है और एक आंतरिक में शामिल होने करता है, कई समूह द्वारा, फ़िल्टरिंग, और मानचित्रण है संचालन।

    मेरा काम फेंक त्रुटि "डिवाइस पर कोई स्थान छोड़ दिया":

  2. मैं चिंगारी EC-2 स्क्रिप्ट का उपयोग

समस्या एक 20 नोड्स (r3.2xlarge) चिंगारी क्लस्टर बनाया। जैसा कि आप देख सकते हैं कि मेरे काम को इतने सारे शफल करने की आवश्यकता है, इसलिए इस समस्या का सामना करने के लिए मैंने शुरुआत में 20-नोड्स का उपयोग किया है और फिर 40-नोड्स तक बढ़ा दिया है। किसी भी तरह से समस्या अभी भी हो रही थी। मैं spark.local.dir बदलने जैसे अन्य सभी सामान की कोशिश की, repartitioning, कस्टम विभाजन, और पैरामीटर ट्यूनिंग (संपीड़न, spiling, स्मृति, स्मृति अंश, आदि) के रूप में ज्यादा मैं कर सकता। इसके अलावा, मैंने इंस्टेंस प्रकार r3.2xlarge का उपयोग किया जिसमें 1 x 160 एसएसडी है लेकिन समस्या अभी भी हो रही है।

समाधान:

मैं नोड्स में से एक में प्रवेश किया था, और मार डाला "df -h /" मैं नोड केवल एक EBS मात्रा (8GB) घुड़सवार गया है पाया, लेकिन कोई एसएसडी था (160GB)। तब मैं "ls/dev /" में देखा और एसएसडी जुड़ा था। यह समस्या क्लस्टर में सभी नोड्स के लिए नहीं हो रही थी। त्रुटि "डिवाइस पर कोई स्थान नहीं छोड़ा गया" केवल उन नोड्स के लिए हो रहा है जिनमें एसएसडी घुड़सवार नहीं है। चूंकि वे केवल 8 जीबी (ईबीएस) से निपट रहे हैं और उस ~ 4 जीबी स्पेस में से उपलब्ध था।

मैं एक bash स्क्रिप्ट जो चिंगारी क्लस्टर चिंगारी EC2 स्क्रिप्ट का उपयोग कर तो यह स्वरूपण के बाद डिस्क माउंट शुरूआत बनाया।

  1. EC2 स्क्रिप्ट क्लस्टर
  2. MASTER_HOST = get-गुरु $ CLUSTER_NAME
  3. ssh -ओ StrictHostKeyChecking = नहीं जड़ @ $ MASTER_HOST "सीडी/जड़/चिंगारी/sbin/& & ./slaves शुरू करने के लिए। श mkfs.ext4 -E lazy_itable_init = 0, lazy_journal_init = 0/dev/SDB & & ./slaves.sh -ओ चूक माउंट, noatime, nodiratime/dev/SDB/MNT "
0

SPARK_HOME में बदलें निर्देशिका, क्योंकि हमें निर्देशिका को देना है जिसमें हमारे काम को सुचारू रूप से चलाने के लिए अधिक जगह उपलब्ध है।

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

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