2013-10-17 7 views
7

मैं कुछ ऑनलाइन ट्यूटोरियल का पालन करने के बाद हडोप में वर्डकाउंट उदाहरण चलाने की कोशिश कर रहा हूं। हालांकि, मुझे यह स्पष्ट नहीं है कि जब हम निम्न आदेश निष्पादित करते हैं तो फाइल को स्थानीय फाइल सिस्टम से एचडीएफएस में कॉपी किया जाता है।हडोप पर एचडीएफएस स्थान क्या है?

hadoop fs -copyFromLocal /host/tut/python-tutorial.pdf /usr/local/myhadoop-tmp/ 

जब मैं निम्न आदेश निष्पादित, मैं अपने अजगर-tutorial.pdf HDFS पर यहां सूचीबद्ध दिखाई नहीं है।

hadoop fs -ls 

यह मुझे भ्रमित कर रहा है। मैंने कोर-साइट.एक्सएमएल में पहले से ही "myhadoop-tmp" निर्देशिका निर्दिष्ट की है। मैंने सोचा कि यह निर्देशिका सभी इनपुट फ़ाइलों को संग्रहीत करने के लिए एचडीएफएस निर्देशिका बन जाएगी।

core-site.xml 
============= 
<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/usr/local/myhadoop-tmp</value> 
    <description>A base for other temporary directories.</description> 
</property> 

यदि ऐसा नहीं है तो मेरी मशीन पर स्थित एचडीएफएस कहां है? क्या कॉन्फ़िगरेशन एचडीएफएस निर्देशिका निर्धारित करता है और जब हम इसे स्थानीय फाइल सिस्टम से एचडीएफएस में कॉपी करते हैं तो इनपुट फ़ाइल कहां जाती है?

+0

क्या आपने 'हैडोप एफएस -एलएस/यूएसआर/लोकल/मायहाडोप-टीएमपी /' कोशिश की थी? – cabad

+0

कूल। यह मेरे लिए काम किया। मैं अब अपनी फाइल देख सकता हूं। मार्गदर्शन के लिए धन्यवाद। – user2325154

+0

ठीक है, मेरा जवाब आपके प्रश्न का उत्तर देता है, इसलिए आपको इसे स्वीकार करना चाहिए। – cabad

उत्तर

6

यह dfs.datanode.data.dir संपत्ति में सेट है, जो file://${hadoop.tmp.dir}/dfs/data पर डिफ़ॉल्ट है (विवरण here देखें)।

हालांकि, आपके मामले में, समस्या यह है कि आप HDFS के भीतर पूर्ण पथ का उपयोग नहीं कर रहे हैं। इसके बजाए, करें:

hadoop fs -ls /usr/local/myhadoop-tmp/ 

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

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

+0

अब मैं फ़ाइल देख सकता हूं, हालांकि यह सीधे मेरे/usr/local/myhadoop-tmp निर्देशिका के अंतर्गत संग्रहीत किया गया है और/usr/local/myhadoop-tmp/dfs/data के अंतर्गत नहीं है। मुझे समझ में नहीं आता क्यों। यह वही है जो मैं देखता हूं: -आरडब्ल्यू-आर - आर-- 1 चंडेलन सुपरग्रुप 9322974 2013-10-17 17:06 /usr/local/myhadoop-tmp/python-tutorial.pdf – user2325154

+0

तो क्या इसका मतलब यह है कि मैं नहीं देख सकता अगर मैं/usr/local/myhadoop-tmp/dfs/data/निर्देशिका में जाता हूं और ls -l कमांड निष्पादित करता हूं तो मेरी स्थानीय फ़ाइल सिस्टम पर फ़ाइल? – user2325154

+0

@ user2325154 मैंने एक और विस्तृत स्पष्टीकरण जोड़ा। – cabad

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