hadoop
HDFS क्या है?
खोज…
टिप्पणियों
एचडीएफएस की एक अच्छी व्याख्या और यह कैसे काम करता है।
सिंटैक्स में वे कमांड्स होने चाहिए जो शायद HDFS में उपयोग होते हैं।
HDFS - Hadoop डिस्ट्रिब्यूटेड फाइल सिस्टम
Hadoop डिस्ट्रिब्यूटेड फाइल सिस्टम (HDFS) एक जावा-आधारित फाइल सिस्टम है, जो स्केलेबल और विश्वसनीय डेटा स्टोरेज प्रदान करता है, जो कमोडिटी सर्वर के बड़े क्लस्टर को बनाने के लिए बनाया गया है। HDFS, MapReduce, और YARN अपाचे ™ Hadoop® का मुख्य भाग है।
HDFS को अत्यधिक दोष-सहिष्णु बनाया गया है, जो कि कई नोड्स में दिए गए डेटा ब्लॉक की कई प्रतियों (डिफ़ॉल्ट रूप से) को सहेजकर प्राप्त किया जाता है।
एचडीएफएस में फाइलें ढूंढना
Hadoop वितरित फ़ाइल सिस्टम में एक फ़ाइल खोजने के लिए:
hdfs dfs -ls -R / | grep [search_term]
उपरोक्त आदेश में,
-ls
फाइलों को सूचीबद्ध करने के लिए है
-R
पुनरावर्ती के लिए है (उप निर्देशिकाओं के माध्यम से पुनरावृति)
/
रूट निर्देशिका से मतलब है
|
पहले कमांड के आउटपुट को दूसरे तक पहुंचाने के लिए
मिलान तार निकालने के लिए grep
कमांड
[search_term]
फ़ाइल का नाम हडूप फ़ाइल सिस्टम की सभी फ़ाइलों की सूची में खोजा जा सकता है।
वैकल्पिक रूप से नीचे दिए गए कमांड का भी उपयोग किया जा सकता है और कुछ भाव भी लागू कर सकते हैं:
hadoop fs -find / -name test -print
उन सभी फ़ाइलों को ढूँढता है जो निर्दिष्ट अभिव्यक्ति से मेल खाती हैं और उन पर चयनित क्रियाएं लागू करती हैं। यदि कोई पथ निर्दिष्ट नहीं है, तो वर्तमान कार्यशील निर्देशिका में डिफ़ॉल्ट है। यदि कोई अभिव्यक्ति निर्दिष्ट नहीं है, तो -प्रिंट को डिफॉल्ट करता है।
निम्नलिखित प्राथमिक अभिव्यक्तियों को पहचाना जाता है:
-
name pattern
-
iname pattern
यदि फ़ाइल का बेसन मानक फ़ाइल सिस्टम ग्लोबिंग का उपयोग करके पैटर्न से मेल खाता है, तो यह सही है। यदि -iname का उपयोग किया जाता है तो मैच असंवेदनशील होता है।
-
print
-
print0Always
सत्य का मूल्यांकन करता है। मानक आउटपुट के लिए वर्तमान पथनाम को लिखा जाता है। यदि -print0
अभिव्यक्ति का उपयोग किया जाता है तो एक ASCII NULL वर्ण जोड़ा जाता है।
निम्नलिखित ऑपरेटरों को मान्यता प्राप्त है:
expression -a expression
expression -and expression
expression expression
ब्लॉक और विभाजन एचडीएफएस
एचडीएफ में ब्लॉक साइज और ब्लॉक : एचडीएफएस में जब भी फाइल लोड की जाती है, तो ब्लॉक में डेटा स्टोर करने की अवधारणा होती है। ब्लॉक एचडीएफएस (या उस मामले के लिए किसी अन्य फाइल सिस्टम में) डेटा के भौतिक विभाजन हैं।
जब भी कोई फ़ाइल HDFS पर लोड की जाती है, तो इसे भौतिक रूप से विभाजित किया जाता है (हाँ, फ़ाइल को विभाजित किया जाता है) विभिन्न भागों में ब्लॉक के रूप में जाना जाता है। ब्लॉक की संख्या के मान पर निर्भर
dfs.block.size
मेंhdfs-site.xml
आदर्श रूप से, ब्लॉक का आकार बड़े मूल्य पर सेट किया जाता है जैसे कि 64/128/256 एमबी (सामान्य एफएस में 4KB की तुलना में)। Hadoop 2.x के अधिकांश वितरण पर डिफ़ॉल्ट ब्लॉक आकार मान 128 MB है। एक उच्च ब्लॉक आकार का कारण है क्योंकि Hadoop को कुछ सौ मेगाबाइट्स से लेकर TeraBytes के आदेश तक प्रत्येक फ़ाइल के साथ पेटाबाइट्स के डेटा से निपटने के लिए बनाया गया है।
उदाहरण के लिए कहें कि आपके पास 1024 MB साइज़ की फ़ाइल है। यदि आपका ब्लॉक आकार 128 एमबी है, तो आपको प्रत्येक 128 एमबी के 8 ब्लॉक मिलेंगे। इसका मतलब यह है कि आपके नामेनोड को
8 x 3 = 24
फ़ाइलों (3 प्रतिकृति कारक) के मेटाडेटा को संग्रहीत करने की आवश्यकता होगी।4 केबी के ब्लॉक आकार के साथ एक ही परिदृश्य पर विचार करें। इसका परिणाम
1GB / 4KB = 250000
ब्लॉक होगा और इसके लिए केवल 1GB फ़ाइल के लिए मेटाडेटा को750000
ब्लॉकों में सहेजने के लिए namenode की आवश्यकता होगी। चूंकि इन सभी मेटाडेटा से संबंधित जानकारी को मेमोरी में संग्रहीत किया जाता है, इसलिए नामनोड पर उस अतिरिक्त भार को बचाने के लिए बड़ा ब्लॉक आकार पसंद किया जाता है।अब फिर से, ब्लॉक का आकार 1GB आदि जैसे अत्यधिक उच्च मूल्य पर सेट नहीं किया जाता है, क्योंकि आदर्श रूप से, प्रत्येक ब्लॉक डेटा के लिए 1 मैपर लॉन्च किया जाता है। इसलिए यदि आप ब्लॉक का आकार 1GB निर्धारित करते हैं, तो आप समानांतरता खो सकते हैं, जिसके परिणामस्वरूप कुल मिलाकर धीमी गति हो सकती है।
2.) एचडीएफएस में स्प्लिट साइज : हडोप प्रोसेसिंग में स्प्लिट्स डेटा के लॉजिकल चंक्स हैं। जब फ़ाइलों को ब्लॉक में विभाजित किया जाता है, तो हडूप किसी भी फाइल बॉन्डंडरीज का सम्मान नहीं करता है। यह केवल ब्लॉक आकार के आधार पर डेटा को विभाजित करता है। यदि आपके पास 400 एमबी की फ़ाइल है, तो 4 पंक्तियों के साथ, और प्रत्येक पंक्ति में 100 एमबी डेटा होने पर कहें, तो आपको 128 MB x 3
3 ब्लॉक और 16 MB x 1
मिलेंगे। लेकिन जब डेटा विभाजन की गणना की जाती है, तो डेटा / फ़ाइल सीमाओं को ध्यान में रखा जाता है और इस मामले में, हमारे पास 100 एमबी के 4 इनपुट विभाजन होंगे, यदि आप उपयोग कर रहे हैं, तो कहें, NLineInputFormat
।
स्प्लिट साइज़ को प्रॉपर्टी mapreduce.input.fileinputformat.split.maxsize
का उपयोग करके प्रति काम सेट किया जा सकता है
ब्लाकों बनाम विभाजन की एक बहुत अच्छी व्याख्या इस SO उत्तर में मिल सकती है /