2014-10-29 8 views
9
You use the hadoop fs –put command to write a 300 MB file using and HDFS block size of 64 MB. Just after this command has finished writing 200 MB of this file, what would another user see when trying to access this file? 

a.) They would see Hadoop throw an ConcurrentFileAccessException when they try to access this file. 
b.) They would see the current state of the file, up to the last bit written by the command. 
c.) They would see the current of the file through the last completed block. 
d.) They would see no content until the whole file written and closed. 

क्या मैं hadoop fs -put आदेश जवाब डी है के बारे में समझने से, तथापि कुछ कहते हैं कि यह सीएक फ़ाइल है कि लिखा जा रहा

है पहुँचना

किसी को भी विकल्पों में से किसी के लिए एक रचनात्मक विवरण प्रदान कर सकता है?

धन्यवाद xx

उत्तर

4

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

इसलिए, हालांकि ब्लॉक उपलब्ध हैं, फिर भी उपयोगकर्ता मेटाडेटा अपडेट होने तक फ़ाइल नहीं देख सकता है, जो सभी ब्लॉक लिखे जाने के बाद किया जाता है।

7

जैसे ही फ़ाइल बनाई जाती है, यह फाइल सिस्टम नामस्थान में दिखाई दे रही है। फ़ाइल में लिखी गई कोई भी सामग्री दृश्यमान होने की गारंटी नहीं है, हालांकि:

एक बार ब्लॉक के लायक डेटा से अधिक लिखा गया है, पहला ब्लॉक नए पाठकों के लिए दृश्यमान होगा। यह बाद के ब्लॉक के बारे में भी सच है: यह हमेशा मौजूदा ब्लॉक लिखा जा रहा है जो अन्य पाठकों के लिए दृश्यमान नहीं है। (हडोप परिभाषा गाइड, कोहेन्सी मॉडल से)।

तो, मैं

इसके अलावा विकल्प सी के साथ जाना है, संबंधित question इस पर एक नज़र ले जाएगा।

+0

यह सच है कि ब्लॉक ब्लॉक स्तर पर उपलब्ध हैं, यानी यदि आप जानते हैं कि कौन सा ब्लॉक देखना है तो आप व्यक्तिगत ब्लॉक तक पहुंच सकते हैं। हालांकि, अगर फ़ाइल नाम -> ब्लॉक के बीच मैपिंग युक्त मेटाडेटा तब तक उपलब्ध नहीं है जब तक कि सभी ब्लॉक लिखे नहीं जाते हैं, फ़ाइल स्वयं उपयोगकर्ताओं को दिखाई नहीं देगी क्योंकि सभी फाइल सिस्टम अनुरोधों को नामनोड – Chaos

+3

के माध्यम से भेजा जाता है, मैंने जो देखा है, एचडीएफएस में एक बड़ी फाइल की प्रतिलिपि बनाते समय, फ़ाइल नाम '[FILENAME] _COPYING_' के रूप में बनाया जाता है और जब भी आप अभी भी चल रहे हैं, तो फ़ाइल ('[FILENAME] _COPYING') पर एक पठन ऑपरेशन करने का प्रयास करते हैं, तो आप कर सकते हैं आखिरी ब्लॉक लिखे जाने तक फ़ाइल को अभी भी पढ़ें। मैंने इस व्यवहार का परीक्षण हैडोप 2.4 क्लस्टर में किया है। इसलिए, इस व्यवहार से मुझे लगता है कि जैसे ही ब्लॉक ब्लॉक हो जाता है ('hflush()') और एक एसीके वापस भेजा जाता है, जैसे नाम नोड ब्लॉक मानचित्र को अपडेट करता है। एक बार जब फ़ाइल लिखना पूरा हो जाता है तो एचडीएफएस में फ़ाइल का नाम बदलकर '[FILENAME]' कर दिया जाता है। – Ashrith

+0

@ArrithM मैंने 300 एमबी फ़ाइल को -PUT कमांड के साथ लिखने की कोशिश की है और इसे किसी अन्य उपयोगकर्ता के तहत -CAT कमांड के साथ पढ़ा है और "फ़ाइल मौजूद नहीं है" संदेश मिला है। लिखी जा रही फाइल को पढ़ने के लिए आपने किस कमांड (विधि) का उपयोग किया था? – Dennis

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

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