Hadoop - त्वरित गाइड
"पिछले कुछ वर्षों में दुनिया का 90% डेटा उत्पन्न हुआ था।"
नई प्रौद्योगिकियों, उपकरणों और संचार के आगमन के कारण सामाजिक नेटवर्किंग साइटों की तरह, मानव जाति द्वारा उत्पादित डेटा की मात्रा हर साल तेजी से बढ़ रही है। 2003 की शुरुआत तक हमारे द्वारा उत्पादित डेटा की मात्रा 5 बिलियन गीगाबाइट थी। यदि आप डिस्क के रूप में डेटा को ढेर करते हैं तो यह पूरे फुटबॉल क्षेत्र को भर सकता है। उसी राशि को प्रत्येक दो दिनों में बनाया गया था2011, और हर दस मिनट में 2013। यह दर अभी भी बहुत बढ़ रही है। हालांकि उत्पादित यह सभी जानकारी सार्थक है और संसाधित होने पर उपयोगी हो सकती है, इसे उपेक्षित किया जा रहा है।
बिग डेटा क्या है?
Big dataबड़े डेटासेट का एक संग्रह है जिसे पारंपरिक कंप्यूटिंग तकनीकों का उपयोग करके संसाधित नहीं किया जा सकता है। यह एक एकल तकनीक या एक उपकरण नहीं है, बल्कि यह एक पूर्ण विषय बन गया है, जिसमें विभिन्न उपकरण, तकनीक और रूपरेखा शामिल हैं।
बिग डेटा के तहत क्या आता है?
बिग डेटा में विभिन्न उपकरणों और अनुप्रयोगों द्वारा उत्पादित डेटा शामिल होता है। नीचे कुछ ऐसे क्षेत्र दिए गए हैं जो बिग डेटा की छतरी के नीचे आते हैं।
Black Box Data - यह हेलीकॉप्टर, हवाई जहाज और जेट विमानों आदि का एक घटक है। यह उड़ान चालक दल की आवाज, माइक्रोफोन और ईयरफोन की रिकॉर्डिंग और विमान के प्रदर्शन की जानकारी प्राप्त करता है।
Social Media Data - फेसबुक और ट्विटर जैसे सोशल मीडिया की जानकारी और दुनिया भर के लाखों लोगों द्वारा पोस्ट किए गए विचार हैं।
Stock Exchange Data - स्टॉक एक्सचेंज डेटा ग्राहकों द्वारा बनाई गई विभिन्न कंपनियों के शेयर पर किए गए 'खरीद' और 'बेचने' के फैसले के बारे में जानकारी रखता है।
Power Grid Data - पावर ग्रिड डेटा एक बेस स्टेशन के संबंध में एक विशेष नोड द्वारा खपत जानकारी रखता है।
Transport Data - परिवहन डेटा में एक वाहन का मॉडल, क्षमता, दूरी और उपलब्धता शामिल है।
Search Engine Data - खोज इंजन विभिन्न डेटाबेस से बहुत सारे डेटा को पुनः प्राप्त करते हैं।
इस प्रकार बिग डेटा में बड़ी मात्रा, उच्च वेग और डेटा की एक्स्टेंसिबल विविधता शामिल है। इसमें डेटा तीन प्रकार का होगा।
Structured data - संबंधपरक डेटा।
Semi Structured data - एक्सएमएल डेटा।
Unstructured data - वर्ड, पीडीएफ, टेक्स्ट, मीडिया लॉग।
बिग डेटा के लाभ
फेसबुक जैसे सोशल नेटवर्क में रखी गई सूचनाओं का उपयोग करते हुए, विपणन एजेंसियां अपने अभियानों, प्रचार और अन्य विज्ञापन माध्यमों की प्रतिक्रिया के बारे में सीख रही हैं।
अपने उपभोक्ताओं, उत्पाद कंपनियों और खुदरा संगठनों की वरीयताओं और उत्पाद धारणा जैसी सामाजिक मीडिया में जानकारी का उपयोग करके उनके उत्पादन की योजना बना रहे हैं।
रोगियों के पिछले चिकित्सा इतिहास के बारे में आंकड़ों का उपयोग करते हुए, अस्पताल बेहतर और त्वरित सेवा प्रदान कर रहे हैं।
बिग डेटा टेक्नोलॉजीज
बिग डेटा प्रौद्योगिकियां अधिक सटीक विश्लेषण प्रदान करने में महत्वपूर्ण हैं, जो अधिक ठोस निर्णय लेने का कारण बन सकती हैं जिसके परिणामस्वरूप अधिक परिचालन क्षमता, लागत में कमी और व्यवसाय के लिए जोखिम कम हो सकते हैं।
बड़े डेटा की शक्ति का दोहन करने के लिए, आपको एक बुनियादी ढांचे की आवश्यकता होगी जो वास्तविक समय में संरचित और असंरचित डेटा के विशाल संस्करणों को प्रबंधित और संसाधित कर सके और डेटा गोपनीयता और सुरक्षा की रक्षा कर सके।
बड़े डेटा को संभालने के लिए अमेज़ॅन, आईबीएम, माइक्रोसॉफ्ट आदि सहित विभिन्न विक्रेताओं से बाजार में विभिन्न प्रौद्योगिकियां हैं। बड़े डेटा को संभालने वाली तकनीकों पर गौर करते हुए, हम प्रौद्योगिकी के निम्नलिखित दो वर्गों की जाँच करते हैं -
ऑपरेशनल बिग डेटा
इसमें MongoDB जैसी प्रणालियां शामिल हैं जो वास्तविक समय, इंटरैक्टिव वर्कलोड के लिए परिचालन क्षमता प्रदान करती हैं जहां डेटा मुख्य रूप से कैप्चर किया जाता है और संग्रहीत किया जाता है।
NoSQL बिग डेटा सिस्टम नए क्लाउड कंप्यूटिंग आर्किटेक्चर का लाभ उठाने के लिए डिज़ाइन किए गए हैं जो पिछले एक दशक में बड़े पैमाने पर कम्प्यूटेशंस को सस्ते और कुशलता से चलाने की अनुमति देते हैं। यह परिचालन बड़े डेटा वर्कलोड को लागू करने, सस्ता, और तेजी से लागू करने के लिए बहुत आसान बनाता है।
कुछ NoSQL सिस्टम वास्तविक कोड डेटा के आधार पर पैटर्न और रुझानों में न्यूनतम कोडिंग और डेटा वैज्ञानिकों और अतिरिक्त बुनियादी ढांचे की आवश्यकता के बिना अंतर्दृष्टि प्रदान कर सकते हैं।
विश्लेषणात्मक बड़ा डेटा
इनमें बड़े पैमाने पर समानांतर प्रसंस्करण (एमपीपी) डेटाबेस सिस्टम और मैपरेड जैसे सिस्टम शामिल हैं जो पूर्वव्यापी और जटिल विश्लेषण के लिए विश्लेषणात्मक क्षमता प्रदान करते हैं जो डेटा के अधिकांश या सभी को छू सकते हैं।
MapReduce डेटा का विश्लेषण करने का एक नया तरीका प्रदान करता है जो SQL द्वारा प्रदान की गई क्षमताओं का पूरक है, और MapReduce के आधार पर एक प्रणाली जो एकल सर्वर से हजारों उच्च और निम्न अंत मशीनों तक बढ़ाया जा सकता है।
प्रौद्योगिकी के ये दो वर्ग पूरक हैं और अक्सर एक साथ तैनात होते हैं।
ऑपरेशनल बनाम एनालिटिकल सिस्टम
आपरेशनल | विश्लेषणात्मक | |
---|---|---|
विलंब | 1 एमएस - 100 एमएस | 1 मिनट - 100 मिनट |
संगामिति | 1000 - 100,000 | 1 - 10 |
एक्सेस पैटर्न | लिखता है और पढ़ता है | पुस्तकें |
प्रश्नों | चयनात्मक | unselective |
डेटा स्कोप | आपरेशनल | पूर्वप्रभावी |
अंतिम उपयोगकर्ता | ग्राहक | आँकड़े वाला वैज्ञानिक |
प्रौद्योगिकी | NoSQL | MapReduce, MPP डेटाबेस |
बिग डेटा चुनौतियां
बड़े डेटा से जुड़ी प्रमुख चुनौतियां इस प्रकार हैं -
- डेटा कैप्चर करना
- Curation
- Storage
- Searching
- Sharing
- Transfer
- Analysis
- Presentation
उपरोक्त चुनौतियों को पूरा करने के लिए, संगठन आमतौर पर एंटरप्राइज़ सर्वर की मदद लेते हैं।
परंपरागत दृष्टिकोण
इस दृष्टिकोण में, एक उद्यम के पास बड़े डेटा को संग्रहीत और संसाधित करने के लिए एक कंप्यूटर होगा। भंडारण उद्देश्य के लिए, प्रोग्रामर डेटाबेस विक्रेताओं की अपनी पसंद जैसे ओरेकल, आईबीएम इत्यादि की मदद लेंगे। इस दृष्टिकोण में, उपयोगकर्ता एप्लिकेशन के साथ इंटरैक्ट करता है, जो बदले में डेटा स्टोरेज और विश्लेषण के हिस्से को संभालता है।
परिसीमन
यह दृष्टिकोण उन अनुप्रयोगों के साथ ठीक काम करता है जो कम स्वैच्छिक डेटा को संसाधित करते हैं जिन्हें मानक डेटाबेस सर्वर द्वारा समायोजित किया जा सकता है, या डेटा को संसाधित करने वाले प्रोसेसर की सीमा तक। लेकिन जब भारी मात्रा में स्केलेबल डेटा से निपटने की बात आती है, तो एक एकल डेटाबेस अड़चन के माध्यम से ऐसे डेटा को संसाधित करना एक व्यस्त कार्य है।
Google का समाधान
Google ने MapReduce नामक एल्गोरिथम का उपयोग करके इस समस्या को हल किया। यह एल्गोरिदम कार्य को छोटे भागों में विभाजित करता है और उन्हें कई कंप्यूटरों को सौंपता है, और उनसे परिणाम एकत्र करता है जो एकीकृत होने पर परिणाम डेटासेट बनाते हैं।
Hadoop
Google द्वारा प्रदान किए गए समाधान का उपयोग करना, Doug Cutting और उनकी टीम ने एक Open Source Project नाम विकसित किया HADOOP।
Hadoop MapReduce एल्गोरिदम का उपयोग करके एप्लिकेशन चलाता है, जहां डेटा को दूसरों के साथ समानांतर में संसाधित किया जाता है। संक्षेप में, Hadoop का उपयोग उन अनुप्रयोगों को विकसित करने के लिए किया जाता है जो बड़ी मात्रा में डेटा पर पूर्ण सांख्यिकीय विश्लेषण कर सकते हैं।
Hadoop जावा में लिखा गया एक अपाचे ओपन सोर्स फ्रेमवर्क है जो सरल प्रोग्रामिंग मॉडल का उपयोग करके कंप्यूटर के समूहों में बड़े डेटासेट के प्रसंस्करण की अनुमति देता है। Hadoop फ्रेमवर्क एप्लिकेशन एक ऐसे वातावरण में काम करता है जो कंप्यूटरों के समूहों में वितरित भंडारण और संगणना प्रदान करता है। Hadoop को सिंगल सर्वर से लेकर हज़ारों मशीनों तक, प्रत्येक को स्थानीय अभिकलन और भंडारण प्रदान करने के लिए डिज़ाइन किया गया है।
Hadoop Architecture
इसके मूल में, Hadoop की दो प्रमुख परतें हैं -
- प्रसंस्करण / संगणना परत (MapReduce), और
- भंडारण परत (Hadoop वितरित फ़ाइल सिस्टम)।
मानचित्र छोटा करना
MapReduce, एक विश्वसनीय, दोष-सहिष्णु तरीके से कमोडिटी हार्डवेयर के बड़े समूहों (हजारों नोड्स) पर बड़ी मात्रा में डेटा (मल्टी-टेराबाइट डेटा-सेट) के कुशल प्रसंस्करण के लिए Google में वितरित वितरित लेखन के लिए एक समानांतर प्रोग्रामिंग मॉडल है। MapReduce प्रोग्राम Hadoop पर चलता है जो एक Apache ओपन-सोर्स फ्रेमवर्क है।
Hadoop वितरित फ़ाइल सिस्टम
Hadoop डिस्ट्रीब्यूटेड फाइल सिस्टम (HDFS) Google फाइल सिस्टम (GFS) पर आधारित है और एक वितरित फाइल सिस्टम प्रदान करता है जिसे कमोडिटी हार्डवेयर पर चलने के लिए डिज़ाइन किया गया है। इसमें मौजूदा वितरित फ़ाइल सिस्टम के साथ कई समानताएं हैं। हालाँकि, अन्य वितरित फ़ाइल सिस्टम से अंतर महत्वपूर्ण हैं। यह अत्यधिक दोष-सहिष्णु है और इसे कम लागत वाले हार्डवेयर पर तैनात करने के लिए डिज़ाइन किया गया है। यह एप्लिकेशन डेटा को उच्च थ्रूपुट एक्सेस प्रदान करता है और बड़े डेटासेट वाले अनुप्रयोगों के लिए उपयुक्त है।
उपर्युक्त दो मुख्य घटकों के अलावा, Hadoop ढांचे में निम्नलिखित दो मॉड्यूल भी शामिल हैं -
Hadoop Common - ये जावा लाइब्रेरी और अन्य Hadoop मॉड्यूल द्वारा आवश्यक उपयोगिताओं हैं।
Hadoop YARN - यह नौकरी निर्धारण और क्लस्टर संसाधन प्रबंधन के लिए एक रूपरेखा है।
कैसे काम करता है Hadoop?
भारी कॉन्फ़िगरेशन वाले बड़े सर्वर बनाने के लिए यह काफी महंगा है जो बड़े पैमाने पर प्रसंस्करण को संभालते हैं, लेकिन एक विकल्प के रूप में, आप सिंगल-सीपीयू के साथ कई कमोडिटी कंप्यूटरों को एक साथ जोड़ सकते हैं, एक एकल कार्यात्मक वितरण प्रणाली के रूप में और व्यावहारिक रूप से, क्लस्टर किए गए मशीन डेटासेट पढ़ सकते हैं समानांतर में और एक उच्चतर थ्रूपुट प्रदान करते हैं। इसके अलावा, यह एक हाई-एंड सर्वर से सस्ता है। तो Hadoop का उपयोग करने के पीछे यह पहला प्रेरक कारक है कि यह क्लस्टर और कम लागत वाली मशीनों में चलता है।
Hadoop कंप्यूटर के एक समूह में कोड चलाता है। इस प्रक्रिया में निम्नलिखित मुख्य कार्य शामिल हैं जो Hadoop करता है -
डेटा शुरू में निर्देशिका और फ़ाइलों में विभाजित है। फ़ाइलें 128M और 64M (अधिमानतः 128M) के समान आकार के ब्लॉक में विभाजित हैं।
इन फ़ाइलों को फिर आगे की प्रक्रिया के लिए विभिन्न क्लस्टर नोड्स में वितरित किया जाता है।
HDFS, स्थानीय फाइल सिस्टम के शीर्ष पर होने के कारण, प्रसंस्करण की देखरेख करता है।
हार्डवेयर विफलता से निपटने के लिए ब्लॉक को दोहराया जाता है।
यह देखते हुए कि कोड सफलतापूर्वक निष्पादित किया गया था।
उस तरह का प्रदर्शन करना जो नक्शे के बीच होता है और चरणों को कम करता है।
एक निश्चित कंप्यूटर पर सॉर्ट किए गए डेटा को भेजना।
डिबगिंग लिखना प्रत्येक कार्य के लिए लॉग करता है।
Hadoop के फायदे
Hadoop फ्रेमवर्क उपयोगकर्ता को वितरित सिस्टम को जल्दी से लिखने और परीक्षण करने की अनुमति देता है। यह कुशल है, और यह स्वचालित रूप से डेटा वितरित करता है और मशीनों पर काम करता है और बदले में, सीपीयू कोर के अंतर्निहित समानता का उपयोग करता है।
Hadoop दोष-सहिष्णुता और उच्च उपलब्धता (FTHA) प्रदान करने के लिए हार्डवेयर पर निर्भर नहीं करता है, बल्कि Hadoop लाइब्रेरी को ही एप्लिकेशन लेयर में विफलताओं का पता लगाने और संभालने के लिए डिज़ाइन किया गया है।
सर्वर को क्लस्टर से गतिशील रूप से जोड़ा या हटाया जा सकता है और Hadoop बिना किसी रुकावट के काम करता रहता है।
Hadoop का एक और बड़ा फायदा यह है कि ओपन सोर्स होने के अलावा, यह जावा बेस्ड होने के बाद से सभी प्लेटफॉर्म पर संगत है।
Hadoop GNU / Linux प्लेटफ़ॉर्म और इसके फ्लेवर्स द्वारा समर्थित है। इसलिए, हमें Hadoop वातावरण की स्थापना के लिए एक Linux ऑपरेटिंग सिस्टम स्थापित करना होगा। यदि आपके पास लिनक्स के अलावा एक ओएस है, तो आप इसमें एक वर्चुअलबॉक्स सॉफ़्टवेयर स्थापित कर सकते हैं और वर्चुअलबॉक्स के अंदर लिनक्स रख सकते हैं।
पूर्व-स्थापना सेटअप
Hadoop को Linux वातावरण में स्थापित करने से पहले, हमें लिनक्स का उपयोग करना होगा ssh(सुरक्षित कवच)। लिनक्स पर्यावरण की स्थापना के लिए नीचे दिए गए चरणों का पालन करें।
एक उपयोगकर्ता बनाना
शुरुआत में, Hadoop फाइल सिस्टम को Unix फ़ाइल सिस्टम से अलग करने के लिए Hadoop के लिए एक अलग उपयोगकर्ता बनाने की सिफारिश की गई है। उपयोगकर्ता बनाने के लिए नीचे दिए गए चरणों का पालन करें -
कमांड "su" का उपयोग करके रूट खोलें।
"Useradd उपयोगकर्ता नाम" कमांड का उपयोग करके रूट खाते से एक उपयोगकर्ता बनाएं।
अब आप "su उपयोगकर्ता नाम" कमांड का उपयोग करके एक मौजूदा उपयोगकर्ता खाता खोल सकते हैं।
लिनक्स टर्मिनल खोलें और उपयोगकर्ता बनाने के लिए निम्न कमांड टाइप करें।
$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd
SSH सेटअप और मुख्य पीढ़ी
SSH सेटअप को एक क्लस्टर पर अलग-अलग संचालन करने के लिए आवश्यक है जैसे शुरू करना, रोकना, वितरित डेमन शेल संचालन। Hadoop के विभिन्न उपयोगकर्ताओं को प्रमाणित करने के लिए, Hadoop उपयोगकर्ता के लिए सार्वजनिक / निजी कुंजी जोड़ी प्रदान करना और इसे विभिन्न उपयोगकर्ताओं के साथ साझा करना आवश्यक है।
एसएसएच का उपयोग करके एक महत्वपूर्ण मूल्य युग्म उत्पन्न करने के लिए निम्न कमांड का उपयोग किया जाता है। सार्वजनिक कुंजियों की प्रतिलिपि id_rsa.pub को अधिकृत_keys पर लिखें, और मालिक को क्रमशः अधिकृत_की फ़ाइल में पढ़ने और लिखने की अनुमति प्रदान करें।
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
जावा को स्थापित करना
Hadoop के लिए Java मुख्य शर्त है। सबसे पहले, आपको "java -version" कमांड का उपयोग करके अपने सिस्टम में जावा के अस्तित्व को सत्यापित करना चाहिए। जावा संस्करण कमांड का सिंटैक्स नीचे दिया गया है।
$ java -version
यदि सब कुछ क्रम में है, तो यह आपको निम्नलिखित आउटपुट देगा।
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
यदि आपके सिस्टम में जावा स्थापित नहीं है, तो जावा स्थापित करने के लिए नीचे दिए गए चरणों का पालन करें।
चरण 1
निम्नलिखित लिंक www.oracle.com पर जाकर java (JDK <नवीनतम संस्करण> - X64.tar.gz) डाउनलोड करें
फिर jdk-7u71-linux-x64.tar.gz आपके सिस्टम में डाउनलोड हो जाएगा।
चरण 2
आम तौर पर आपको डाउनलोड फ़ोल्डर में डाउनलोड की गई जावा फ़ाइल मिलेगी। इसे सत्यापित करें और निकालेंjdk-7u71-linux-x64.gz निम्न आदेशों का उपयोग करके फ़ाइल।
$ cd Downloads/
$ ls jdk-7u71-linux-x64.gz $ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz
चरण 3
जावा को सभी उपयोगकर्ताओं के लिए उपलब्ध कराने के लिए, आपको इसे "/ usr / स्थानीय /" स्थान पर ले जाना होगा। रूट खोलें, और निम्न कमांड टाइप करें।
$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit
चरण 4
स्थापित करने के लिए PATH तथा JAVA_HOME चर, निम्नलिखित कमांड को इसमें जोड़ें ~/.bashrc फ़ाइल।
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
अब वर्तमान में चल रहे सिस्टम में सभी परिवर्तनों को लागू करें।
$ source ~/.bashrc
चरण 5
जावा विकल्प को कॉन्फ़िगर करने के लिए निम्नलिखित कमांड का उपयोग करें -
# alternatives --install /usr/bin/java java usr/local/java/bin/java 2
# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2
# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar
अब ऊपर बताए अनुसार टर्मिनल से जावा-वर्जन कमांड को सत्यापित करें।
Hadoop डाउनलोड करना
निम्नलिखित कमांड का उपयोग करके अपाचे सॉफ्टवेयर फाउंडेशन से Hadoop 2.4.1 को डाउनलोड करें और निकालें।
$ su
password:
# cd /usr/local
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/
hadoop-2.4.1.tar.gz
# tar xzf hadoop-2.4.1.tar.gz
# mv hadoop-2.4.1/* to hadoop/
# exit
Hadoop ऑपरेशन मोड
एक बार जब आप Hadoop को डाउनलोड कर लेते हैं, तो आप अपने Hadoop क्लस्टर को तीन समर्थित मोड्स में से एक में संचालित कर सकते हैं -
Local/Standalone Mode - अपने सिस्टम में Hadoop डाउनलोड करने के बाद, डिफ़ॉल्ट रूप से, इसे स्टैंडअलोन मोड में कॉन्फ़िगर किया गया है और इसे एक सिंगल जावा प्रोसेस के रूप में चलाया जा सकता है।
Pseudo Distributed Mode- यह एक मशीन पर वितरित सिमुलेशन है। प्रत्येक Hadoop डेमन जैसे HDfs, यार्न, MapReduce आदि, एक अलग जावा प्रक्रिया के रूप में चलेंगे। यह विधा विकास के लिए उपयोगी है।
Fully Distributed Mode- यह मोड क्लस्टर के रूप में न्यूनतम दो या अधिक मशीनों के साथ पूरी तरह से वितरित किया जाता है। हम आने वाले अध्यायों में इस विधा पर विस्तार से बात करेंगे।
स्टैंडअलोन मोड में Hadoop स्थापित करना
यहां हम इंस्टॉलेशन की चर्चा करेंगे Hadoop 2.4.1 स्टैंडअलोन मोड में।
कोई डेमॉन नहीं चल रहा है और सब कुछ एक ही जेवीएम में चलता है। स्टैंडअलोन मोड विकास के दौरान मैपरेड कार्यक्रम चलाने के लिए उपयुक्त है, क्योंकि यह उन्हें परीक्षण और डिबग करना आसान है।
Hadoop की स्थापना
आप निम्न आदेशों को जोड़कर Hadoop वातावरण चर सेट कर सकते हैं ~/.bashrc फ़ाइल।
export HADOOP_HOME=/usr/local/hadoop
आगे बढ़ने से पहले, आपको यह सुनिश्चित करने की आवश्यकता है कि Hadoop ठीक काम कर रहा है। बस निम्नलिखित आदेश जारी करें -
$ hadoop version
यदि आपके सेटअप में सब कुछ ठीक है, तो आपको निम्नलिखित परिणाम देखना चाहिए -
Hadoop 2.4.1
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768
Compiled by hortonmu on 2013-10-07T06:28Z
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4
इसका मतलब है कि आपका Hadoop का स्टैंडअलोन मोड सेटअप ठीक काम कर रहा है। डिफ़ॉल्ट रूप से, Hadoop को एक मशीन पर गैर-वितरित मोड में चलाने के लिए कॉन्फ़िगर किया गया है।
उदाहरण
आइए Hadoop का एक सरल उदाहरण देखें। Hadoop इंस्टॉलेशन निम्न उदाहरण देता है MapReduce jar फ़ाइल, जो MapReduce की बुनियादी कार्यक्षमता प्रदान करता है और इसका उपयोग गणना के लिए किया जा सकता है, जैसे कि पीआई मान, फ़ाइलों की दी गई सूची में शब्द मायने रखता है, आदि।
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar
चलो एक इनपुट निर्देशिका है जहां हम कुछ फ़ाइलों को धक्का देंगे और हमारी आवश्यकता उन फ़ाइलों में शब्दों की कुल संख्या की गणना करना है। कुल शब्दों की गणना करने के लिए, हमें अपना MapReduce लिखने की आवश्यकता नहीं है, बशर्ते .jar फ़ाइल में शब्द गणना के लिए कार्यान्वयन हो। आप एक ही .jar फ़ाइल का उपयोग कर अन्य उदाहरणों की कोशिश कर सकते हैं; बस समर्थित आदेश जारी करें मेपॉइड-कार्य-उदाहरण-2.2.0.jar फ़ाइल द्वारा समर्थित MapReduce कार्यात्मक कार्यक्रमों की जांच करें।
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar
चरण 1
इनपुट निर्देशिका में अस्थायी सामग्री फ़ाइलें बनाएँ। आप यह इनपुट डायरेक्टरी बना सकते हैं कहीं भी आप काम करना चाहेंगे।
$ mkdir input $ cp $HADOOP_HOME/*.txt input $ ls -l input
यह आपकी इनपुट डायरेक्टरी में निम्नलिखित फाइलें देगा -
total 24
-rw-r--r-- 1 root root 15164 Feb 21 10:14 LICENSE.txt
-rw-r--r-- 1 root root 101 Feb 21 10:14 NOTICE.txt
-rw-r--r-- 1 root root 1366 Feb 21 10:14 README.txt
इन फ़ाइलों को Hadoop स्थापना होम निर्देशिका से कॉपी किया गया है। आपके प्रयोग के लिए, आपके पास फ़ाइलों के विभिन्न और बड़े सेट हो सकते हैं।
चरण 2
चलिए इनपुट निर्देशिका में उपलब्ध सभी फाइलों में शब्दों की कुल संख्या की गणना करने के लिए Hadoop प्रक्रिया शुरू करते हैं, जो इस प्रकार है -
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar wordcount input output
चरण 3
चरण -2 आवश्यक प्रसंस्करण करेगा और आउटपुट को आउटपुट / पार्ट-आरपीआर फ़ाइल में बचाएगा, जिसे आप उपयोग करके देख सकते हैं -
$cat output/*
यह इनपुट निर्देशिका में उपलब्ध सभी फाइलों में उपलब्ध कुल गणना के साथ सभी शब्दों को सूचीबद्ध करेगा।
"AS 4
"Contribution" 1
"Contributor" 1
"Derivative 1
"Legal 1
"License" 1
"License"); 1
"Licensor" 1
"NOTICE” 1
"Not 1
"Object" 1
"Source” 1
"Work” 1
"You" 1
"Your") 1
"[]" 1
"control" 1
"printed 1
"submitted" 1
(50%) 1
(BIS), 1
(C) 1
(Don't) 1
(ECCN) 1
(INCLUDING 2
(INCLUDING, 2
.............
छद्म वितरित मोड में Hadoop स्थापित करना
छद्म वितरित मोड में Hadoop 2.4.1 को स्थापित करने के लिए नीचे दिए गए चरणों का पालन करें।
चरण 1 - Hadoop की स्थापना
आप निम्न आदेशों को जोड़कर Hadoop वातावरण चर सेट कर सकते हैं ~/.bashrc फ़ाइल।
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin export HADOOP_INSTALL=$HADOOP_HOME
अब वर्तमान में चल रहे सिस्टम में सभी परिवर्तनों को लागू करें।
$ source ~/.bashrc
चरण 2 - Hadoop कॉन्फ़िगरेशन
आप "HADOOP_HOME / etc / hadoop" स्थान में सभी Hadoop कॉन्फ़िगरेशन फ़ाइलों को पा सकते हैं। यह आपके Hadoop इन्फ्रास्ट्रक्चर के अनुसार उन कॉन्फ़िगरेशन फ़ाइलों में परिवर्तन करने के लिए आवश्यक है।
$ cd $HADOOP_HOME/etc/hadoop
जावा में Hadoop कार्यक्रमों को विकसित करने के लिए, आपको जावा पर्यावरण चर को रीसेट करना होगा hadoop-env.sh फ़ाइल को प्रतिस्थापित करके JAVA_HOME आपके सिस्टम में जावा के स्थान के साथ मूल्य।
export JAVA_HOME=/usr/local/jdk1.7.0_71
निम्न फ़ाइलों की सूची है जिन्हें आपको Hadoop को कॉन्फ़िगर करने के लिए संपादित करना है।
core-site.xml
core-site.xml फ़ाइल में Hadoop उदाहरण के लिए उपयोग की जाने वाली पोर्ट संख्या, फ़ाइल सिस्टम के लिए आवंटित मेमोरी, डेटा को संग्रहीत करने के लिए मेमोरी की सीमा और रीड / राइट बफ़र्स के आकार जैसी जानकारी शामिल है।
कोर- site.xml खोलें और <कॉन्फ़िगरेशन>, </ कॉन्फ़िगरेशन> टैग के बीच निम्न गुण जोड़ें।
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
hdfs-site.xmlफ़ाइल में प्रतिकृति डेटा का मान, नामेनोड पथ और अपने स्थानीय फ़ाइल सिस्टम के डेटाैनोड पथ जैसी जानकारी होती है। इसका अर्थ है वह स्थान जहाँ आप Hadoop अवसंरचना को संग्रहीत करना चाहते हैं।
आइए हम निम्नलिखित आंकड़ों को मानते हैं।
dfs.replication (data replication value) = 1
(In the below given path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode
इस फ़ाइल को खोलें और इस फ़ाइल में <कॉन्फ़िगरेशन> </ कॉन्फ़िगरेशन> टैग के बीच निम्न गुण जोड़ें।
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value>
</property>
</configuration>
Note - उपरोक्त फ़ाइल में, सभी संपत्ति मूल्य उपयोगकर्ता-परिभाषित हैं और आप अपने Hadoop बुनियादी ढांचे के अनुसार परिवर्तन कर सकते हैं।
yarn-site.xml
इस फ़ाइल का उपयोग यार्न को Hadoop में कॉन्फ़िगर करने के लिए किया जाता है। यार्न-site.xml फ़ाइल खोलें और इस फ़ाइल में <कॉन्फ़िगरेशन>, </ कॉन्फ़िगरेशन> टैग के बीच निम्न गुण जोड़ें।
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml
यह फ़ाइल निर्दिष्ट करने के लिए उपयोग की जाती है कि हम किस MapReduce ढांचे का उपयोग कर रहे हैं। डिफ़ॉल्ट रूप से, Hadoop में यार्न-site.xml का टेम्प्लेट होता है। सबसे पहले, फ़ाइल से कॉपी करना आवश्यक हैmapred-site.xml.template सेवा mapred-site.xml निम्न कमांड का उपयोग करके फ़ाइल।
$ cp mapred-site.xml.template mapred-site.xml
खुला हुआ mapred-site.xml इस फ़ाइल में <कॉन्फ़िगरेशन>, </ कॉन्फ़िगरेशन> टैग के बीच निम्न गुणों को फ़ाइल करें और जोड़ें।
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Hadoop स्थापना का सत्यापन
Hadoop स्थापना को सत्यापित करने के लिए निम्न चरणों का उपयोग किया जाता है।
चरण 1 - नाम नोड सेटअप
निम्नानुसार "hdfs namenode -format" कमांड का उपयोग करके नामेनोड सेट करें।
$ cd ~
$ hdfs namenode -format
अपेक्षित परिणाम इस प्रकार है।
10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to
retain 1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/
चरण 2 - सत्यापन Hadoop dfs
Dfs शुरू करने के लिए निम्न कमांड का उपयोग किया जाता है। इस आदेश को निष्पादित करने से आपका Hadoop फ़ाइल सिस्टम प्रारंभ हो जाएगा।
$ start-dfs.sh
अपेक्षित उत्पादन निम्नानुसार है -
10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]
चरण 3 - यार्न स्क्रिप्ट का सत्यापन
यार्न स्क्रिप्ट शुरू करने के लिए निम्न कमांड का उपयोग किया जाता है। इस आदेश को निष्पादित करने से आपके यार्न डेमन शुरू हो जाएंगे।
$ start-yarn.sh
निम्नानुसार अपेक्षित उत्पादन -
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out
localhost: starting nodemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out
चरण 4 - ब्राउज़र पर Hadoop तक पहुँचना
Hadoop तक पहुँचने के लिए डिफ़ॉल्ट पोर्ट संख्या 50070 है। ब्राउज़र पर Hadoop सेवाएँ प्राप्त करने के लिए निम्न url का उपयोग करें।
http://localhost:50070/
चरण 5 - क्लस्टर के लिए सभी एप्लिकेशन सत्यापित करें
क्लस्टर के सभी अनुप्रयोगों तक पहुँचने के लिए डिफ़ॉल्ट पोर्ट संख्या 8088 है। इस सेवा पर जाने के लिए निम्न यूआरएल का उपयोग करें।
http://localhost:8088/
Hadoop फ़ाइल सिस्टम वितरित फ़ाइल सिस्टम डिज़ाइन का उपयोग करके विकसित किया गया था। इसे कमोडिटी हार्डवेयर पर चलाया जाता है। अन्य वितरित प्रणालियों के विपरीत, एचडीएफएस अत्यधिक दोषपूर्ण है और कम लागत वाले हार्डवेयर का उपयोग करके बनाया गया है।
HDFS बहुत बड़ी मात्रा में डेटा रखता है और आसान पहुँच प्रदान करता है। ऐसे विशाल डेटा को संग्रहीत करने के लिए, फ़ाइलें कई मशीनों में संग्रहीत की जाती हैं। विफलता के मामले में संभावित डेटा हानि से सिस्टम को बचाने के लिए इन फ़ाइलों को अनावश्यक रूप से संग्रहीत किया जाता है। HDFS भी समानांतर प्रसंस्करण के लिए आवेदन उपलब्ध कराता है।
एचडीएफएस की विशेषताएं
- यह वितरित भंडारण और प्रसंस्करण के लिए उपयुक्त है।
- Hadoop HDFS के साथ बातचीत करने के लिए एक कमांड इंटरफ़ेस प्रदान करता है।
- नामेनोड और डेटाैनोड के अंतर्निहित सर्वर उपयोगकर्ताओं को आसानी से क्लस्टर की स्थिति की जांच करने में मदद करते हैं।
- सिस्टम डेटा फाइल करने के लिए स्ट्रीमिंग का उपयोग।
- HDFS फ़ाइल अनुमति और प्रमाणीकरण प्रदान करता है।
HDFS आर्किटेक्चर
नीचे एक Hadoop फ़ाइल सिस्टम की वास्तुकला दी गई है।
एचडीएफएस मास्टर-दास वास्तुकला का अनुसरण करता है और इसमें निम्नलिखित तत्व होते हैं।
Namenode
नामेनोड कमोडिटी हार्डवेयर है जिसमें GNU / Linux ऑपरेटिंग सिस्टम और namenode सॉफ्टवेयर शामिल हैं। यह एक सॉफ्टवेयर है जिसे कमोडिटी हार्डवेयर पर चलाया जा सकता है। नामेनोड होने वाली प्रणाली मास्टर सर्वर के रूप में कार्य करती है और यह निम्नलिखित कार्य करती है -
फ़ाइल सिस्टम नामस्थान का प्रबंधन करता है।
फ़ाइलों तक क्लाइंट की पहुंच को नियंत्रित करता है।
यह फ़ाइल सिस्टम के संचालन को भी निष्पादित करता है जैसे नाम बदलना, बंद करना, और फ़ाइलों और निर्देशिकाओं को खोलना।
Datanode
डेटनोड एक कमोडिटी हार्डवेयर है जिसमें GNU / Linux ऑपरेटिंग सिस्टम और डेटाैनोड सॉफ्टवेयर होता है। एक क्लस्टर में प्रत्येक नोड (कमोडिटी हार्डवेयर / सिस्टम) के लिए, एक डेटानोड होगा। ये नोड्स अपने सिस्टम के डेटा स्टोरेज को मैनेज करते हैं।
डेटा अनुरोध क्लाइंट सिस्टम के अनुसार फ़ाइल सिस्टम पर रीड-राइट ऑपरेशन करते हैं।
वे नेमेनोड के निर्देशों के अनुसार ब्लॉक निर्माण, विलोपन और प्रतिकृति जैसे ऑपरेशन भी करते हैं।
खंड मैथा
आम तौर पर उपयोगकर्ता डेटा एचडीएफएस की फाइलों में संग्रहीत किया जाता है। फ़ाइल सिस्टम में फ़ाइल को एक या अधिक सेगमेंट में विभाजित किया जाएगा और / या व्यक्तिगत डेटा नोड्स में संग्रहीत किया जाएगा। इन फ़ाइल खंडों को ब्लॉक कहा जाता है। दूसरे शब्दों में, HDFS को पढ़ने या लिखने वाले डेटा की न्यूनतम मात्रा को ब्लॉक कहा जाता है। डिफ़ॉल्ट ब्लॉक का आकार 64 एमबी है, लेकिन इसे एचडीएफएस कॉन्फ़िगरेशन में बदलने की आवश्यकता के अनुसार बढ़ाया जा सकता है।
एचडीएफएस के लक्ष्य
Fault detection and recovery- चूंकि एचडीएफएस में बड़ी संख्या में कमोडिटी हार्डवेयर शामिल हैं, घटकों की विफलता अक्सर होती है। इसलिए HDFS में त्वरित और स्वचालित दोष का पता लगाने और पुनर्प्राप्ति के लिए तंत्र होना चाहिए।
Huge datasets - एचडीएफएस में विशाल डेटासेट वाले अनुप्रयोगों का प्रबंधन करने के लिए प्रति क्लस्टर सैकड़ों नोड्स होने चाहिए।
Hardware at data- एक अनुरोधित कार्य कुशलता से किया जा सकता है, जब डेटा के पास गणना होती है। विशेष रूप से जहां विशाल डेटासेट शामिल हैं, यह नेटवर्क ट्रैफ़िक को कम करता है और थ्रूपुट को बढ़ाता है।
HDFS शुरू
प्रारंभ में आपको कॉन्फ़िगर किए गए एचडीएफएस फ़ाइल सिस्टम को प्रारूपित करना है, नामेनोड (एचडीएफएस सर्वर) खोलें, और निम्नलिखित कमांड को निष्पादित करें।
$ hadoop namenode -format
एचडीएफएस प्रारूपित करने के बाद, वितरित फ़ाइल सिस्टम शुरू करें। निम्नलिखित कमांड नमनोडे के साथ-साथ डेटा नोड्स को क्लस्टर के रूप में शुरू करेगा।
$ start-dfs.sh
HDFS में लिस्टिंग फ़ाइलें
सर्वर में जानकारी लोड करने के बाद, हम एक डायरेक्टरी में फाइलों की सूची, एक फाइल की स्थिति, का उपयोग करके पा सकते हैं ‘ls’। नीचे दिए गए का सिंटैक्स हैls आप एक तर्क के रूप में एक निर्देशिका या फ़ाइल नाम के लिए पास कर सकते हैं।
$ $HADOOP_HOME/bin/hadoop fs -ls <args>
HDFS में डेटा सम्मिलित करना
मान लें कि हमारे पास फ़ाइल में फ़ाइल है। स्थानीय सिस्टम में file.txt जिसे एचडीएफएस फ़ाइल सिस्टम में सहेजा जाना चाहिए। Hadoop फ़ाइल सिस्टम में आवश्यक फ़ाइल सम्मिलित करने के लिए नीचे दिए गए चरणों का पालन करें।
चरण 1
आपको एक इनपुट डायरेक्टरी बनानी होगी।
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/input
चरण 2
पुट कमांड का उपयोग करके स्थानीय सिस्टम से Hadoop फाइल सिस्टम में डेटा फ़ाइल को ट्रांसफर और स्टोर करें।
$ $HADOOP_HOME/bin/hadoop fs -put /home/file.txt /user/input
चरण 3
आप ls कमांड का उपयोग करके फ़ाइल को सत्यापित कर सकते हैं।
$ $HADOOP_HOME/bin/hadoop fs -ls /user/input
HDFS से डेटा पुनर्प्राप्त करना
मान लें कि हमारे पास एचडीएफएस नामक एक फाइल है outfile। नीचे दिए गए Hadoop फ़ाइल सिस्टम से आवश्यक फ़ाइल प्राप्त करने के लिए एक सरल प्रदर्शन है।
चरण 1
प्रारंभ में, एचडीएफएस से डेटा का उपयोग करके देखें cat आदेश।
$ $HADOOP_HOME/bin/hadoop fs -cat /user/output/outfile
चरण 2
एचडीएफएस से स्थानीय फ़ाइल सिस्टम का उपयोग करके फ़ाइल प्राप्त करें get आदेश।
$ $HADOOP_HOME/bin/hadoop fs -get /user/output/ /home/hadoop_tp/
शट डाउन एचडीएफएस
आप निम्न कमांड का उपयोग करके एचडीएफएस को बंद कर सकते हैं।
$ stop-dfs.sh
में कई और कमांड हैं "$HADOOP_HOME/bin/hadoop fs"की तुलना में यहां प्रदर्शन किए गए हैं, हालांकि ये मूल संचालन आपको आरंभ करेंगे। चल रहा है। /bin/hadoop dfs बिना किसी अतिरिक्त तर्क के उन सभी कमांडों को सूचीबद्ध करेगा जिन्हें FsShell सिस्टम के साथ चलाया जा सकता है। इसके अलावा,$HADOOP_HOME/bin/hadoop fs -help यदि आप अटके हुए हैं तो कमांडनेम प्रश्न में ऑपरेशन के लिए एक छोटा उपयोग सारांश प्रदर्शित करेगा।
सभी ऑपरेशनों की एक तालिका नीचे दी गई है। निम्नलिखित सम्मेलनों का उपयोग मापदंडों के लिए किया जाता है -
"<path>" means any file or directory name.
"<path>..." means one or more file or directory names.
"<file>" means any filename.
"<src>" and "<dest>" are path names in a directed operation.
"<localSrc>" and "<localDest>" are paths as above, but on the local file system.
अन्य सभी फाइलें और पथ नाम HDFS के अंदर की वस्तुओं को संदर्भित करते हैं।
अनु क्रमांक | कमांड और विवरण |
---|---|
1 | -ls <path> पथ द्वारा निर्दिष्ट निर्देशिका की सामग्री को सूचीबद्ध करता है, प्रत्येक प्रविष्टि के लिए नाम, अनुमति, स्वामी, आकार और संशोधन की तारीख दिखाता है। |
2 | -lsr <path> पथ की तरह व्यवहार करता है, लेकिन पुनरावृत्ति पथ के सभी उपनिर्देशिकाओं में प्रविष्टियों को प्रदर्शित करता है। |
3 | -du <path> बाइट्स में डिस्क का उपयोग दिखाता है, सभी फाइलों के लिए जो मार्ग से मेल खाते हैं; फ़ाइलनाम पूर्ण HDFS प्रोटोकॉल उपसर्ग के साथ सूचित किए जाते हैं। |
4 | -dus <path> जैसे -du, लेकिन पथ में सभी फ़ाइलों / निर्देशिकाओं के डिस्क उपयोग का सारांश प्रिंट करता है। |
5 | -mv <src><dest> HDFS के भीतर फ़ाइल या निर्देशिका को src द्वारा इंगित करने के लिए ले जाता है। |
6 | -cp <src> <dest> HDFS के भीतर फ़ाइल या निर्देशिका की पहचान src द्वारा नियत की जाती है। |
7 | -rm <path> पथ द्वारा पहचानी गई फ़ाइल या खाली निर्देशिका को निकालता है। |
8 | -rmr <path> पथ द्वारा पहचानी गई फ़ाइल या निर्देशिका को निकालता है। किसी भी बच्चे की प्रविष्टियों को पुन: हटा देता है (यानी, पथ के फ़ाइल या उपनिर्देशिका)। |
9 | -put <localSrc> <dest> फ़ाइल या निर्देशिका को स्थानीय फ़ाइल सिस्टम से पहचाना जाता है जो लोकल आर्क द्वारा पहचानी जाती है। |
10 | -copyFromLocal <localSrc> <dest> पहचान करने योग्य |
1 1 | -moveFromLocal <localSrc> <dest> HDS के भीतर आने के लिए localSrc द्वारा पहचानी गई स्थानीय फ़ाइल प्रणाली से फ़ाइल या निर्देशिका की प्रतिलिपि बनाता है, और फिर सफलता पर स्थानीय प्रतिलिपि हटाता है। |
12 | -get [-crc] <src> <localDest> एचडीएसएफ द्वारा पहचानी गई फ़ाइल या निर्देशिका की प्रतिलिपि स्थानीय फ़ाइल सिस्टम पथ द्वारा लोकलडस्ट द्वारा पहचानी गई। |
13 | -getmerge <src> <localDest> HDFS में पथ src से मेल खाने वाली सभी फ़ाइलों को पुनर्प्राप्त करता है, और उन्हें स्थानीय फ़ाइल पहचान द्वारा स्थानीय फ़ाइल सिस्टम में एकल, मर्ज किए गए फ़ाइल में कॉपी करता है। |
14 | -cat <filen-ame> स्टडआउट पर फ़ाइल नाम की सामग्री प्रदर्शित करता है। |
15 | -copyToLocal <src> <localDest> -गेट को पहचान |
16 | -moveToLocal <src> <localDest> -Get की तरह काम करता है, लेकिन सफलता पर HDFS कॉपी को हटा देता है। |
17 | -mkdir <path> HDFS में पथ नाम की एक निर्देशिका बनाता है। पथ में कोई भी मूल निर्देशिका बनाता है जो गायब हैं (उदाहरण के लिए, लिनक्स में mkdir -p)। |
18 | -setrep [-R] [-w] rep <path> दोहराने के लिए पथ द्वारा पहचानी गई फ़ाइलों के लिए लक्ष्य प्रतिकृति कारक सेट करता है। (वास्तविक प्रतिकृति कारक समय के साथ लक्ष्य की ओर बढ़ेगा) |
19 | -touchz <path> पथ पर एक फ़ाइल बनाता है जिसमें टाइमस्टैम्प के रूप में वर्तमान समय होता है। यदि कोई फ़ाइल पहले से ही पथ पर मौजूद है, जब तक कि फ़ाइल पहले से ही आकार 0 पर न हो जाए। |
20 | -test -[ezd] <path> यदि पथ मौजूद है तो 1 लौटाता है; शून्य लंबाई है; या एक निर्देशिका या 0 अन्यथा है। |
21 | -stat [format] <path> मार्ग के बारे में जानकारी प्रिंट करता है। प्रारूप एक स्ट्रिंग है जो ब्लॉक (% b), फ़ाइल नाम (% n), ब्लॉक आकार (% o), प्रतिकृति (% r) और संशोधन तिथि (% y,% Y) में फ़ाइल आकार स्वीकार करता है। |
22 | -tail [-f] <file2name> स्टडआउट पर फ़ाइल का अंतिम 1KB दिखाता है। |
23 | -chmod [-R] mode,mode,... <path>... पथ द्वारा पहचाने गए एक या अधिक ऑब्जेक्ट से जुड़ी फ़ाइल अनुमतियों को बदलता है .... R. मोड के साथ पुनरावर्ती परिवर्तन करता है 3-अंकीय ऑक्टल मोड, या {augo} +/- {rwxX} है। मान लें कि कोई गुंजाइश निर्दिष्ट नहीं है और एक umask लागू नहीं करता है। |
24 | -chown [-R] [owner][:[group]] <path>... पथ द्वारा पहचानी गई फ़ाइलों या निर्देशिकाओं के लिए स्वयं के उपयोगकर्ता और / या समूह सेट करता है .... यदि -R निर्दिष्ट है, तो स्वामी को पुन: सेट करता है। |
25 | -chgrp [-R] group <path>... पथ द्वारा पहचानी गई फ़ाइलों या निर्देशिकाओं के स्वामी समूह को सेट करता है .... समूह को पुन: निर्दिष्ट करता है यदि -R निर्दिष्ट है। |
26 | -help <cmd-name> ऊपर सूचीबद्ध आदेशों में से एक के लिए उपयोग जानकारी देता है। आपको cmd में अग्रणी '-' वर्ण को छोड़ना होगा। |
MapReduce एक ऐसा ढांचा है जिसके उपयोग से हम एक विश्वसनीय तरीके से कमोडिटी हार्डवेयर के बड़े समूहों पर, समानांतर में, बड़ी मात्रा में डेटा को संसाधित करने के लिए एप्लिकेशन लिख सकते हैं।
MapReduce क्या है?
MapReduce एक प्रसंस्करण तकनीक और जावा के आधार पर वितरित कंप्यूटिंग के लिए एक कार्यक्रम मॉडल है। MapReduce एल्गोरिथ्म में दो महत्वपूर्ण कार्य हैं, अर्थात् मानचित्र और कमी। मानचित्र डेटा का एक सेट लेता है और इसे डेटा के दूसरे सेट में परिवर्तित करता है, जहां व्यक्तिगत तत्व ट्यूपल्स (कुंजी / मूल्य जोड़े) में टूट जाते हैं। दूसरे, कार्य को कम करें, जो एक नक्शे से आउटपुट को इनपुट के रूप में लेता है और उन डेटा ट्यूपल्स को ट्यूपल्स के एक छोटे सेट में जोड़ता है। जैसा कि MapReduce के नाम के अनुक्रम से पता चलता है, मानचित्र कार्य के बाद कम कार्य हमेशा किया जाता है।
MapReduce का प्रमुख लाभ यह है कि कई कंप्यूटिंग नोड्स पर डेटा प्रोसेसिंग को स्केल करना आसान है। MapReduce मॉडल के तहत, डेटा प्रोसेसिंग प्राइमेटिव्स को मैपर्स और रीड्यूसर कहा जाता है। में एक डाटा प्रोसेसिंग आवेदन सड़ते हुए मानचित्रकारों और reducers कभी कभी nontrivial है। लेकिन, एक बार जब हम MapReduce फॉर्म में एक एप्लीकेशन लिखते हैं, तो एक क्लस्टर में सैकड़ों, हजारों, या यहां तक कि हजारों मशीनों को चलाने के लिए एप्लिकेशन स्केल करते हैं, यह केवल एक कॉन्फ़िगरेशन परिवर्तन है। यह सरल मापनीयता है जिसने MapReduce मॉडल का उपयोग करने के लिए कई प्रोग्रामर को आकर्षित किया है।
एल्गोरिथ्म
आम तौर पर MapReduce paradigm उस कंप्यूटर को भेजने पर आधारित होता है जहाँ डेटा रहता है!
MapReduce प्रोग्राम तीन चरणों में निष्पादित होता है, अर्थात् मानचित्र चरण, फेरबदल चरण और चरण को कम करता है।
Map stage- मैप या मैपर का काम इनपुट डेटा को प्रोसेस करना है। आम तौर पर इनपुट डेटा फ़ाइल या निर्देशिका के रूप में होता है और इसे Hadoop फ़ाइल सिस्टम (HDFS) में संग्रहीत किया जाता है। इनपुट फ़ाइल को मैपर फ़ंक्शन लाइन से लाइन द्वारा पास किया जाता है। मैपर डेटा को संसाधित करता है और डेटा के कई छोटे हिस्से बनाता है।
Reduce stage - इस चरण का संयोजन है Shuffle मंच और Reduceमंच। Reducer का काम मैपर से आने वाले डेटा को प्रोसेस करना है। प्रसंस्करण के बाद, यह आउटपुट का एक नया सेट तैयार करता है, जिसे एचडीएफएस में संग्रहीत किया जाएगा।
MapReduce जॉब के दौरान, Hadoop मैप और कार्यों को क्लस्टर में उपयुक्त सर्वर पर भेजता है।
ढांचा डेटा-पासिंग के सभी विवरणों को प्रबंधित करता है जैसे कि कार्य जारी करना, कार्य पूरा करने की पुष्टि करना और नोड्स के बीच क्लस्टर के आसपास डेटा की प्रतिलिपि बनाना।
अधिकांश कंप्यूटिंग नेटवर्क ट्रैफ़िक को कम करने वाले स्थानीय डिस्क पर डेटा के साथ नोड्स पर होता है।
दिए गए कार्यों के पूरा होने के बाद, क्लस्टर एक उचित परिणाम बनाने के लिए डेटा एकत्र करता है और कम करता है, और इसे Hadoop सर्वर पर वापस भेजता है।
इनपुट्स और आउटपुट (जावा परिप्रेक्ष्य)
MapReduce का ढांचा <कुंजी, मूल्य> जोड़े पर संचालित होता है, अर्थात, फ्रेमवर्क नौकरी के इनपुट को <कुंजी, मान> जोड़े के सेट के रूप में देखता है और नौकरी के आउटपुट के रूप में <कुंजी, मूल्य> जोड़े के सेट का उत्पादन करता है। , विभिन्न प्रकार के बोधगम्य।
कुंजी और मूल्य वर्ग फ्रेमवर्क द्वारा क्रमबद्ध तरीके से होना चाहिए और इसलिए, राइटटेबल इंटरफ़ेस को लागू करने की आवश्यकता है। इसके अतिरिक्त, मुख्य वर्गों को रूपरेखा द्वारा छांटने की सुविधा के लिए लिखने योग्य-तुलनात्मक इंटरफ़ेस को लागू करना है। इनपुट और आउटपुट प्रकारMapReduce job - (इनपुट) <k1, v1> → नक्शा → <k2, v2> → कम करें → <k3, v3> (आउटपुट)।
इनपुट | उत्पादन | |
---|---|---|
नक्शा | <k1, v1> | सूची (<k2, v2>) |
कम करना | <k2, सूची (v2)> | सूची (<k3, v3>) |
शब्दावली
PayLoad - एप्लीकेशन मैप और रिड्यूस फंक्शन्स को लागू करते हैं, और जॉब के मूल को बनाते हैं।
Mapper - मैपर इनपुट कुंजी / मान जोड़े को मध्यवर्ती कुंजी / मान जोड़ी के एक सेट में मैप करता है।
NamedNode - नोड जो कि Hadoop वितरित फ़ाइल सिस्टम (HDFS) का प्रबंधन करता है।
DataNode - नोड जहां डेटा किसी भी प्रसंस्करण से पहले अग्रिम में प्रस्तुत किया जाता है।
MasterNode - नोड जहां जॉबट्रैकर चलता है और जो ग्राहकों से नौकरी के अनुरोधों को स्वीकार करता है।
SlaveNode - नोड जहां मैप और रिड्यूस प्रोग्राम चलता है।
JobTracker - अनुसूचियां नौकरियां और टास्क ट्रैकर को असाइन की गई नौकरियों को ट्रैक करती हैं।
Task Tracker - कार्य को ट्रैक करता है और JobTracker को स्थिति रिपोर्ट करता है।
Job - एक कार्यक्रम एक डाटासेट में एक मैपर और Reducer का निष्पादन है।
Task - डेटा के एक स्लाइस पर एक मैपर या रेड्यूसर का निष्पादन।
Task Attempt - SlaveNode पर किसी कार्य को निष्पादित करने के प्रयास का एक विशेष उदाहरण।
उदाहरण परिदृश्य
नीचे एक संगठन की विद्युत खपत के बारे में आंकड़े दिए गए हैं। इसमें मासिक विद्युत खपत और विभिन्न वर्षों के लिए वार्षिक औसत शामिल है।
जनवरी | फ़रवरी | मार्च | अप्रैल | मई | जून | जुलाई | अगस्त | सितम्बर | अक्टूबर | नवम्बर | दिसम्बर | औसत | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1979 | 23 | 23 | 2 | 43 | 24 | 25 | 26 | 26 | 26 | 26 | 25 | 26 | 25 |
1980 | 26 | 27 | 28 | 28 | 28 | 30 | 31 | 31 | 31 | 30 | 30 | 30 | 29 |
1981 | 31 | 32 | 32 | 32 | 33 | 34 | 35 | 36 | 36 | 34 | 34 | 34 | 34 |
1984 | 39 | 38 | 39 | 39 | 39 | 41 | 42 | 43 | 40 | 39 | 38 | 38 | 40 |
1985 | 38 | 39 | 39 | 39 | 39 | 41 | 41 | 41 | 00 | 40 | 39 | 39 | 45 |
यदि उपरोक्त डेटा को इनपुट के रूप में दिया गया है, तो हमें इसे संसाधित करने और अधिकतम उपयोग का वर्ष, न्यूनतम उपयोग का वर्ष, और इसी तरह के परिणाम प्राप्त करने के लिए आवेदन लिखना होगा। यह प्रोग्रामर के लिए एक वॉकओवर है जिसके पास कई रिकॉर्ड्स हैं। वे केवल आवश्यक आउटपुट का उत्पादन करने के लिए तर्क लिखेंगे, और लिखे गए एप्लिकेशन को डेटा पास करेंगे।
लेकिन, इसके गठन के बाद से एक विशेष राज्य के सभी बड़े उद्योगों के बिजली की खपत का प्रतिनिधित्व करने वाले आंकड़ों के बारे में सोचें।
जब हम ऐसे बल्क डेटा को प्रोसेस करने के लिए एप्लिकेशन लिखते हैं,
उन्हें निष्पादित करने में बहुत समय लगेगा।
जब हम स्रोत से नेटवर्क सर्वर और इतने पर डेटा स्थानांतरित करते हैं तो एक भारी नेटवर्क ट्रैफ़िक होगा।
इन समस्याओं को हल करने के लिए, हमारे पास MapReduce ढांचा है।
इनपुट डेटा
उपरोक्त डेटा के रूप में सहेजा गया है sample.txtऔर इनपुट के रूप में दिया गया। इनपुट फ़ाइल नीचे दिखाया गया है।
1979 23 23 2 43 24 25 26 26 26 26 25 26 25
1980 26 27 28 28 28 30 31 31 31 30 30 30 29
1981 31 32 32 32 33 34 35 36 36 34 34 34 34
1984 39 38 39 39 39 41 42 43 40 39 38 38 40
1985 38 39 39 39 39 41 41 41 00 40 39 39 45
उदाहरण कार्यक्रम
नीचे दिए गए MapReduce ढांचे का उपयोग कर नमूना डेटा के लिए कार्यक्रम है।
package hadoop;
import java.util.*;
import java.io.IOException;
import java.io.IOException;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;
public class ProcessUnits {
//Mapper class
public static class E_EMapper extends MapReduceBase implements
Mapper<LongWritable ,/*Input key Type */
Text, /*Input value Type*/
Text, /*Output key Type*/
IntWritable> /*Output value Type*/
{
//Map function
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
String line = value.toString();
String lasttoken = null;
StringTokenizer s = new StringTokenizer(line,"\t");
String year = s.nextToken();
while(s.hasMoreTokens()) {
lasttoken = s.nextToken();
}
int avgprice = Integer.parseInt(lasttoken);
output.collect(new Text(year), new IntWritable(avgprice));
}
}
//Reducer class
public static class E_EReduce extends MapReduceBase implements Reducer< Text, IntWritable, Text, IntWritable > {
//Reduce function
public void reduce( Text key, Iterator <IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
int maxavg = 30;
int val = Integer.MIN_VALUE;
while (values.hasNext()) {
if((val = values.next().get())>maxavg) {
output.collect(key, new IntWritable(val));
}
}
}
}
//Main function
public static void main(String args[])throws Exception {
JobConf conf = new JobConf(ProcessUnits.class);
conf.setJobName("max_eletricityunits");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(E_EMapper.class);
conf.setCombinerClass(E_EReduce.class);
conf.setReducerClass(E_EReduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
}
उपरोक्त कार्यक्रम को इस प्रकार सहेजें ProcessUnits.java. कार्यक्रम का संकलन और निष्पादन नीचे दिया गया है।
संकलन और प्रक्रिया इकाइयों के निष्पादन कार्यक्रम
आइए हम मान लें कि हम एक Hadoop उपयोगकर्ता (जैसे / घर / हैडूप) की होम डायरेक्टरी में हैं।
उपरोक्त कार्यक्रम को संकलित करने और निष्पादित करने के लिए नीचे दिए गए चरणों का पालन करें।
चरण 1
निम्न आदेश संकलित जावा कक्षाओं को संग्रहीत करने के लिए एक निर्देशिका बनाने के लिए है।
$ mkdir units
चरण 2
डाउनलोड Hadoop-core-1.2.1.jar,जिसका उपयोग MapReduce प्रोग्राम को संकलित करने और निष्पादित करने के लिए किया जाता है। जार डाउनलोड करने के लिए निम्न लिंक mvnrepository.com पर जाएँ । हमें लगता है कि डाउनलोड किया गया फ़ोल्डर है/home/hadoop/.
चरण 3
निम्नलिखित आदेशों को संकलित करने के लिए उपयोग किया जाता है ProcessUnits.java कार्यक्रम और कार्यक्रम के लिए एक जार बनाने।
$ javac -classpath hadoop-core-1.2.1.jar -d units ProcessUnits.java
$ jar -cvf units.jar -C units/ .
चरण 4
एचडीएफएस में इनपुट डायरेक्टरी बनाने के लिए निम्न कमांड का उपयोग किया जाता है।
$HADOOP_HOME/bin/hadoop fs -mkdir input_dir
चरण 5
निम्न कमांड का उपयोग नामित इनपुट फ़ाइल को कॉपी करने के लिए किया जाता है sample.txtएचडीएफएस की इनपुट डायरेक्टरी में।
$HADOOP_HOME/bin/hadoop fs -put /home/hadoop/sample.txt input_dir
चरण 6
इनपुट निर्देशिका में फ़ाइलों को सत्यापित करने के लिए निम्न कमांड का उपयोग किया जाता है।
$HADOOP_HOME/bin/hadoop fs -ls input_dir/
चरण 7
इनपुट कमांड से इनपुट फाइल्स लेकर Eleunit_max एप्लिकेशन को चलाने के लिए निम्न कमांड का उपयोग किया जाता है।
$HADOOP_HOME/bin/hadoop jar units.jar hadoop.ProcessUnits input_dir output_dir
फ़ाइल निष्पादित होने तक थोड़ी देर प्रतीक्षा करें। निष्पादन के बाद, जैसा कि नीचे दिखाया गया है, आउटपुट में इनपुट विभाजन की संख्या, मानचित्र कार्यों की संख्या, रिड्यूसर कार्यों की संख्या आदि होंगे।
INFO mapreduce.Job: Job job_1414748220717_0002
completed successfully
14/10/31 06:02:52
INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read = 61
FILE: Number of bytes written = 279400
FILE: Number of read operations = 0
FILE: Number of large read operations = 0
FILE: Number of write operations = 0
HDFS: Number of bytes read = 546
HDFS: Number of bytes written = 40
HDFS: Number of read operations = 9
HDFS: Number of large read operations = 0
HDFS: Number of write operations = 2 Job Counters
Launched map tasks = 2
Launched reduce tasks = 1
Data-local map tasks = 2
Total time spent by all maps in occupied slots (ms) = 146137
Total time spent by all reduces in occupied slots (ms) = 441
Total time spent by all map tasks (ms) = 14613
Total time spent by all reduce tasks (ms) = 44120
Total vcore-seconds taken by all map tasks = 146137
Total vcore-seconds taken by all reduce tasks = 44120
Total megabyte-seconds taken by all map tasks = 149644288
Total megabyte-seconds taken by all reduce tasks = 45178880
Map-Reduce Framework
Map input records = 5
Map output records = 5
Map output bytes = 45
Map output materialized bytes = 67
Input split bytes = 208
Combine input records = 5
Combine output records = 5
Reduce input groups = 5
Reduce shuffle bytes = 6
Reduce input records = 5
Reduce output records = 5
Spilled Records = 10
Shuffled Maps = 2
Failed Shuffles = 0
Merged Map outputs = 2
GC time elapsed (ms) = 948
CPU time spent (ms) = 5160
Physical memory (bytes) snapshot = 47749120
Virtual memory (bytes) snapshot = 2899349504
Total committed heap usage (bytes) = 277684224
File Output Format Counters
Bytes Written = 40
चरण 8
आउटपुट फ़ोल्डर में परिणामी फ़ाइलों को सत्यापित करने के लिए निम्न कमांड का उपयोग किया जाता है।
$HADOOP_HOME/bin/hadoop fs -ls output_dir/
चरण 9
आउटपुट को देखने के लिए निम्न कमांड का उपयोग किया जाता है Part-00000 फ़ाइल। यह फाइल HDFS द्वारा जनरेट की गई है।
$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000
नीचे MapReduce प्रोग्राम द्वारा उत्पन्न आउटपुट है।
1981 34
1984 40
1985 45
चरण 10
निम्न कमांड का उपयोग विश्लेषण के लिए एचडीएफएस से स्थानीय फ़ाइल सिस्टम में आउटपुट फ़ोल्डर की प्रतिलिपि बनाने के लिए किया जाता है।
$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000/bin/hadoop dfs get output_dir /home/hadoop
महत्वपूर्ण कमांड
सभी Hadoop कमांड द्वारा आमंत्रित किए जाते हैं $HADOOP_HOME/bin/hadoopआदेश। बिना किसी तर्क के हाडोप लिपि को चलाना सभी कमांड के लिए विवरण को प्रिंट करता है।
Usage - हैडऑप - - कॉन्फिग कॉन्फिडिर] COMMAND
निम्न तालिका उपलब्ध विकल्पों और उनके विवरण को सूचीबद्ध करती है।
अनु क्रमांक। | विकल्प और विवरण |
---|---|
1 | namenode -format DFS फाइल सिस्टम को प्रारूपित करता है। |
2 | secondarynamenode डीएफएस माध्यमिक नामेनोड चलाता है। |
3 | namenode डीएफएस नामेनोड चलाता है। |
4 | datanode एक DFS डेटेनोड चलाता है। |
5 | dfsadmin एक DFS व्यवस्थापक क्लाइंट चलाता है। |
6 | mradmin एक मैप-कम करें व्यवस्थापक क्लाइंट चलाता है। |
7 | fsck एक DFS फाइलसिस्टम को उपयोगिता की जाँच करता है। |
8 | fs एक सामान्य फ़ाइल सिस्टम उपयोगकर्ता क्लाइंट चलाता है। |
9 | balancer एक क्लस्टर संतुलन उपयोगिता चलाता है। |
10 | oiv ऑफ़लाइन fsimage व्यूअर को fsimage पर लागू करता है। |
1 1 | fetchdt NameNode से एक प्रतिनिधिमंडल टोकन प्राप्त करता है। |
12 | jobtracker MapReduce जॉब ट्रैकर नोड चलाता है। |
13 | pipes एक पाइप काम चलाता है। |
14 | tasktracker एक MapReduce कार्य ट्रैकर नोड चलाता है। |
15 | historyserver जॉब हिस्ट्री सर्वर को स्टैंडअलोन डेमन के रूप में चलाता है। |
16 | job MapReduce नौकरियों में हेरफेर करता है। |
17 | queue JobQueues के बारे में जानकारी प्राप्त करता है। |
18 | version संस्करण प्रिंट करता है। |
19 | jar <jar> एक जार फ़ाइल चलाता है। |
20 | distcp <srcurl> <desturl> प्रतिलिपि फ़ाइल या निर्देशिका पुनरावर्ती। |
21 | distcp2 <srcurl> <desturl> DistCp संस्करण 2। |
22 | archive -archiveName NAME -p <parent path> <src>* <dest> एक अनूप संग्रह बनाता है। |
23 | classpath Hadoop जार और आवश्यक पुस्तकालयों को प्राप्त करने के लिए आवश्यक वर्ग पथ प्रिंट करता है। |
24 | daemonlog प्रत्येक डेमॉन के लिए लॉग स्तर प्राप्त करें / सेट करें |
MapReduce जॉब्स के साथ बातचीत कैसे करें
उपयोग - हडूप नौकरी [GENERIC_OPTIONS]
Hadoop जॉब में उपलब्ध जेनेरिक विकल्प निम्नलिखित हैं।
अनु क्रमांक। | GENERIC_OPTION और विवरण |
---|---|
1 | -submit <job-file> काम को प्रस्तुत करता है। |
2 | -status <job-id> नक्शे को प्रिंट करता है और पूर्णता प्रतिशत और सभी नौकरी काउंटरों को कम करता है। |
3 | -counter <job-id> <group-name> <countername> काउंटर मूल्य प्रिंट करता है। |
4 | -kill <job-id> नौकरी मारता है। |
5 | -events <job-id> <fromevent-#> <#-of-events> दिए गए रेंज के लिए नौकरीपेशा द्वारा प्राप्त घटनाओं का विवरण प्रिंट करता है। |
6 | -history [all] <jobOutputDir> - history < jobOutputDir> प्रिंट कार्य विवरण, विफल और टिप विवरण मारे गए। नौकरी के बारे में अधिक विवरण जैसे सफल कार्य और प्रत्येक कार्य के लिए किए गए कार्य प्रयास [सभी] विकल्प को निर्दिष्ट करके देखा जा सकता है। |
7 | -list[all] सभी नौकरियों को प्रदर्शित करता है। -लिस्ट केवल उन्हीं नौकरियों को प्रदर्शित करता है जिन्हें पूरा करना बाकी है। |
8 | -kill-task <task-id> कार्य को मारता है। मारे गए कार्यों को विफल प्रयासों के खिलाफ नहीं गिना जाता है। |
9 | -fail-task <task-id> कार्य को विफल करता है। असफल प्रयासों के खिलाफ असफल कार्यों को गिना जाता है। |
10 | -set-priority <job-id> <priority> नौकरी की प्राथमिकता को बदलता है। अनुमत प्राथमिकता मान VERY_HIGH, HIGH, NORMAL, LOW, VERY_LOW हैं |
नौकरी की स्थिति देखने के लिए
$ $HADOOP_HOME/bin/hadoop job -status <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -status job_201310191043_0004
नौकरी के इतिहास को देखने के लिए आउटपुट-दिर
$ $HADOOP_HOME/bin/hadoop job -history <DIR-NAME> e.g. $ $HADOOP_HOME/bin/hadoop job -history /user/expert/output
नौकरी मारने के लिए
$ $HADOOP_HOME/bin/hadoop job -kill <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -kill job_201310191043_0004
Hadoop स्ट्रीमिंग एक उपयोगिता है जो Hadoop वितरण के साथ आती है। यह उपयोगिता आपको मैपर और / या रिड्यूसर के रूप में किसी भी निष्पादन योग्य या स्क्रिप्ट के साथ मैप / कम करने की नौकरियों को बनाने और चलाने की अनुमति देती है।
उदाहरण पायथन का उपयोग करना
Hadoop स्ट्रीमिंग के लिए, हम शब्द-गणना समस्या पर विचार कर रहे हैं। Hadoop में किसी भी नौकरी के दो चरण होने चाहिए: मैपर और रेड्यूसर। हमने हैदर के तहत इसे चलाने के लिए पाइपरॉन स्क्रिप्ट में मैपर और रिड्यूसर के लिए कोड लिखे हैं। एक भी पर्ल और रूबी में एक ही लिख सकता है।
मैपर फेज कोड
!/usr/bin/python
import sys
# Input takes from standard input for myline in sys.stdin:
# Remove whitespace either side
myline = myline.strip()
# Break the line into words
words = myline.split()
# Iterate the words list
for myword in words:
# Write the results to standard output
print '%s\t%s' % (myword, 1)
सुनिश्चित करें कि इस फ़ाइल में निष्पादन अनुमति है (chmod + x / home / expert / hadoop-1.2.1 / mapper.py)।
Reducer चरण कोड
#!/usr/bin/python
from operator import itemgetter
import sys
current_word = ""
current_count = 0
word = ""
# Input takes from standard input for myline in sys.stdin:
# Remove whitespace either side
myline = myline.strip()
# Split the input we got from mapper.py word,
count = myline.split('\t', 1)
# Convert count variable to integer
try:
count = int(count)
except ValueError:
# Count was not a number, so silently ignore this line continue
if current_word == word:
current_count += count
else:
if current_word:
# Write result to standard output print '%s\t%s' % (current_word, current_count)
current_count = count
current_word = word
# Do not forget to output the last word if needed!
if current_word == word:
print '%s\t%s' % (current_word, current_count)
Happop होम डायरेक्टरी में mapper.py और reducer.py में mapper और reducer कोड सहेजें। सुनिश्चित करें कि इन फ़ाइलों का निष्पादन अनुमति है (chmod + x mapper.py और chmod + x reducer.py)। चूंकि अजगर इंडेंटेशन सेंसिटिव होता है, इसलिए उसी कोड को नीचे दिए गए लिंक से डाउनलोड किया जा सकता है।
वर्डकाउंट प्रोग्राम का निष्पादन
$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1.
2.1.jar \
-input input_dirs \
-output output_dir \
-mapper <path/mapper.py \
-reducer <path/reducer.py
जहां "\" का उपयोग स्पष्ट पठनीयता के लिए लाइन निरंतरता के लिए किया जाता है।
उदाहरण के लिए,
./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py
कैसे स्ट्रीमिंग काम करता है
उपरोक्त उदाहरण में, मैपर और रेड्यूसर दोनों पायथन स्क्रिप्ट हैं जो मानक इनपुट से इनपुट को पढ़ते हैं और आउटपुट को मानक आउटपुट में उत्सर्जित करते हैं। उपयोगिता मैप / कम करने वाली नौकरी बनाएगी, नौकरी को एक उपयुक्त क्लस्टर में जमा करेगी और जब तक यह पूरा नहीं हो जाता तब तक नौकरी की प्रगति की निगरानी करें।
जब मैपर के लिए एक स्क्रिप्ट निर्दिष्ट की जाती है, तो प्रत्येक मैपर कार्य स्क्रिप्ट को एक अलग प्रक्रिया के रूप में लॉन्च करेगा जब मैपर को इनिशियलाइज़ किया जाता है। जैसा कि मैपर कार्य चलता है, यह अपने इनपुट को लाइनों में परिवर्तित करता है और प्रक्रिया के मानक इनपुट (STDIN) को लाइनें फ़ीड करता है। इस बीच, मैपर प्रक्रिया के मानक आउटपुट (STDOUT) से लाइन-ओरिएंटेड आउटपुट को इकट्ठा करता है और प्रत्येक लाइन को एक की / वैल्यू पेयर में परिवर्तित करता है, जिसे मैपर के आउटपुट के रूप में एकत्र किया जाता है। डिफ़ॉल्ट रूप से, पहले टैब वर्ण तक एक पंक्ति का उपसर्ग कुंजी है और शेष पंक्ति (टैब वर्ण को छोड़कर) का मान होगा। यदि पंक्ति में कोई टैब वर्ण नहीं है, तो संपूर्ण पंक्ति को कुंजी माना जाता है और मान शून्य है। हालाँकि, यह एक की जरूरत के अनुसार अनुकूलित किया जा सकता है।
जब कोई स्क्रिप्ट रिड्यूसर के लिए निर्दिष्ट की जाती है, तो प्रत्येक रिड्यूसर कार्य स्क्रिप्ट को एक अलग प्रक्रिया के रूप में लॉन्च करेगा, फिर रिड्यूसर को आरंभीकृत किया जाता है। जैसा कि reducer कार्य चलाता है, यह अपनी इनपुट कुंजी / मान जोड़े को लाइनों में परिवर्तित करता है और प्रक्रिया के मानक इनपुट (STDIN) को लाइनें खिलाता है। इस बीच, रिड्यूसर प्रक्रिया के मानक आउटपुट (STDOUT) से लाइन-उन्मुख आउटपुट एकत्र करता है, प्रत्येक पंक्ति को एक कुंजी / मान जोड़ी में परिवर्तित करता है, जिसे रिड्यूसर के आउटपुट के रूप में एकत्र किया जाता है। डिफ़ॉल्ट रूप से, पहले टैब वर्ण तक एक पंक्ति का उपसर्ग कुंजी है और शेष पंक्ति (टैब वर्ण को छोड़कर) मान है। हालाँकि, इसे विशिष्ट आवश्यकताओं के अनुसार अनुकूलित किया जा सकता है।
महत्वपूर्ण कमांड
मापदंडों | विकल्प | विवरण |
---|---|---|
-इनपुट निर्देशिका / फ़ाइल-नाम | अपेक्षित | मैपर के लिए इनपुट स्थान। |
-आउटपुट निर्देशिका-नाम | अपेक्षित | Reducer के लिए आउटपुट स्थान। |
- निष्पादन योग्य या स्क्रिप्ट या JavaClassName | अपेक्षित | मैपर निष्पादन योग्य। |
-लेखक निष्पादन योग्य या स्क्रिप्ट या JavaClassName | अपेक्षित | Reducer निष्पादन योग्य। |
फ़ाइल फ़ाइल-नाम | ऐच्छिक | मैपर, रेड्यूसर या कंबाइन निष्पादन योग्य बनाता है जो स्थानीय रूप से कंप्यूट नोड्स पर उपलब्ध है। |
-इनपुटफॉर्मट JavaClassName | ऐच्छिक | आपके द्वारा आपूर्ति की जाने वाली कक्षा को पाठ वर्ग की कुंजी / मान जोड़े वापस करना चाहिए। यदि निर्दिष्ट नहीं है, तो TextInputFormat डिफ़ॉल्ट के रूप में उपयोग किया जाता है। |
-आउटपुटफॉर्मैट JavaClassName | ऐच्छिक | आपके द्वारा आपूर्ति की जाने वाली कक्षा में पाठ वर्ग के प्रमुख / मूल्य जोड़े होने चाहिए। यदि निर्दिष्ट नहीं है, तो TextOutputformat डिफ़ॉल्ट के रूप में उपयोग किया जाता है। |
-पार्टिशनर JavaClassName | ऐच्छिक | वह वर्ग जो यह निर्धारित करता है कि किस कुंजी को कम किया जाए। |
-कंबिनेटर स्ट्रीमिंगकॉम्ब या जावाक्लासनाम | ऐच्छिक | मैप आउटपुट के लिए कंबाइन निष्पादन योग्य। |
-cmdenv नाम = मान | ऐच्छिक | स्ट्रीमिंग आदेश के लिए पर्यावरण चर गुजरता है। |
-inputreader | ऐच्छिक | बैकवर्ड-संगतता के लिए: एक रिकॉर्ड रीडर क्लास (इनपुट प्रारूप वर्ग के बजाय) निर्दिष्ट करता है। |
-verbose | ऐच्छिक | वाचाल उत्पादन। |
-lazyOutput | ऐच्छिक | उत्पादन आलसी बनाता है। उदाहरण के लिए, यदि आउटपुट स्वरूप FileOutputFormat पर आधारित है, तो आउटपुट फ़ाइल केवल पहली कॉल पर output.collect (या Context.write) पर बनाई जाती है। |
-numReduceTasks | ऐच्छिक | Reducers की संख्या निर्दिष्ट करता है। |
-mapdebug | ऐच्छिक | नक्शा कार्य में विफल होने पर कॉल करने के लिए स्क्रिप्ट। |
-reducedebug | ऐच्छिक | टास्क फेल होने पर कॉल करने की स्क्रिप्ट। |
यह अध्याय वितरित वातावरण पर Hadoop Multi-Node क्लस्टर की स्थापना के बारे में बताता है।
जैसा कि पूरे क्लस्टर का प्रदर्शन नहीं किया जा सकता है, हम तीन प्रणालियों (एक मास्टर और दो दास) का उपयोग करके Hadoop क्लस्टर पर्यावरण की व्याख्या कर रहे हैं; नीचे उनके आईपी पते दिए गए हैं।
- हडोप मास्टर: 192.168.1.15 (हडूप-मास्टर)
- हडूप स्लेव: 192.168.1.16 (हडूप-स्लेव -1)
- हडोप्प स्लेव: 192.168.1.17 (हडूप-स्लेव -2)
Hadoop Multi-Node क्लस्टर सेटअप के लिए नीचे दिए गए चरणों का पालन करें।
जावा को स्थापित करना
Hadoop के लिए Java मुख्य शर्त है। सबसे पहले, आपको "जावा-वर्सन" का उपयोग करके अपने सिस्टम में जावा के अस्तित्व को सत्यापित करना चाहिए। जावा संस्करण कमांड का सिंटैक्स नीचे दिया गया है।
$ java -version
यदि सब कुछ ठीक काम करता है तो यह आपको निम्न आउटपुट देगा।
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
यदि आपके सिस्टम में जावा स्थापित नहीं है, तो जावा स्थापित करने के लिए दिए गए चरणों का पालन करें।
चरण 1
निम्नलिखित लिंक www.oracle.com पर जाकर java (JDK <नवीनतम संस्करण> - X64.tar.gz) डाउनलोड करें
फिर jdk-7u71-linux-x64.tar.gz आपके सिस्टम में डाउनलोड हो जाएगा।
चरण 2
आम तौर पर आपको डाउनलोड फ़ोल्डर में डाउनलोड की गई जावा फ़ाइल मिलेगी। इसे सत्यापित करें और निकालेंjdk-7u71-linux-x64.gz निम्न आदेशों का उपयोग करके फ़ाइल।
$ cd Downloads/ $ ls
jdk-7u71-Linux-x64.gz
$ tar zxf jdk-7u71-Linux-x64.gz $ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz
चरण 3
जावा को सभी उपयोगकर्ताओं के लिए उपलब्ध कराने के लिए, आपको इसे "/ usr / स्थानीय /" स्थान पर ले जाना होगा। रूट खोलें, और निम्न कमांड टाइप करें।
$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit
चरण 4
स्थापित करने के लिए PATH तथा JAVA_HOME चर, निम्नलिखित कमांड को इसमें जोड़ें ~/.bashrc फ़ाइल।
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin
अब सत्यापित करें java -versionऊपर बताए अनुसार टर्मिनल से कमांड। उपरोक्त प्रक्रिया का पालन करें और अपने सभी क्लस्टर नोड्स में जावा स्थापित करें।
उपयोगकर्ता खाता बनाना
Hadoop इंस्टॉलेशन का उपयोग करने के लिए मास्टर और स्लेव सिस्टम दोनों पर एक सिस्टम यूजर अकाउंट बनाएं।
# useradd hadoop
# passwd hadoop
नोड्स का मानचित्रण
आपको एडिट करना होगा hosts में फाइल /etc/ सभी नोड्स पर फ़ोल्डर, प्रत्येक सिस्टम के आईपी पते को उनके मेजबान नामों के बाद निर्दिष्ट करें।
# vi /etc/hosts
enter the following lines in the /etc/hosts file.
192.168.1.109 hadoop-master
192.168.1.145 hadoop-slave-1
192.168.56.1 hadoop-slave-2
मुख्य आधार लॉगिन को कॉन्फ़िगर करना
प्रत्येक नोड में सेटअप ssh ऐसा है कि वे पासवर्ड के लिए किसी भी संकेत के बिना एक दूसरे के साथ संवाद कर सकते हैं।
# su hadoop
$ ssh-keygen -t rsa $ ssh-copy-id -i ~/.ssh/id_rsa.pub tutorialspoint@hadoop-master
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1 $ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2
$ chmod 0600 ~/.ssh/authorized_keys $ exit
Hadoop स्थापित करना
मास्टर सर्वर में, निम्न आदेशों का उपयोग करके Hadoop को डाउनलोड और इंस्टॉल करें।
# mkdir /opt/hadoop
# cd /opt/hadoop/
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz
# tar -xzf hadoop-1.2.0.tar.gz
# mv hadoop-1.2.0 hadoop
# chown -R hadoop /opt/hadoop
# cd /opt/hadoop/hadoop/
Hadoop को कॉन्फ़िगर करना
आपको नीचे दिए गए अनुसार निम्न परिवर्तन करके Hadoop सर्वर को कॉन्फ़िगर करना होगा।
कोर-site.xml
को खोलो core-site.xml फ़ाइल और इसे नीचे दिखाए अनुसार संपादित करें।
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-master:9000/</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
HDFS-site.xml
को खोलो hdfs-site.xml फ़ाइल और इसे नीचे दिखाए अनुसार संपादित करें।
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hadoop/dfs/name/data</value>
<final>true</final>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml
को खोलो mapred-site.xml फ़ाइल और इसे नीचे दिखाए अनुसार संपादित करें।
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-master:9001</value>
</property>
</configuration>
hadoop-env.sh
को खोलो hadoop-env.sh नीचे दिखाए गए JAVA_HOME, HADOOP_CONF_DIR और HADOOP_OPTS फ़ाइल को संपादित करें।
Note - अपने सिस्टम विन्यास के अनुसार JAVA_HOME सेट करें।
export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf
दास सेवकों पर हाडोप स्थापित करना
दिए गए आदेशों का पालन करके सभी दास सर्वरों पर Hadoop स्थापित करें।
# su hadoop
$ cd /opt/hadoop $ scp -r hadoop hadoop-slave-1:/opt/hadoop
$ scp -r hadoop hadoop-slave-2:/opt/hadoop
मास्टर सर्वर पर Hadoop को कॉन्फ़िगर करना
मास्टर सर्वर खोलें और दिए गए आदेशों का पालन करके इसे कॉन्फ़िगर करें।
# su hadoop
$ cd /opt/hadoop/hadoop
मास्टर नोड कॉन्फ़िगर करना
$ vi etc/hadoop/masters
hadoop-master
गुलाम नोड को कॉन्फ़िगर करना
$ vi etc/hadoop/slaves
hadoop-slave-1
hadoop-slave-2
Hadoop Master पर प्रारूप नाम नोड
# su hadoop
$ cd /opt/hadoop/hadoop $ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = hadoop-master/192.168.1.109
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.0
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;
compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013
STARTUP_MSG: java = 1.7.0_71
************************************************************/
11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap
editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
………………………………………………….
11/10/14 10:58:08 INFO common.Storage: Storage directory
/opt/hadoop/hadoop/dfs/name has been successfully formatted.
11/10/14 10:58:08 INFO namenode.NameNode:
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15
************************************************************/
Hadoop सेवाएँ शुरू करना
निम्न कमांड हैडोप-मास्टर पर सभी Hadoop सेवाओं को शुरू करने के लिए है।
$ cd $HADOOP_HOME/sbin
$ start-all.sh
Hadoop क्लस्टर में एक नया DataNode जोड़ना
नीचे दिए गए चरणों में एक Hadoop क्लस्टर में नए नोड्स जोड़ने के लिए चरणों का पालन किया गया है।
नेटवर्किंग
कुछ उपयुक्त नेटवर्क कॉन्फ़िगरेशन के साथ मौजूदा Hadoop क्लस्टर में नए नोड्स जोड़ें। निम्न नेटवर्क कॉन्फ़िगरेशन मान लें।
नए नोड कॉन्फ़िगरेशन के लिए -
IP address : 192.168.1.103
netmask : 255.255.255.0
hostname : slave3.in
उपयोगकर्ता और SSH एक्सेस जोड़ना
एक उपयोगकर्ता जोड़ें
एक नए नोड पर, "हैडऑप" उपयोगकर्ता को जोड़ें और हडॉप उपयोगकर्ता के पासवर्ड को "हैडूप123" या जो कुछ भी आप चाहते हैं उसे निम्न कमांड का उपयोग करके सेट करें।
useradd hadoop
passwd hadoop
सेटअप पासवर्ड मास्टर से नए गुलाम के लिए कम कनेक्टिविटी।
गुरु पर निम्न कार्य करें
mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub [email protected]:/home/hadoop/
गुलामों पर निम्न कार्य करें
हडॉप पर लॉगिन करें। यदि नहीं, तो हडूप उपयोगकर्ता के लिए लॉगिन करें।
su hadoop ssh -X [email protected]
सार्वजनिक कुंजी की सामग्री को फ़ाइल में कॉपी करें "$HOME/.ssh/authorized_keys" और फिर निम्नलिखित आदेशों को निष्पादित करके उसी के लिए अनुमति बदलें।
cd $HOME mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh cat id_rsa.pub >>$HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys
मास्टर मशीन से ssh लॉगिन चेक करें। अब जांचें कि क्या आप मास्टर से पासवर्ड के बिना नए नोड के लिए ssh कर सकते हैं।
ssh [email protected] or hadoop@slave3
नए नोड के होस्टनाम सेट करें
आप फ़ाइल में होस्टनाम सेट कर सकते हैं /etc/sysconfig/network
On new slave3 machine
NETWORKING = yes
HOSTNAME = slave3.in
परिवर्तनों को प्रभावी बनाने के लिए, या तो मशीन को पुनरारंभ करें या संबंधित होस्टनाम के साथ एक नई मशीन को होस्टनाम कमांड चलाएं (पुनरारंभ एक अच्छा विकल्प है)।
गुलाम 3 नोड मशीन पर -
hostname slave3.in
अपडेट करें /etc/hosts निम्नलिखित पंक्तियों के साथ क्लस्टर की सभी मशीनों पर -
192.168.1.102 slave3.in slave3
अब होस्टनाम के साथ मशीन को पिंग करने की कोशिश करें ताकि यह पता चल सके कि यह आईपी के लिए हल हो रहा है या नहीं।
नई नोड मशीन पर -
ping master.in
नए नोड पर DataNode प्रारंभ करें
मैन्युअल रूप से उपयोग कर डेटनोड डेमन शुरू करें $HADOOP_HOME/bin/hadoop-daemon.sh script। यह स्वचालित रूप से मास्टर (NameNode) से संपर्क करेगा और क्लस्टर में शामिल होगा। हमें मास्टर सर्वर में conf / दास फ़ाइल में नया नोड भी जोड़ना चाहिए। स्क्रिप्ट-आधारित कमांड नए नोड को पहचानेंगे।
नए नोड में लॉगिन करें
su hadoop or ssh -X [email protected]
निम्नलिखित कमांड का उपयोग करके एक नए जोड़े गए दास नोड पर HDFS प्रारंभ करें
./bin/hadoop-daemon.sh start datanode
एक नए नोड पर jps कमांड के आउटपुट की जांच करें। यह इस प्रकार दिखता है।
$ jps
7141 DataNode
10312 Jps
Hadoop क्लस्टर से एक DataNode हटाना
हम एक क्लस्टर को मक्खी पर एक क्लस्टर से हटा सकते हैं, जबकि यह चल रहा है, बिना किसी डेटा हानि के। एचडीएफएस एक डिकोमिशनिंग सुविधा प्रदान करता है, जो सुनिश्चित करता है कि नोड को हटाने से सुरक्षित रूप से प्रदर्शन किया जाता है। इसका उपयोग करने के लिए, नीचे दिए गए चरणों का पालन करें -
चरण 1 - मास्टर में प्रवेश करें
मास्टर मशीन उपयोगकर्ता के लिए लॉगिन करें जहां Hadoop स्थापित है।
$ su hadoop
चरण 2 - क्लस्टर कॉन्फ़िगरेशन बदलें
क्लस्टर शुरू करने से पहले एक बहिष्कृत फ़ाइल को कॉन्फ़िगर किया जाना चाहिए। हमारे लिए dfs.hosts.exclude नाम की एक कुंजी जोड़ें$HADOOP_HOME/etc/hadoop/hdfs-site.xmlफ़ाइल। इस कुंजी से जुड़ा मान नेमोड के स्थानीय फाइल सिस्टम पर एक फाइल को पूर्ण पथ प्रदान करता है जिसमें ऐसी मशीनों की सूची होती है जिन्हें एचडीएफएस से कनेक्ट करने की अनुमति नहीं है।
उदाहरण के लिए, इन पंक्तियों को इसमें जोड़ें etc/hadoop/hdfs-site.xml फ़ाइल।
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value>
<description>DFS exclude</description>
</property>
चरण 3 - मेजबानों को निर्धारित करने के लिए निर्धारित करें
प्रत्येक मशीन को डिकम्फ़ंक्शन करने के लिए, HDFS_exclude.txt, प्रति पंक्ति एक डोमेन नाम से पहचानी गई फ़ाइल में जोड़ा जाना चाहिए। यह उन्हें NameNode से कनेक्ट करने से रोकेगा। की सामग्री"/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" फ़ाइल नीचे दी गई है, यदि आप DataNode2 को हटाना चाहते हैं।
slave2.in
चरण 4 - बल विन्यास पुनः लोड
कमांड चलाएं "$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes" बिना उद्धरण।
$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes
यह NameNode को अपने कॉन्फ़िगरेशन को फिर से पढ़ने के लिए मजबूर करेगा, जिसमें नई अपडेट की गई 'बहिष्कृत' फ़ाइल भी शामिल है। यह समय की अवधि में नोड्स को डिमोशन कर देगा, जिससे प्रत्येक नोड के ब्लॉक को मशीनों पर दोहराया जा सकेगा जो सक्रिय रहने के लिए निर्धारित हैं।
पर slave2.injps कमांड आउटपुट चेक करें। कुछ समय बाद, आप देखेंगे कि DataNode प्रक्रिया स्वतः बंद हो जाती है।
चरण 5 - शटडाउन नोड्स
डीकमीशन प्रक्रिया पूरी होने के बाद, डिमोशन उत्सर्जन हार्डवेयर को रखरखाव के लिए सुरक्षित रूप से बंद किया जा सकता है। डिमोशन की स्थिति की जांच करने के लिए dfsadmin को रिपोर्ट कमांड चलाएँ। निम्नलिखित कमांड डिकम्पशन नोड की स्थिति और क्लस्टर से जुड़े नोड्स का वर्णन करेगा।
$ $HADOOP_HOME/bin/hadoop dfsadmin -report
चरण 6 - संपादित करें फ़ाइल को फिर से बाहर करता है
एक बार मशीनों के डिमोशन हो जाने के बाद, उन्हें 'बहिष्कृत' फ़ाइल से हटाया जा सकता है। दौड़ना"$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes"फिर NameNode में शामिल किए गए फ़ाइल को फिर से पढ़ेगा; रखरखाव पूरा हो जाने के बाद, DataNodes को क्लस्टर में फिर से शामिल होने की अनुमति देना, या क्लस्टर में अतिरिक्त क्षमता की आवश्यकता है, आदि।
Special Note- यदि उपरोक्त प्रक्रिया का पालन किया जाता है और टास्कट्रैकर प्रक्रिया अभी भी नोड पर चल रही है, तो इसे बंद करने की आवश्यकता है। एक तरीका मशीन को डिस्कनेक्ट करने का है जैसा कि हमने उपरोक्त चरणों में किया था। मास्टर स्वचालित रूप से प्रक्रिया को पहचान लेगा और मृत घोषित कर देगा। टास्कट्रैकर को हटाने के लिए समान प्रक्रिया का पालन करने की कोई आवश्यकता नहीं है क्योंकि यह DataNode की तुलना में बहुत महत्वपूर्ण नहीं है। DataNode में वह डेटा होता है जिसे आप डेटा के किसी नुकसान के बिना सुरक्षित रूप से निकालना चाहते हैं।
टास्कट्रैकर को किसी भी समय निम्न कमांड द्वारा फ्लाई पर चलाया / बंद किया जा सकता है।
$ $HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker $HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker