2013-06-21 7 views
8

सबसे पहले, मैं :)रनिंग HDFS में विशिष्ट फ़ाइलों/ब्लॉक पर मानचित्र-कम काम

मैं Gzipped फ़ाइलों के एक बड़े डेटा सेट (के आकार के चारों ओर Gzipped फ़ाइलों में दस्तावेजों की टीबीएस है Hadoop के लिए नया हूँ प्रत्येक 100-500 एमबी)।

असल में, मुझे अपने मानचित्र में मेरे इनपुट के कुछ प्रकार की फ़िल्टरिंग की आवश्यकता है-नौकरियों को कम करें।

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

मैं आवश्यक इंडेक्स मैन्युअल रूप से उत्पन्न कर सकता हूं, लेकिन मैं मैपर्स में इनपुट के रूप में कौन सी (हजारों) विशिष्ट फाइल/ब्लॉक को संसाधित करना चाहता हूं, मैं कैसे निर्दिष्ट करूं? क्या मैं स्रोत डेटा को पढ़ने के बिना ऐसा कर सकता हूं उदा। HBase? क्या मैं चाहता हूँ या क्या मैं इस समस्या को पूरी तरह गलत कर रहा हूं?

+0

तो अगर मैं सही ढंग से समझ रहा हूं, तो आप इनपुट पथ में फ़ाइलों के बसने को संसाधित करने का कोई तरीका ढूंढ रहे हैं? आप प्रोग्रामिंग के रूप में नौकरियां कैसे शुरू कर रहे हैं? – climbage

+0

विभिन्न प्रारूपों (फ़ाइलों) के लिए अलग-अलग नौकरियों को चलाने के बजाए एचडीएफएस ब्लॉक को लक्षित करने से आप कैसे कार्य तेजी से कर सकते हैं? क्या आप अपना प्रश्न अधिक विस्तृत कर सकते हैं? –

+0

बहुत अस्पष्ट होने के लिए खेद है। मैं अभी भी हडूप स्टैक में घर पर महसूस नहीं कर रहा हूं, इसलिए मुझे पता है कि मेरी शब्दावली और सोच का तरीका थोड़ा दूर है। निम्नलिखित उदाहरण यह समझाने में मदद कर सकता है कि मैं क्या हासिल करने की कोशिश कर रहा हूं: 1,000,000 फाइलें दी गईं, और एक इंडेक्स जो मुझे बताती है कि कौन सी 5,000 फाइलों में शब्द * धूप * है, एक मानचित्र-कम नौकरी चलाएं जो शब्दों वाले सभी दस्तावेजों का विश्लेषण करता है * धूप * । – jkgeyti

उत्तर

2

मान लें कि आप किसी तरह से है जिसके द्वारा आप पता कर सकते हैं जो x फ़ाइलों का विशाल संग्रह में कार्रवाई करने के लिए फ़ाइलों है, तो आप org.apache.hadoop.mapreduce.lib.input.FileInputFormat.setInputPathFilter(Job, Class<? extends PathFilter>) विधि जब अपने काम को विन्यस्त उपयोग कर सकते हैं।

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

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

इस लक्ष्य फ़ाइल को संग्रहीत करने/पुनर्प्राप्त करने के लिए, आपके पास दृढ़ता स्टोर जैसे कई विकल्प हैं एक कुंजी/वैल्यू स्टोर (एचबीएएस, जैसा कि आपने अपने प्रश्न में नोट किया है), एक अलग डेटाबेस (माईएसक्यूएल, इत्यादि), एक उलटा इंडेक्स (ल्यूसीन) इत्यादि

1

एचडीएफएस में विशिष्ट फ़ाइलों पर मानचित्र को कम करने का मतलब है फ़िल्टर का मतलब है फ़िल्टर कुछ मानदंडों के आधार पर इनपुट फ़ाइल बाहर करें। Here एंटोनी अमेन्ड द्वारा पोस्ट किया गया एक अच्छा ब्लॉग है, सहायक होगा।

2

आप अनुक्रमित की तरह मैं बनाया आधारित वास्तव में की आवश्यकता होगी क्योंकि आप फ़ाइल सामग्री के आधार पर फिल्टर करने के लिए इनपुट (शब्द युक्त फ़ाइल foobar) और मेटाडेटा (फ़ाइल नाम/आकार, आदि) दायर नहीं करना चाहते हैं हडोप इनपुट पर क्लिक करें। देखें my blog

+0

कूल। मैंने यह सवाल पूछने के बाद से वास्तव में एक समान सेटअप बनाया है। मुझे खुशी है कि आपने बेंचमार्क जोड़े हैं, मैं कोशिश करूँगा और आपके थोड़ा अलग दृष्टिकोण की तुलना करूंगा। क्या आपके पास कोई डेटा है कि आपका डेटा कैसा दिखता है, इसलिए मैं बेंचमार्क के समान कुछ उत्पन्न कर सकता हूं? – jkgeyti

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