2014-09-07 6 views
22

मुझे अपने स्पार्क नौकरी के शफल चरण के दौरान "बहुत सारी खुली फाइलें" मिलती हैं। मेरी नौकरी इतनी सारी फाइलें क्यों खोल रही है? मेरी नौकरी सफल होने की कोशिश करने के लिए मैं क्या कदम उठा सकता हूं।स्पार्क नौकरी "बहुत सारी खुली फाइलों" के साथ क्यों विफल हो जाती है?

उत्तर

19

This has been answered on the spark user list:

सबसे अच्छा तरीका है निश्चित रूप से सिर्फ ulimit यदि संभव हो तो बढ़ाने के लिए है, इस धारणा हम स्पार्क कि समूहों यह चारों ओर ले जाने के लिए सक्षम होंगे में बनाने की तरह है।

आप रेड्यूसर [या प्रत्येक नोड द्वारा उपयोग किए जाने वाले कोर] की संख्या को कम करके इस पर हैक करने में सक्षम हो सकते हैं लेकिन इससे आपके नौकरी के लिए कुछ प्रदर्शन प्रभाव हो सकते हैं।

सामान्य रूप से यदि आपके क्लस्टर में नोड ने सी को असाइन किया है और आप एक्स रेड्यूसर के साथ एक नौकरी चलाते हैं तो स्पार्क समानांतर में सी * एक्स फ़ाइलों को खोल देगा और लेखन शुरू करेगा। शफल समेकन कुल बनाई गई फ़ाइलों की संख्या को कम करने में मदद करेगा, लेकिन समय पर फ़ाइल हैंडल खोलने की संख्या बदलती नहीं है, इसलिए यह उलटी समस्या में मदद नहीं करेगा।

-पैट्रिक वेंडेल

+1

मैंने सोचा था कि स्पार्क के प्राथमिक लाभों में से एक यह चीजों को रैम में रखता है .. फिर उसे इतनी सारी फाइलें क्यों खोलनी पड़ेगी? – anthonybell

+0

यह शफ़ल के दौरान उन फ़ाइलों का उपयोग करता है। विचार यह है कि स्थानीय डिस्क पर प्रत्येक रेड्यूसर के लिए डेटा को पहले चरणबद्ध करना है, फिर reducer डेटा को अपनी गति से (पुश के बजाय खींचें) का उपभोग कर सकता है। – marios

+1

बस किसी और को मेसो का उपयोग करके एक ही समस्या में कदम उठाने के मामले में, उसी स्पार्क उपयोगकर्ता सूची थ्रेड को उद्धृत करते हुए: "यह पता चला है कि मेसो ओएस ulimit -n सेटिंग को ओवरराइट कर सकता है। इसलिए हमने मेसोस गुलाम ulimit -n सेटिंग में वृद्धि की है। " – vefthym

8

डिफ़ॉल्ट ulimit 1024 जो बड़े पैमाने पर अनुप्रयोगों के लिए हास्यास्पद कम है। एचबीएएस 64 के लिए सिफारिश करता है; आधुनिक लिनक्स सिस्टम को इस खुली फ़ाइलों के साथ परेशानी नहीं लगती है।

उपयोग

ulimit -a 

खुली फ़ाइलों के अपने वर्तमान अधिकतम संख्या को देखने के लिए

ulimit -n 

अस्थायी रूप से खुली फ़ाइलों की संख्या बदल सकते हैं; आपको यह स्थायी बनाने के लिए सिस्टम कॉन्फ़िगरेशन फ़ाइलों और प्रति-उपयोगकर्ता सीमाओं को अद्यतन करने की आवश्यकता है। रेडहाट सिस्टम पर, यह

/etc/sysctl.conf 
/etc/security/limits.conf 
संबंधित मुद्दे