2012-06-13 11 views
11

मेरे पास डेटा 3-अंकों की जीबी या यहां तक ​​कि 1 या 2-अंकों वाली टीबी की परिमाण में सेट है। इसलिए इनपुट फाइलें फाइलों की एक सूची होती हैं, प्रत्येक आकार 10 जीबी की तरह होती है। मेरा नक्शा हैडऑप प्रक्रियाओं में इन सभी फ़ाइलों को संसाधित करता है और फिर केवल एक आउटपुट फ़ाइल (समेकित जानकारी के साथ) देता है।हडोप मैपराइडस: उपयुक्त इनपुट फाइल का आकार?

मेरे प्रश्न हैं:

  1. अपाचे से Hadoop/mapreduce फ्रेमवर्क ट्यूनिंग के लिए उपयुक्त फ़ाइल आकार क्या है? मैंने सुना है कि छोटे फ़ाइल आकार छोटे से अधिक पसंद किए जाते हैं। क्या कोई विचार है? एकमात्र चीज जिसे मैं निश्चित रूप से जानता हूं वह यह है कि हैडोप ब्लॉक को पढ़ता है, प्रत्येक डिफ़ॉल्ट रूप से 64 एमबी के साथ। तो यह अच्छा होगा अगर फ़ाइल का आकार 64 एमबी का गुणक है।

  2. फिलहाल, मेरा एप्लिकेशन आउटपुट फ़ाइल को केवल एक फ़ाइल में लिख रहा है। फ़ाइल का आकार निश्चित रूप से 3-अंकों का गिगाबिट होता है। मैं सोच रहा हूं कि मैं फ़ाइल को कितनी कुशलता से विभाजित कर सकता हूं। बेशक मैं इस काम को करने के लिए बस कुछ यूनिक्स उपकरण का उपयोग कर सकता हूं। लेकिन क्या यह सीधे हैडूप में ऐसा करना पसंद करता है?

आपकी टिप्पणी के लिए Thx!

पीएस .: मैं फ़ाइलों को संपीड़ित नहीं कर रहा हूं। इनपुट फाइलों का फ़ाइल प्रारूप टेक्स्ट/सीएसवी है।

+0

कई सारे प्रश्न (कृपया अपने मूल प्रश्न में उत्तर पोस्ट करें): क्या आप फ़ाइलों को संपीड़ित कर रहे हैं, यदि ऐसा है तो आप किस संपीड़न प्रकार का उपयोग कर रहे हैं (gzip, bz2, ...)? इनपुट फ़ाइलों का फ़ाइल प्रारूप क्या है (टेक्स्ट, बाइनरी?) –

+0

@ क्रिस: मैं फ़ाइलों को संपीड़ित नहीं कर रहा हूं। इनपुट फाइलों का फ़ाइल प्रारूप टेक्स्ट/सीएसवी है। धन्यवाद! – Bob

उत्तर

3

हैडोप इनपुट विभाजित आकार के आधार पर काम को विभाजित करता है। यह आपके कुल आकार के आकार को आपके विभाजित आकार से विभाजित करता है और इस तरह यह निर्धारित करता है कि कितनी नक्शा नौकरियां होंगी। आम सहमति यह है कि आप प्रति मशीन 10-100 मानचित्रों के बीच चाहते हैं; http://hadoop.apache.org/common/docs/r0.18.3/mapred_tutorial.html

मानचित्रों की संख्या आमतौर पर इनपुट फ़ाइलों के कुल आकार, जो इनपुट फ़ाइलों के ब्लॉक की कुल संख्या द्वारा संचालित होती है। नक्शे के लिए समांतरता का सही स्तर लगभग 10-100 मानचित्र प्रति-नोड लगता है, हालांकि इसे बहुत सीपीयू-प्रकाश मानचित्र कार्यों के लिए 300 मानचित्रों तक स्थापित किया गया है। कार्य सेटअप में थोड़ी देर लगती है, इसलिए यदि नक्शे को निष्पादित करने में कम से कम एक मिनट लगते हैं तो यह सर्वोत्तम होता है।

कुछ इनपुट प्रारूपों के साथ आप विभाजन के आकार को सेट कर सकते हैं, डिफ़ॉल्ट रूप से अधिकांश (TextInputFormat सहित) प्रति ब्लॉक एक नक्शा बनाते हैं। इसलिए, यदि आपके पास कई अलग-अलग फाइलें हैं तो आप अधिक गैर-पूर्ण 64 एमबी ब्लॉक के साथ समाप्त हो जाएंगे जो मानचित्र का अपशिष्ट है।

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

7

यदि आप फ़ाइलों को संपीड़ित नहीं कर रहे हैं तो हैडूप फ़ाइल की ब्लॉक आकार से संबंधित कई मैपर के साथ आपकी बड़ी फ़ाइलों (10 जी कहें) को संसाधित करेगा।

कहें कि आपका ब्लॉक आकार 64 एम है, तो आपके पास इस 10 जी फ़ाइल (160 * 64 ~ = 10 जी) को संसाधित करने वाले ~ 160 मैपर होंगे। आपके मैपर तर्क को गहन करने के तरीके के आधार पर, यह एक स्वीकार्य ब्लॉक आकार हो सकता है, लेकिन यदि आपको लगता है कि आपके मैपर उप मिनट के समय में निष्पादित हो रहे हैं, तो हो सकता है कि आप प्रत्येक मैपर द्वारा किए गए काम को बढ़ाएं (ब्लॉक आकार को बढ़ाकर) 128, 256, 512 मीटर तक - वास्तविक आकार इस बात पर निर्भर करता है कि आप डेटा को संसाधित करने का इरादा रखते हैं)।

एक बड़ा ब्लॉक आकार 10 जी फ़ाइल को संसाधित करने के लिए उपयोग किए गए मैपर की संख्या को कम करेगा।आप निश्चित रूप से TextInputFormat द्वारा उपयोग किए गए न्यूनतम स्प्लिट आकार को बढ़ा सकते हैं, लेकिन फिर आप शायद निम्न डेटा इलाके में भाग लेंगे क्योंकि मैपर 2 या अधिक ब्लॉकों को संसाधित कर सकता है, जो कि उस नोड पर स्थानीय रूप से नहीं रह सकता है।

आउटपुट के लिए, यह फिर से निर्भर करता है कि आपका प्रोसेसिंग तर्क क्या कर रहा है - क्या आप केवल अधिक reducers पेश करके विभाजन कर सकते हैं? यह और अधिक उत्पादन फ़ाइलों निर्माण करेंगे, लेकिन क्या विभाजन तर्क आप इन फ़ाइलों के लिए आवश्यकता होती है इनपुट फ़ाइलों की

+0

विभाजन के साथ, मेरा मतलब आउटपुट फ़ाइल को कई अन्य फाइलों में विभाजित करना है, क्योंकि मैं इस आउटपुट का फिर से उपयोग करूंगा क्योंकि अन्य मानचित्र के लिए इनपुट नौकरियों को कम करता है। आकार के रूप में 1TB के साथ 1 फ़ाइल खराब होगी, है ना? – Bob

+0

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

+0

मैपर की संख्या ब्लॉक आकार पर निर्भर नहीं है जो वे इनपुट विभाजन के आकार पर निर्भर करते हैं। –

5

आकार (डिफ़ॉल्ट रूप से वे अपने प्रमुख द्वारा विभाजित हैश हो जाएगा):

एक तरीका यह धुन पर यह देखना है कि आपके मानचित्र कार्य कितने तेज़ हैं। प्रत्येक नक्शा कार्य इनपुट के रूप में 1 फ़ाइल में ले जाएगा और यदि वे 30-40 सेकंड के भीतर पूरा कर रहे हैं, तो आपको प्रत्येक फ़ाइल के आकार को बढ़ाने पर विचार करना चाहिए ताकि प्रत्येक मैपर के पास और अधिक काम हो। ऐसा इसलिए है क्योंकि किसी भी वास्तविक कार्य से पहले नक्शा कार्य शुरू करने के लिए लगभग 30 सेकंड लगते हैं।

यह भी इस बात पर निर्भर करता है कि आपके क्लस्टर एक समय में कितने मानचित्र कार्य कर सकते हैं। आप अपनी फ़ाइल को ट्यून करने और आकार को ब्लॉक करने का प्रयास कर सकते हैं ताकि आप जितना संभव हो उतने नक्शा कार्यों का लाभ उठा सकें। अधिक विचारों के लिए इस ब्लॉग पोस्ट देखें: http://www.cloudera.com/blog/2009/12/7-tips-for-improving-mapreduce-performance/

उत्पादन फ़ाइलों का आकार:

सरल यह करने के लिए जिस तरह से एक से अधिक कम करने (प्रत्येक कम करने के लिए एक एकल आउटपुट फ़ाइल का उत्पादन करेगा) निर्दिष्ट करने के लिए है। यदि आप अपने परिणामों को कुछ कुंजी (कहें, साल-महीने) से विभाजित करना चाहते हैं तो आप अपने मानचित्र कार्य की आउटपुट कुंजी में शामिल कर सकते हैं और उन्हें उसी रेड्यूसर में सॉर्ट किया जाएगा। फिर आपको यह देखने के लिए प्रत्येक फ़ाइल की जांच करनी होगी कि यह किस वर्ष की कुंजी है।

संपीड़न:

मेरा सुझाव है कि आप अपनी फ़ाइलों को संपीड़ित करने को देखो। ऐसा करने से इनपुट फाइलें "बड़ी" हो जाएंगी क्योंकि प्रत्येक में एक मानचित्र कार्य के लिए अधिक डेटा होगा। इससे आपके क्लस्टर में उपयोग की जाने वाली डिस्क की मात्रा भी कम हो जाएगी। यदि कुछ भी हो, तो यह आपके क्लस्टर पर मैप्रिडस के प्रदर्शन को भी बढ़ा सकता है क्योंकि कम डिस्क I/O और नेटवर्क ट्रैफ़िक फ़ाइलों को पढ़ने और स्थानांतरित करने से होता है।

इसके अलावा, अपने मानचित्र कार्य के मध्यवर्ती आउटपुट को संपीड़ित करें (मानचित्र कार्य से आउटपुट को reducer पर जाने से पहले)। यह प्रदर्शन को इसी तरह से बढ़ाएगा। यह mapred.compress.map.output=true सेट करके किया जाता है।

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