2016-04-15 5 views
6

Hadoop getmerge वर्णन मेंहाडोप -getmerge कैसे काम करता है?

उपयोग: HDFS DFS -getmerge src localdst [addnl]

मेरा प्रश्न है क्यों getmerge स्थानीय गंतव्य के लिए श्रृंखलाबद्ध है क्यों खुद HDFS नहीं? इस सवाल से पूछा गया था क्योंकि मेरे पास निम्नलिखित समस्याएं हैं

  1. क्या होगा यदि फ़ाइलों को विलय किया जाए तो स्थानीय के आकार से अधिक हैं?
  2. क्या स्थानीय गंतव्य के साथ ही सीमित करने के लिए हैडोप -getmerge कमांड को प्रतिबंधित करने के पीछे कोई विशिष्ट कारण है?
+0

मुझे पता है कि यह आपका प्रश्न नहीं है, लेकिन शायद आपको यह पोस्ट उपयोगी लगेगा: http: //stackoverflow.com/questions/21776339/hadoop-getmerge-to-another-machine – vefthym

उत्तर

6

getmerge कमांड विशेष रूप से स्थानीय फ़ाइल सिस्टम पर एक फ़ाइल में एचडीएफएस से फ़ाइलों को विलय करने के लिए बनाया गया है।

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

अपने प्रश्नों के उत्तर:

  1. गंतव्य फाइल सिस्टम पर्याप्त स्थान नहीं है, तो IOException फेंक दिया है। getmerge आंतरिक रूप से IOUtils.copyBytes() (IOUtils.copyBytes() देखें) का उपयोग करता है ताकि एक फ़ाइल को एचडीएफएस से स्थानीय फाइल में एक समय में कॉपी किया जा सके। कॉपी ऑपरेशन में कोई त्रुटि होने पर यह फ़ंक्शन IOException फेंकता है।

  2. यह आदेश hdfs fs -get कमांड के समान है जो एचडीएफएस से स्थानीय फाइल सिस्टम में फ़ाइल प्राप्त करता है। केवल अंतर hdfs fs -getmerge एचडीएफएस से स्थानीय फाइल सिस्टम में कई फाइलों को विलय करता है।

आप HDFS में एकाधिक फ़ाइलों को मर्ज करना चाहते हैं, तो आप इसे FileUtil वर्ग (FileUtil.copyMerge() देखें) से copyMerge() पद्धति का उपयोग करके प्राप्त कर सकते हैं।

यह एपीआई एक निर्देशिका में सभी फ़ाइलों को एक फ़ाइल में कॉपी करता है (सभी स्रोत फ़ाइलों को विलीन करता है)।

+0

उत्तर के लिए धन्यवाद, – monic

+1

क्याgetgetge के लिए कोई विकल्प है जहां मैं फ़ाइलों को सीधे hdfs से hdfs में विलय कर सकता हूं? – monic

+1

इसके लिए कोई कमांड लाइन कार्यक्षमता नहीं है। जैसा कि मैंने उत्तर में बताया है, आपको "FileUtil.copyMerge()" प्रोग्रामेटिक रूप से उपयोग करने की आवश्यकता है या यहां वर्णित कुछ लिनक्स शैल स्क्रिप्ट चाल का उपयोग करना है: http://stackoverflow.com/questions/3548259/merging-multiple-files-into- एक के भीतर Hadoop। उदाहरण के लिए hadoop fs -cat [dir]/* | हडूप एफएस -पुट - [गंतव्य फ़ाइल] –

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