2014-11-28 12 views
38

मैं स्पार्क में निष्पादक स्मृति और ड्राइवर स्मृति से निपटने के बारे में उलझन में हूं।स्पार्क में एक्जिक्यूटर मेमोरी और ड्राइवर मेमोरी से कैसे निपटें?

मेरे पर्यावरण सेटिंग्स के रूप में नीचे हैं:

  • मेमोरी 128 जी, के लिए 9 वी एम
  • Centos 16 सीपीयू
  • Hadoop 2.5.0-cdh5.2.0
  • स्पार्क 1.1.0

इनपुट डेटा जानकारी:

    HDFS

से

  • 3.5 जीबी डेटा फ़ाइल सरल विकास के लिए, मैं अपने अजगर कोड स्टैंडअलोन क्लस्टर मोड में (8 श्रमिकों, 20 कोर, 45.3 जी स्मृति) spark-submit साथ फांसी दे दी। अब मैं निष्पादन ट्यूनिंग के लिए एक्जिक्यूटर मेमोरी या ड्राइवर मेमोरी सेट करना चाहता हूं।

    Spark documentation से, निष्पादक स्मृति के लिए परिभाषा स्मृति के

    राशि निष्पादक प्रक्रिया के अनुसार उपयोग करने के लिए, JVM स्मृति तारों के रूप में एक ही प्रारूप (जैसे 512M, 2 जी) में है।

    ड्राइवर स्मृति के बारे में कैसे?

  • उत्तर

    70

    ड्राइवर को असाइन करने की आपको जो मेमोरी चाहिए वह नौकरी पर निर्भर करता है।

    काम विशुद्ध रूप से परिवर्तनों पर आधारित है और rdd.saveAsTextFile, rdd.saveToCassandra जैसे कुछ वितरित उत्पादन कार्रवाई पर समाप्त हो जाता है, ... तो चालक की स्मृति की जरूरत बहुत कम हो जाएगा। कुछ 100 एमबी करेंगे। चालक फाइलें वितरित करने और मीट्रिक एकत्र करने के लिए भी जिम्मेदार है, लेकिन डेटा प्रोसेसिंग में शामिल नहीं है।

    यदि नौकरी के लिए ड्राइवर को गणना में भाग लेने की आवश्यकता होती है, जैसे उदा। कुछ एमएल अलगो जिन्हें परिणामों को पूरा करने और उन्हें अगले पुनरावृत्ति पर प्रसारित करने की आवश्यकता होती है, तो आपका काम ड्राइवर के माध्यम से गुज़रने वाले डेटा की मात्रा पर निर्भर हो जाता है। .collect, .take और takeSample जैसे ऑपरेशन ड्राइवर को डेटा वितरित करते हैं और इसलिए, ड्राइवर को ऐसे डेटा आवंटित करने के लिए पर्याप्त स्मृति की आवश्यकता होती है।

    उदा। यदि आपके पास क्लस्टर में 3 जीबी का rdd है और val myresultArray = rdd.collect पर कॉल करें, तो आपको पहले पैराग्राफ में उल्लिखित कार्यों के लिए डेटा और कुछ अतिरिक्त कमरा रखने के लिए ड्राइवर में 3 जीबी मेमोरी की आवश्यकता होगी।

    4

    स्पार्क एप्लिकेशन में, चालक कार्य शेड्यूलिंग के लिए ज़िम्मेदार है और निष्पादक आपके काम में ठोस कार्यों को निष्पादित करने के लिए ज़िम्मेदार है।

    आप MapReduce से परिचित हैं, अपने नक्शे कार्यों को कम & कार्य सभी निर्वाहक में क्रियान्वित कर रहे हैं (स्पार्क में, वे ShuffleMapTasks & ResultTasks कहा जाता है), और भी, जो कुछ भी RDD आप कैश करना चाहते हैं निष्पादक के JVM के ढेर & में भी है डिस्क।

    तो मुझे लगता है कि कुछ जीबी आपके ड्राइवर के लिए ठीक रहेगा।

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