ज़ुकीपर - त्वरित गाइड
ZooKeeper मेजबानों के बड़े सेट का प्रबंधन करने के लिए एक वितरित समन्वय सेवा है। एक वितरित वातावरण में एक सेवा का समन्वय और प्रबंधन एक जटिल प्रक्रिया है। ज़ूकीपर इस मुद्दे को अपनी सरल वास्तुकला और एपीआई के साथ हल करता है। चिड़ियाघरकीपर डेवलपर्स को आवेदन की वितरित प्रकृति के बारे में चिंता किए बिना कोर एप्लिकेशन लॉजिक पर ध्यान केंद्रित करने की अनुमति देता है।
चिड़ियाघरकीपर फ्रेमवर्क मूल रूप से "याहू!" एक आसान और मजबूत तरीके से उनके अनुप्रयोगों तक पहुँचने के लिए। बाद में, अपाचे ज़ूकीपर Hadoop, HBase और अन्य वितरित रूपरेखाओं द्वारा उपयोग की जाने वाली संगठित सेवा के लिए एक मानक बन गया। उदाहरण के लिए, अपाचे HBase वितरित डेटा की स्थिति को ट्रैक करने के लिए ZooKeeper का उपयोग करता है।
आगे बढ़ने से पहले, यह महत्वपूर्ण है कि हम वितरित अनुप्रयोगों के बारे में एक या दो बातें जानते हैं। तो, हम वितरित अनुप्रयोगों के त्वरित अवलोकन के साथ चर्चा शुरू करते हैं।
वितरित आवेदन
किसी वितरित कार्य को एक नेटवर्क में कई प्रणालियों पर एक साथ (एक साथ) एक विशेष कार्य को तेज और कुशल तरीके से पूरा करने के लिए समन्वय करके चलाया जा सकता है। आम तौर पर, जटिल और समय लेने वाले कार्य, जो एक गैर-वितरित एप्लिकेशन (एकल प्रणाली में चल रहे) द्वारा पूरा करने में घंटों लगेंगे, एक वितरित एप्लिकेशन द्वारा मिनटों में शामिल सभी सिस्टम की कंप्यूटिंग क्षमताओं का उपयोग करके किया जा सकता है।
अधिक सिस्टम पर चलने के लिए वितरित एप्लिकेशन को कॉन्फ़िगर करके कार्य को पूरा करने का समय और कम किया जा सकता है। सिस्टम का एक समूह जिसमें एक वितरित अनुप्रयोग चल रहा है, a कहलाता हैCluster और क्लस्टर में चलने वाली प्रत्येक मशीन को कहा जाता है Node।
एक वितरित एप्लिकेशन के दो भाग हैं, Server तथा Clientआवेदन। सर्वर एप्लिकेशन वास्तव में वितरित किए जाते हैं और एक सामान्य इंटरफ़ेस होता है ताकि क्लाइंट क्लस्टर के किसी भी सर्वर से कनेक्ट हो सकें और समान परिणाम प्राप्त कर सकें। क्लाइंट एप्लिकेशन एक वितरित एप्लिकेशन के साथ बातचीत करने के उपकरण हैं।
वितरित अनुप्रयोगों के लाभ
Reliability - एकल या कुछ सिस्टम की विफलता पूरे सिस्टम को विफल नहीं बनाती है।
Scalability - बिना डाउनटाइम वाले एप्लिकेशन के कॉन्फ़िगरेशन में मामूली परिवर्तन के साथ अधिक मशीनों को जोड़कर प्रदर्शन को आवश्यकतानुसार और बढ़ाया जा सकता है।
Transparency - सिस्टम की जटिलता को छिपाता है और खुद को एक एकल इकाई / एप्लिकेशन के रूप में दिखाता है।
वितरित अनुप्रयोगों की चुनौतियाँ
Race condition- किसी विशेष कार्य को करने की कोशिश करने वाली दो या अधिक मशीनें, जिन्हें वास्तव में किसी भी समय केवल एक मशीन द्वारा किया जाना चाहिए। उदाहरण के लिए, साझा संसाधनों को किसी भी समय केवल एक मशीन द्वारा संशोधित किया जाना चाहिए।
Deadlock - दो या दो से अधिक ऑपरेशन अनिश्चित काल के लिए एक दूसरे के पूरा होने की प्रतीक्षा में।
Inconsistency - डेटा की आंशिक विफलता।
क्या है अपाचे ज़ुकीपर माट के लिए?
Apache ZooKeeper एक क्लस्टर (नोड्स का समूह) द्वारा उपयोग की जाने वाली सेवा है जो आपस में समन्वय करती है और मजबूत तुल्यकालन तकनीकों के साथ साझा डेटा को बनाए रखती है। चिड़ियाघरकीपर स्वयं एक वितरित अनुप्रयोग लिखने के लिए सेवाएं प्रदान करने वाला एक वितरित अनुप्रयोग है।
चिड़ियाघरकीपर द्वारा प्रदान की जाने वाली सामान्य सेवाएं इस प्रकार हैं -
Naming service- नाम से क्लस्टर में नोड्स की पहचान करना। यह DNS के समान है, लेकिन नोड्स के लिए।
Configuration management - जुड़ने वाले नोड के लिए सिस्टम की नवीनतम और अद्यतित कॉन्फ़िगरेशन जानकारी।
Cluster management - एक क्लस्टर में नोड के शामिल होने / छोड़ने और वास्तविक समय में नोड की स्थिति।
Leader election - समन्वय के उद्देश्य के लिए एक नेता के रूप में एक नोड का चुनाव करना।
Locking and synchronization service- इसे संशोधित करते हुए डेटा को लॉक करना। अपाचे HBase जैसे अन्य वितरित अनुप्रयोगों को जोड़ने के दौरान यह तंत्र आपको स्वचालित विफल वसूली में मदद करता है।
Highly reliable data registry - एक या कुछ नोड्स डाउन होने पर भी डेटा की उपलब्धता।
वितरित एप्लिकेशन बहुत सारे लाभ प्रदान करते हैं, लेकिन वे कुछ जटिल और कठिन से कठिन चुनौतियों को भी फेंक देते हैं। चिड़ियाघर कीपर फ्रेमवर्क सभी चुनौतियों को दूर करने के लिए एक संपूर्ण तंत्र प्रदान करता है। दौड़ की स्थिति और गतिरोध का उपयोग किया जाता हैfail-safe synchronization approach। एक और मुख्य दोष डेटा की असंगति है, जिसे चिड़ियाघरकीपर के साथ हल करता हैatomicity।
चिड़ियाघर कीपर के लाभ
यहाँ चिड़ियाघरकीपर के उपयोग के लाभ दिए गए हैं -
Simple distributed coordination process
Synchronization- सर्वर प्रक्रियाओं के बीच आपसी बहिष्कार और सहयोग। यह प्रक्रिया कॉन्फ़िगरेशन प्रबंधन के लिए अपाचे HBase में मदद करती है।
Ordered Messages
Serialization- विशिष्ट नियमों के अनुसार डेटा को एनकोड करें। सुनिश्चित करें कि आपका आवेदन लगातार चलता रहे। रनिंग थ्रेड्स को निष्पादित करने के लिए कतार का समन्वय करने के लिए MapReduce में इस दृष्टिकोण का उपयोग किया जा सकता है।
Reliability
Atomicity - डेटा ट्रांसफर या तो पूरी तरह से सफल या विफल हो जाता है, लेकिन कोई लेनदेन आंशिक नहीं होता है।
चिड़ियाघर कीपर के काम में गहराई से जाने से पहले, हम चिड़ियाघरकीपर की मूलभूत अवधारणाओं पर एक नज़र डालते हैं। हम इस अध्याय में निम्नलिखित विषयों पर चर्चा करेंगे -
- Architecture
- पदानुक्रमित नाम स्थान
- Session
- Watches
चिड़ियाघर कीपर की वास्तुकला
निम्नलिखित आरेख पर एक नज़र डालें। इसमें चिड़ियाघर कीपर के "क्लाइंट-सर्वर आर्किटेक्चर" को दर्शाया गया है।
प्रत्येक घटक जो कि चिड़ियाघरकीपर वास्तुकला का एक हिस्सा है, को निम्नलिखित तालिका में समझाया गया है।
अंश | विवरण |
---|---|
ग्राहक | ग्राहक, हमारे वितरित एप्लिकेशन क्लस्टर में नोड्स में से एक, सर्वर से जानकारी तक पहुंच। किसी विशेष समय अंतराल के लिए, प्रत्येक ग्राहक सर्वर को एक संदेश भेजता है ताकि ग्राहक को यह पता चल सके कि ग्राहक जीवित है। इसी तरह, क्लाइंट के कनेक्ट होने पर सर्वर एक पावती भेजता है। यदि कनेक्ट किए गए सर्वर से कोई प्रतिक्रिया नहीं है, तो क्लाइंट स्वचालित रूप से संदेश को दूसरे सर्वर पर रीडायरेक्ट करता है। |
सर्वर | सर्वर, हमारे ज़ूकेर पहनावे में से एक नोड, ग्राहकों को सभी सेवाएं प्रदान करता है। क्लाइंट को सर्वर के जीवित होने की सूचना देने के लिए पावती देता है। |
कलाकारों की टुकड़ी | ZooKeeper सर्वर का समूह। एक पहनावा बनाने के लिए आवश्यक नोड्स की न्यूनतम संख्या 3 है। |
नेता | सर्वर नोड जो किसी भी जुड़े नोड के विफल होने पर स्वचालित पुनर्प्राप्ति करता है। सर्विस स्टार्टअप पर नेताओं का चुनाव किया जाता है। |
अनुगामी | सर्वर नोड जो नेता निर्देश का पालन करता है। |
पदानुक्रमित नामस्थान
निम्नलिखित चित्र में मेमोरी प्रतिनिधित्व के लिए उपयोग की जाने वाली ज़ूकिपर फ़ाइल सिस्टम की वृक्ष संरचना को दर्शाया गया है। चिड़ियाघरकीपर नोड के रूप में जाना जाता हैznode। हर ज़नोड को एक नाम से पहचाना जाता है और पथ के अनुक्रम द्वारा अलग किया जाता है (/)।
आरेख में, पहले आपके पास एक जड़ है znodeद्वारा अलग किया गया "/"। रूट के तहत, आपके पास दो तार्किक नाम स्थान हैंconfig तथा workers।
config नाम स्थान का उपयोग केंद्रीकृत कॉन्फ़िगरेशन प्रबंधन और के लिए किया जाता है workers नामकरण का उपयोग नामकरण के लिए किया जाता है।
के अंतर्गत confignamespace, प्रत्येक znode 1MB डेटा तक स्टोर कर सकता है। यह UNIX फाइल सिस्टम के समान है सिवाय इसके कि पैरेंट ज़ेनोड डेटा को भी स्टोर कर सकता है। इस संरचना का मुख्य उद्देश्य सिंक्रनाइज़ डेटा को स्टोर करना और ज़नोड के मेटाडेटा का वर्णन करना है। इस संरचना को कहा जाता हैZooKeeper Data Model।
चिड़ियाघरकीपर डेटा मॉडल में हर ज़नोड एक बनाए रखता है statसंरचना। एक स्टेट बस प्रदान करता हैmetadataएक ज़नोड का। इसमें वर्जन नंबर, एक्शन कंट्रोल लिस्ट (ACL), टाइमस्टैम्प और डेटा की लंबाई शामिल है।
Version number- हर znode का एक वर्जन नंबर होता है, जिसका मतलब है कि हर बार जब znode से जुड़े डेटा में बदलाव होता है, तो उसके संबंधित वर्जन नंबर में भी बढ़ोतरी होती है। संस्करण संख्या का उपयोग महत्वपूर्ण है जब एक से अधिक ज़ुकेर क्लाइंट एक ही ज़्नोड पर संचालन करने की कोशिश कर रहे हैं।
Action Control List (ACL)- ACL मूल रूप से znode तक पहुँचने के लिए एक प्रमाणीकरण तंत्र है। यह सभी znode को पढ़ने और लिखने के संचालन को नियंत्रित करता है।
Timestamp- टाइमस्टैम्प ज़्नोड निर्माण और संशोधन से बीता समय का प्रतिनिधित्व करता है। यह आमतौर पर मिलीसेकंड में दर्शाया जाता है। ज़ूकीपर “ट्रांजेक्शन आईडी” (zxid) से ज़नोड्स के लिए हर परिवर्तन की पहचान करता है।Zxid अद्वितीय है और प्रत्येक लेनदेन के लिए समय बनाए रखता है ताकि आप एक अनुरोध से दूसरे अनुरोध पर गुजरे समय को आसानी से पहचान सकें।
Data length- एक znode में संग्रहीत डेटा की कुल मात्रा डेटा की लंबाई है। आप अधिकतम 1MB डेटा स्टोर कर सकते हैं।
Znodes के प्रकार
Znodes को दृढ़ता, अनुक्रमिक और अल्पकालिक के रूप में वर्गीकृत किया गया है।
Persistence znode- ग्राहक के बाद भी ज़िन्दगी ज़न्नत जिंदा है, जिसने उस ख़ास ज़न्नत को बनाया, उसे काट दिया गया। डिफ़ॉल्ट रूप से, जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, तब तक सभी ज़ेनोड लगातार बने रहते हैं।
Ephemeral znode- जब तक ग्राहक जीवित न हो, तब तक पंचांग शून्य सक्रिय रहता है। जब एक ग्राहक को ज़ूकिर पहनावा से अलग कर दिया जाता है, तो पंचांग znodes स्वचालित रूप से हटा दिए जाते हैं। इस कारण से, केवल पंचांग znodes को आगे बच्चे पैदा करने की अनुमति नहीं है। यदि एक पंचांग znode हटा दिया जाता है, तो अगला उपयुक्त नोड इसकी स्थिति को भर देगा। लीडर चुनाव में एपेमरल ज़नॉड्स महत्वपूर्ण भूमिका निभाते हैं।
Sequential znode- अनुक्रमिक znodes या तो लगातार या अल्पकालिक हो सकते हैं। जब एक नया znode एक क्रमिक znode के रूप में बनाया जाता है, तो चिड़ियाघरकीपर मूल नाम के लिए 10 अंकों के अनुक्रम संख्या को जोड़कर znode का पथ निर्धारित करता है। उदाहरण के लिए, यदि पथ के साथ एक ज़्नोड/myapp एक अनुक्रमिक ज़नोड के रूप में बनाया गया है, ज़ूकिपर पथ को बदल देगा /myapp0000000001और अगले क्रम संख्या को 0000000002 के रूप में सेट करें। यदि दो क्रमिक ज़ोन समवर्ती रूप से बनाए जाते हैं, तो ज़ूकीपर कभी भी प्रत्येक ज़ोनोड के लिए समान संख्या का उपयोग नहीं करता है। अनुक्रमिक znodes लॉकिंग और सिंक्रोनाइज़ेशन में एक महत्वपूर्ण भूमिका निभाते हैं।
सत्र
चिड़ियाघर कीपर के संचालन के लिए सत्र बहुत महत्वपूर्ण हैं। एक सत्र में अनुरोधों को एफआईएफओ के आदेश में निष्पादित किया जाता है। एक बार जब कोई क्लाइंट किसी सर्वर से जुड़ जाता है, तो सत्र स्थापित हो जाएगा और एsession id ग्राहक को सौंपा गया है।
ग्राहक भेजता है heartbeatsसत्र को मान्य रखने के लिए किसी विशेष समय अंतराल पर। यदि ZooKeeper कलाकारों की टुकड़ी सेवा की शुरुआत में निर्दिष्ट अवधि (सत्र टाइमआउट) से अधिक के लिए एक ग्राहक से दिल की धड़कन प्राप्त नहीं करता है, तो यह तय करता है कि ग्राहक की मृत्यु हो गई।
आमतौर पर सत्र के समय को मिलीसेकंड में दर्शाया जाता है। जब किसी कारण से सत्र समाप्त हो जाता है, तो उस सत्र के दौरान बनाए गए पंचांग शून्य भी नष्ट हो जाते हैं।
घड़ियों
ज़ूकीपर पहनावे में बदलाव के बारे में सूचनाएँ प्राप्त करने के लिए ग्राहक के लिए घड़ियाँ एक सरल प्रणाली है। ग्राहक एक विशेष znode पढ़ते समय घड़ियों को सेट कर सकते हैं। वॉच किसी भी ज़नोड (जिस पर क्लाइंट रजिस्टर होता है) में बदलाव के लिए रजिस्टर्ड क्लाइंट को एक नोटिफिकेशन भेजते हैं।
Znode परिवर्तन znode से संबंधित डेटा का संशोधन या znode के बच्चों में परिवर्तन हैं। घड़ियाँ केवल एक बार चालू होती हैं। यदि कोई ग्राहक फिर से एक अधिसूचना चाहता है, तो उसे दूसरे रीड ऑपरेशन के माध्यम से किया जाना चाहिए। जब कनेक्शन सत्र समाप्त हो जाता है, तो क्लाइंट को सर्वर से डिस्कनेक्ट कर दिया जाएगा और संबंधित घड़ियों को भी हटा दिया जाएगा।
एक बार एक चिड़ियाघर कीपर पहनावा शुरू होने के बाद, यह ग्राहकों के जुड़ने का इंतजार करेगा। ज़ूकीपर पहनावा में ग्राहक एक नोड से जुड़ेंगे। यह एक नेता या अनुयायी नोड हो सकता है। क्लाइंट से कनेक्ट होने के बाद, नोड विशेष क्लाइंट को एक सत्र आईडी प्रदान करता है और क्लाइंट को एक पावती भेजता है। यदि क्लाइंट को एक पावती नहीं मिलती है, तो यह केवल ज़ूकिपर पहनावा में एक और नोड को जोड़ने की कोशिश करता है। एक बार एक नोड से जुड़ा होने के बाद, ग्राहक एक नियमित अंतराल में नोड को दिल की धड़कन भेज देगा ताकि यह सुनिश्चित हो सके कि कनेक्शन खो नहीं गया है।
If a client wants to read a particular znode, यह भेजता है read requestनोड नोड के साथ znode पथ और नोड अनुरोधित znode को अपने डेटाबेस से प्राप्त करके वापस करता है। इस कारण से, चिड़ियाघर कीपर पहनावे में रीड्स तेज हैं।
If a client wants to store data in the ZooKeeper ensemble, यह सर्वर को znode पथ और डेटा भेजता है। कनेक्टेड सर्वर लीडर के पास रिक्वेस्ट फॉरवर्ड करेगा और फिर लीडर सभी फॉलोअर्स को राइटिंग रिक्वेस्ट दोबारा करेगा। यदि केवल अधिकांश नोड्स सफलतापूर्वक जवाब देते हैं, तो लेखन अनुरोध सफल होगा और क्लाइंट को एक सफल रिटर्न कोड भेजा जाएगा। अन्यथा, लिखित अनुरोध विफल हो जाएगा। नोड्स के सख्त बहुमत को कहा जाता हैQuorum।
एक चिड़ियाघर कीपर में इकट्ठा नोड्स
आइए हम ZooKeeper कलाकारों की टुकड़ी में विभिन्न संख्या में नोड्स के प्रभाव का विश्लेषण करते हैं।
अगर हमारे पास है a single node, तब ज़ूकेर फ़ेंक फेल हो जाता है जब वह नोड विफल हो जाता है। यह "असफलता के एकल बिंदु" में योगदान देता है और इसे उत्पादन वातावरण में अनुशंसित नहीं किया जाता है।
अगर हमारे पास है two nodes और एक नोड विफल रहता है, हमारे पास बहुमत नहीं है, क्योंकि दो में से एक बहुमत नहीं है।
अगर हमारे पास है three nodesऔर एक नोड विफल रहता है, हमारे पास बहुमत है और इसलिए, यह न्यूनतम आवश्यकता है। यह एक ज़ूकेर कलाकारों की टुकड़ी के लिए एक लाइव उत्पादन वातावरण में कम से कम तीन नोड्स होना अनिवार्य है।
अगर हमारे पास है four nodesऔर दो नोड्स विफल हो जाते हैं, यह फिर से विफल हो जाता है और यह तीन नोड्स होने के समान है। अतिरिक्त नोड किसी भी उद्देश्य की पूर्ति नहीं करता है और इसलिए, विषम संख्याओं, जैसे, 3, 5, 7 में नोड्स जोड़ना बेहतर है।
हम जानते हैं कि ज़ूकीपर पहनावा में एक पढ़ने की प्रक्रिया की तुलना में एक लेखन प्रक्रिया महंगी है, क्योंकि सभी नोड्स को अपने डेटाबेस में समान डेटा लिखने की आवश्यकता होती है। इसलिए, संतुलित वातावरण के लिए बड़ी संख्या में नोड्स की तुलना में नोड्स (3, 5 या 7) की संख्या कम होना बेहतर है।
निम्नलिखित चित्र में चिड़ियाघर कीपर वर्कफ़्लो को दर्शाया गया है और बाद की तालिका इसके विभिन्न घटकों की व्याख्या करती है।
अंग | विवरण |
---|---|
लिखो | नेता नोड द्वारा लिखी गई प्रक्रिया को नियंत्रित किया जाता है। नेता सभी ज़नोड्स के लिए अनुरोध का अनुरोध करता है और ज़नोड्स के उत्तर की प्रतीक्षा करता है। यदि आधी राशि उत्तर देती है, तो लिखने की प्रक्रिया पूरी हो जाती है। |
पढ़ें | किसी विशिष्ट कनेक्टेड ज़ोनोड द्वारा आंतरिक रूप से रीड्स किए जाते हैं, इसलिए क्लस्टर के साथ बातचीत करने की कोई आवश्यकता नहीं है। |
प्रतिकृति डेटाबेस | इसका उपयोग zookeeper में डेटा को स्टोर करने के लिए किया जाता है। हर znode का अपना डेटाबेस होता है और हर znode के पास हर बार एक ही डेटा होता है, जिसमें स्थिरता की मदद होती है। |
नेता | लीडर ज़नोड है जो लिखने के अनुरोधों को संसाधित करने के लिए जिम्मेदार है। |
अनुगामी | अनुयायियों को ग्राहकों से लिखित अनुरोध प्राप्त होते हैं और उन्हें लीडर ज़नोड के पास भेज दिया जाता है। |
प्रोसेसर का अनुरोध करें | केवल नेता नोड में प्रस्तुत करें। यह अनुयायी नोड से अनुरोधों को नियंत्रित करता है। |
परमाणु प्रसारण | लीडर नोड से अनुयायी नोड्स में परिवर्तन प्रसारित करने के लिए जिम्मेदार। |
आइए हम विश्लेषण करें कि एक ज़ूकेर पहनावा में एक नेता नोड को कैसे चुना जा सकता है। विचार करें कि क्या हैंNएक क्लस्टर में नोड्स की संख्या। नेता चुनाव की प्रक्रिया इस प्रकार है -
सभी नोड्स एक ही पथ के साथ एक अनुक्रमिक, अल्पकालिक ज़नोड बनाते हैं, /app/leader_election/guid_।
चिड़ियाघरकीपर पहनावा 10-अंकीय अनुक्रम संख्या को पथ पर जोड़ देगा और बनाया गया ज़नोड होगा /app/leader_election/guid_0000000001, /app/leader_election/guid_0000000002, आदि।
किसी दिए गए उदाहरण के लिए, नोड जो ज़न्नोड में सबसे छोटी संख्या बनाता है वह नेता बन जाता है और अन्य सभी नोड अनुयायी होते हैं।
प्रत्येक अनुयायी नोड अगले सबसे छोटी संख्या वाले znode को देखता है। उदाहरण के लिए, नोड जो ज़नोड बनाता है/app/leader_election/guid_0000000008 znode देखेगा /app/leader_election/guid_0000000007 और नोड जो znode बनाता है /app/leader_election/guid_0000000007 znode देखेगा /app/leader_election/guid_0000000006.
यदि नेता नीचे चला जाता है, तो उसके संबंधित znode /app/leader_electionN नष्ट हो जाता है।
लीडर को हटाने के बारे में लाइन फॉलोअर नोड में अगली को चौकीदार के माध्यम से सूचना मिलेगी।
अगली पंक्ति अनुयायी नोड में यह जांच करेगा कि क्या सबसे छोटी संख्या के साथ अन्य शून्य हैं। यदि कोई नहीं है, तो यह नेता की भूमिका ग्रहण करेगा। अन्यथा, यह नोड को खोजता है जिसने नेता के रूप में सबसे छोटी संख्या के साथ znode बनाया है।
इसी तरह, अन्य सभी फॉलोअर नोड्स नोड का चुनाव करते हैं जिसने लीडर के रूप में सबसे छोटी संख्या के साथ ज़नोड बनाया।
नेता चुनाव एक जटिल प्रक्रिया है जब यह खरोंच से किया जाता है। लेकिन चिड़ियाघर कीपर सेवा इसे बहुत सरल बनाती है। आइए हम अगले अध्याय में विकास के उद्देश्य के लिए ज़ूकीपर की स्थापना के लिए आगे बढ़ते हैं।
चिड़ियाघरकीपर को स्थापित करने से पहले, सुनिश्चित करें कि आपका सिस्टम निम्नलिखित में से किसी भी ऑपरेटिंग सिस्टम पर चल रहा है -
Any of Linux OS- विकास और तैनाती का समर्थन करता है। यह डेमो अनुप्रयोगों के लिए पसंद किया जाता है।
Windows OS - केवल विकास का समर्थन करता है।
Mac OS - केवल विकास का समर्थन करता है।
ज़ूकीपर सर्वर जावा में बनाया गया है और यह जेवीएम पर चलता है। आपको JDK 6 या अधिक से अधिक का उपयोग करने की आवश्यकता है।
अब, अपने मशीन पर ZooKeeper फ्रेमवर्क स्थापित करने के लिए नीचे दिए गए चरणों का पालन करें।
चरण 1: जावा स्थापना का सत्यापन
हम मानते हैं कि आपके सिस्टम पर पहले से ही जावा वातावरण स्थापित है। बस निम्न कमांड का उपयोग करके इसे सत्यापित करें।
$ java -version
यदि आपने जावा को अपनी मशीन पर स्थापित किया है, तो आप स्थापित जावा का संस्करण देख सकते हैं। अन्यथा, जावा के नवीनतम संस्करण को स्थापित करने के लिए नीचे दिए गए सरल चरणों का पालन करें।
चरण 1.1: JDK डाउनलोड करें
निम्नलिखित लिंक पर जाकर JDK का नवीनतम संस्करण डाउनलोड करें और नवीनतम संस्करण डाउनलोड करें। जावा
नवीनतम संस्करण (इस ट्यूटोरियल को लिखते समय) JDK 8u 60 है और फ़ाइल "jdk-8u60-linuxx64.tar.gz" है। कृपया अपनी मशीन पर फ़ाइल डाउनलोड करें।
चरण 1.2: फ़ाइलों को निकालें
आम तौर पर, फ़ाइलों को डाउनलोड किया जाता है downloadsफ़ोल्डर। इसे सत्यापित करें और निम्न आदेशों का उपयोग करके टार सेटअप निकालें।
$ cd /go/to/download/path
$ tar -zxf jdk-8u60-linux-x64.gz
चरण 1.3: ऑप्ट डायरेक्टरी में जाएं
जावा को सभी उपयोगकर्ताओं के लिए उपलब्ध कराने के लिए, निकाले गए जावा सामग्री को "/ usr / स्थानीय / जावा" फ़ोल्डर में ले जाएँ।
$ su
password: (type password of root user)
$ mkdir /opt/jdk $ mv jdk-1.8.0_60 /opt/jdk/
चरण १.४: पथ निर्धारित करें
पथ और JAVA_HOME चर सेट करने के लिए, ~ / .bashrc फ़ाइल में निम्न कमांड जोड़ें।
export JAVA_HOME = /usr/jdk/jdk-1.8.0_60
export PATH=$PATH:$JAVA_HOME/bin
अब, वर्तमान चल रहे सिस्टम में सभी परिवर्तनों को लागू करें।
$ source ~/.bashrc
चरण 1.5: जावा विकल्प
जावा विकल्प को बदलने के लिए निम्न कमांड का उपयोग करें।
update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.8.0_60/bin/java 100
चरण १.६
सत्यापन आदेश का उपयोग करके जावा इंस्टॉलेशन की पुष्टि करें (java -version) चरण 1 में समझाया गया।
चरण 2: चिड़ियाघर कीपर फ्रेमवर्क स्थापना
चरण 2.1: चिड़ियाघरकीपर डाउनलोड करें
अपनी मशीन पर चिड़ियाघरकीपर फ्रेमवर्क स्थापित करने के लिए, निम्न लिंक पर जाएं और चिड़ियाघरकीपर का नवीनतम संस्करण डाउनलोड करें। http://zookeeper.apache.org/releases.html
अब तक, ज़ूकीपर का नवीनतम संस्करण 3.4.6 (ज़ूकिपर-3.4.6.tar.gz) है।
चरण 2.2: टार फ़ाइल को निकालें
निम्न आदेशों का उपयोग करके टार फ़ाइल निकालें -
$ cd opt/
$ tar -zxf zookeeper-3.4.6.tar.gz $ cd zookeeper-3.4.6
$ mkdir data
चरण 2.3: कॉन्फ़िगरेशन फ़ाइल बनाएँ
नाम की कॉन्फ़िगरेशन फ़ाइल खोलें conf/zoo.cfg कमांड का उपयोग करना vi conf/zoo.cfg और प्रारंभिक बिंदु के रूप में स्थापित करने के लिए सभी निम्नलिखित पैरामीटर।
$ vi conf/zoo.cfg
tickTime = 2000
dataDir = /path/to/zookeeper/data
clientPort = 2181
initLimit = 5
syncLimit = 2
एक बार कॉन्फ़िगरेशन फ़ाइल सफलतापूर्वक सहेज ली गई है, फिर से टर्मिनल पर लौटें। अब आप zookeeper सर्वर शुरू कर सकते हैं।
चरण 2.4: ज़ूकीपर सर्वर शुरू करें
निम्नलिखित आदेश निष्पादित करें -
$ bin/zkServer.sh start
इस कमांड को निष्पादित करने के बाद, आपको निम्नानुसार प्रतिक्रिया मिलेगी -
$ JMX enabled by default
$ Using config: /Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg $ Starting zookeeper ... STARTED
चरण 2.5: सीएलआई शुरू करें
निम्न कमांड टाइप करें -
$ bin/zkCli.sh
उपरोक्त कमांड टाइप करने के बाद, आप ZooKeeper सर्वर से कनेक्ट हो जाएंगे और आपको निम्न प्रतिक्रिया मिलनी चाहिए।
Connecting to localhost:2181
................
................
................
Welcome to ZooKeeper!
................
................
WATCHER::
WatchedEvent state:SyncConnected type: None path:null
[zk: localhost:2181(CONNECTED) 0]
बंद करें ZooKeeper सर्वर
सर्वर से कनेक्ट करने और सभी ऑपरेशन करने के बाद, आप निम्न आदेश का उपयोग करके ज़ूकीपर सर्वर को रोक सकते हैं।
$ bin/zkServer.sh stop
चिड़ियाघर कीपर कमांड लाइन इंटरफेस (सीएलआई) का उपयोग विकास के उद्देश्य के लिए चिड़ियाघर कीपर पहनावे के साथ बातचीत करने के लिए किया जाता है। यह डिबगिंग और विभिन्न विकल्पों के साथ काम करने के लिए उपयोगी है।
ज़ूकेरियर सीएलआई ऑपरेशन करने के लिए, पहले अपने ज़ूकेर सर्वर ( “बिन / zkServer.sh start” ) को चालू करें और फिर, चिड़ियाघर कीपर क्लाइंट ( “बिन / zkCli.sh” ) को चालू करें । एक बार क्लाइंट शुरू होने के बाद, आप निम्नलिखित ऑपरेशन कर सकते हैं -
- Znodes बनाएँ
- डेटा प्राप्त करें
- परिवर्तनों के लिए ज़नोड देखें
- डेटा सेट करें
- एक znode के बच्चे बनाएँ
- एक znode के बच्चों की सूची बनाएं
- अवस्था जांच
- एक znode निकालें / हटाएं
अब एक उदाहरण के साथ एक के बाद एक कमांड देखें।
Znodes बनाएँ
दिए गए पथ के साथ एक znode बनाएं। flagतर्क निर्दिष्ट करता है कि क्या बनाया गया शून्य अल्पकालिक, लगातार या अनुक्रमिक होगा। डिफ़ॉल्ट रूप से, सभी znodes लगातार हैं।
Ephemeral znodes (झंडा: ई) सत्र समाप्त होने पर या ग्राहक के डिस्कनेक्ट होने पर स्वचालित रूप से हटा दिया जाएगा।
Sequential znodes गारंटी है कि ज़नोड पथ अद्वितीय होगा।
ज़ूकिपर पहनावा ज़्नोड पथ पर 10 अंकों की गद्दी के साथ अनुक्रम संख्या जोड़ देगा। उदाहरण के लिए, znode path / myapp को / myapp0000000001 में बदल दिया जाएगा और अगला क्रम संख्या / myapp0000000002 होगा । यदि कोई झंडे निर्दिष्ट नहीं हैं, तो ज़नोड को माना जाता हैpersistent।
वाक्य - विन्यास
create /path /data
नमूना
create /FirstZnode “Myfirstzookeeper-app”
उत्पादन
[zk: localhost:2181(CONNECTED) 0] create /FirstZnode “Myfirstzookeeper-app”
Created /FirstZnode
बनाने के लिए Sequential znode, जोड़ें -s flag जैसा की नीचे दिखाया गया।
वाक्य - विन्यास
create -s /path /data
नमूना
create -s /FirstZnode second-data
उत्पादन
[zk: localhost:2181(CONNECTED) 2] create -s /FirstZnode “second-data”
Created /FirstZnode0000000023
बनाने के लिए ए Ephemeral Znode, जोड़ें -e flag जैसा की नीचे दिखाया गया।
वाक्य - विन्यास
create -e /path /data
नमूना
create -e /SecondZnode “Ephemeral-data”
उत्पादन
[zk: localhost:2181(CONNECTED) 2] create -e /SecondZnode “Ephemeral-data”
Created /SecondZnode
याद रखें कि जब क्लाइंट कनेक्शन खो जाता है, तो पंचांग शून्य हटा दिया जाएगा। आप ज़ूकीर सीएलआई को छोड़ कर और फिर सीएलआई को खोलकर इसे आज़मा सकते हैं।
डेटा प्राप्त करें
यह znode और मेटाडेटा के निर्दिष्ट znode के संबंधित डेटा को लौटाता है। आपको जानकारी मिल जाएगी जैसे कि डेटा अंतिम बार संशोधित किया गया था, जहां इसे संशोधित किया गया था, और डेटा के बारे में जानकारी। इस सीएलआई का उपयोग डेटा के बारे में अधिसूचना दिखाने के लिए घड़ियों को असाइन करने के लिए भी किया जाता है।
वाक्य - विन्यास
get /path
नमूना
get /FirstZnode
उत्पादन
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode
“Myfirstzookeeper-app”
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x7f
mtime = Tue Sep 29 16:15:47 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 22
numChildren = 0
अनुक्रमिक ज़्नोड तक पहुंचने के लिए, आपको ज़न्नोड के पूर्ण पथ में प्रवेश करना होगा।
नमूना
get /FirstZnode0000000023
उत्पादन
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode0000000023
“Second-data”
cZxid = 0x80
ctime = Tue Sep 29 16:25:47 IST 2015
mZxid = 0x80
mtime = Tue Sep 29 16:25:47 IST 2015
pZxid = 0x80
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 13
numChildren = 0
घड़ी
जब निर्दिष्ट ज़्नोड या ज़नोड के बच्चों के डेटा में परिवर्तन होता है, तो घड़ियाँ एक सूचना दिखाती हैं। आप एक सेट कर सकते हैंwatch में केवल get आदेश।
वाक्य - विन्यास
get /path [watch] 1
नमूना
get /FirstZnode 1
उत्पादन
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode 1
“Myfirstzookeeper-app”
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x7f
mtime = Tue Sep 29 16:15:47 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 22
numChildren = 0
आउटपुट सामान्य के समान है getकमांड, लेकिन यह बैकग्राउंड में znode परिवर्तन की प्रतीक्षा करेगा। <यहां शुरू करें>
डेटा सेट करें
निर्दिष्ट znode का डेटा सेट करें। एक बार जब आप इस सेट ऑपरेशन को पूरा कर लेते हैं, तो आप डेटा का उपयोग करके जाँच कर सकते हैंget CLI कमांड।
वाक्य - विन्यास
set /path /data
नमूना
set /SecondZnode Data-updated
उत्पादन
[zk: localhost:2181(CONNECTED) 1] get /SecondZnode “Data-updated”
cZxid = 0x82
ctime = Tue Sep 29 16:29:50 IST 2015
mZxid = 0x83
mtime = Tue Sep 29 16:29:50 IST 2015
pZxid = 0x82
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x15018b47db00000
dataLength = 14
numChildren = 0
यदि आपने सौंपा watch में विकल्प get कमांड (पिछली कमांड के अनुसार), तो आउटपुट नीचे दिखाए अनुसार समान होगा -
उत्पादन
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode “Mysecondzookeeper-app”
WATCHER: :
WatchedEvent state:SyncConnected type:NodeDataChanged path:/FirstZnode
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x84
mtime = Tue Sep 29 17:14:47 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 23
numChildren = 0
बच्चे / सब-ज़नोड बनाएं
बच्चे पैदा करना नए ज़न्नत बनाने के समान है। अंतर केवल इतना है कि चाइल्ड ज़नोड के मार्ग के साथ-साथ मूल मार्ग भी होगा।
वाक्य - विन्यास
create /parent/path/subnode/path /data
नमूना
create /FirstZnode/Child1 firstchildren
उत्पादन
[zk: localhost:2181(CONNECTED) 16] create /FirstZnode/Child1 “firstchildren”
created /FirstZnode/Child1
[zk: localhost:2181(CONNECTED) 17] create /FirstZnode/Child2 “secondchildren”
created /FirstZnode/Child2
बच्चों की सूची दें
इस कमांड का उपयोग सूची और प्रदर्शित करने के लिए किया जाता है children एक ज़नोड का।
वाक्य - विन्यास
ls /path
नमूना
ls /MyFirstZnode
उत्पादन
[zk: localhost:2181(CONNECTED) 2] ls /MyFirstZnode
[mysecondsubnode, myfirstsubnode]
अवस्था जांच
Statusएक निर्दिष्ट znode के मेटाडेटा का वर्णन करता है। इसमें टाइमस्टैम्प, संस्करण संख्या, एसीएल, डेटा लंबाई और चिल्ड्रन ज़्नोड जैसे विवरण शामिल हैं।
वाक्य - विन्यास
stat /path
नमूना
stat /FirstZnode
उत्पादन
[zk: localhost:2181(CONNECTED) 1] stat /FirstZnode
cZxid = 0x7f
ctime = Tue Sep 29 16:15:47 IST 2015
mZxid = 0x7f
mtime = Tue Sep 29 17:14:24 IST 2015
pZxid = 0x7f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 23
numChildren = 0
एक Znode निकालें
एक निर्दिष्ट znode निकालता है और अपने सभी बच्चों को पुनरावृत्ति करता है। ऐसा तभी होगा जब इस तरह का ज़नोड उपलब्ध होगा।
वाक्य - विन्यास
rmr /path
नमूना
rmr /FirstZnode
उत्पादन
[zk: localhost:2181(CONNECTED) 10] rmr /FirstZnode
[zk: localhost:2181(CONNECTED) 11] get /FirstZnode
Node does not exist: /FirstZnode
हटाएं (delete /path) कमांड के समान है remove आदेश, इस तथ्य को छोड़कर कि यह बिना बच्चों वाले केवल ज़ोन्ड पर काम करता है।
चिड़ियाघरकीपर के पास जावा और सी के लिए एक आधिकारिक एपीआई बाइंडिंग है। चिड़ियाघरकीपर समुदाय अधिकांश भाषाओं (.NET, अजगर, आदि) के लिए अनौपचारिक एपीआई प्रदान करता है। चिड़ियाघरकीपर एपीआई का उपयोग करना, एक एप्लिकेशन कनेक्ट कर सकता है, बातचीत कर सकता है, डेटा में हेरफेर कर सकता है, समन्वय कर सकता है, और अंत में एक चिड़ियाघर कीपर पहनावा से डिस्कनेक्ट कर सकता है।
ज़ूकीपर एपीआई में एक सरल और सुरक्षित तरीके से ज़ूकेर पहनावे की सभी कार्यक्षमता प्राप्त करने के लिए सुविधाओं का एक समृद्ध सेट है। चिड़ियाघरकीपर एपीआई तुल्यकालिक और अतुल्यकालिक दोनों तरीके प्रदान करता है।
ज़ूकीपर पहनावा और ज़ूकीपर एपीआई पूरी तरह से हर पहलू में एक दूसरे के पूरक हैं और यह डेवलपर्स को शानदार तरीके से लाभान्वित करते हैं। आइए इस अध्याय में जावा बाइंडिंग पर चर्चा करते हैं।
चिड़ियाघरकीपर एपीआई की मूल बातें
ZooKeeper कलाकारों की टुकड़ी के साथ बातचीत के रूप में आवेदन किया जाता है ZooKeeper Client या केवल Client।
ज़्नोड ज़ूकेर पहनावा का मुख्य घटक है और ज़ूकेदार एपीआई ज़ूकोड के सभी विवरणों में हेरफेर करने के लिए तरीकों का एक छोटा सा सेट प्रदान करता है।
एक ग्राहक को नीचे दिए गए चरणों का पालन करना चाहिए ताकि चिड़ियाघरकीपर पहनावा के साथ एक स्पष्ट और स्वच्छ बातचीत हो।
ज़ूकिपर पहनावा से कनेक्ट करें। ZooKeeper कलाकारों की टुकड़ी ग्राहक के लिए एक सत्र आईडी असाइन करें।
समय-समय पर सर्वर को दिल की धड़कन भेजें। अन्यथा, ज़ूकीपर की टुकड़ी सत्र आईडी को समाप्त कर देती है और ग्राहक को फिर से कनेक्ट करने की आवश्यकता होती है।
जब तक सत्र ID सक्रिय है, तब तक ज़नोड्स प्राप्त / सेट करें।
एक बार सभी कार्य पूर्ण हो जाने के बाद, ज़ूकीपर पहनावा से डिस्कनेक्ट करें। यदि क्लाइंट लंबे समय तक निष्क्रिय है, तो ज़ूकेपर पहनावा स्वचालित रूप से ग्राहक को डिस्कनेक्ट कर देगा।
जावा बाइंडिंग
आइए इस अध्याय में ज़ूकीपर एपीआई के सबसे महत्वपूर्ण सेट को समझें। चिड़ियाघरकीपर एपीआई का केंद्रीय हिस्सा हैZooKeeper class। यह अपने कंस्ट्रक्टर में ज़ूकेर पहनावा को जोड़ने के लिए विकल्प प्रदान करता है और इसके निम्नलिखित तरीके हैं -
connect - ज़ूकिपर पहनावा से कनेक्ट करें
create - एक znode बनाएँ
exists - जाँच करें कि क्या एक znode मौजूद है और इसकी जानकारी
getData - एक विशेष znode से डेटा प्राप्त करें
setData - एक विशेष ज़्नोड में डेटा सेट करें
getChildren - सभी उप-नोड्स को एक विशेष शून्य में उपलब्ध कराएं
delete - एक विशेष znode और उसके सभी बच्चों को प्राप्त करें
close - एक कनेक्शन बंद करें
ज़ूकिपर एनसेंबल से कनेक्ट करें
चिड़ियाघरकीपर वर्ग अपने कंस्ट्रक्टर के माध्यम से कनेक्शन की कार्यक्षमता प्रदान करता है। निर्माणकर्ता के हस्ताक्षर इस प्रकार हैं -
ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
कहाँ पे,
connectionString - ज़ूकीपर मेजबान की तरह।
sessionTimeout - मिलीसेकंड में सत्र का समय।
watcher- "वॉचर" इंटरफ़ेस को लागू करने वाली एक वस्तु। चिड़ियाघर कीपर पहरेदार वस्तु के माध्यम से कनेक्शन की स्थिति देता है।
हम एक नया सहायक वर्ग बनाते हैं ZooKeeperConnection और एक विधि जोड़ें connect। connect विधि एक ZooKeeper ऑब्जेक्ट बनाता है, ZooKeeper कलाकारों की टुकड़ी से जोड़ता है, और फिर ऑब्जेक्ट को वापस करता है।
यहाँ CountDownLatch मुख्य प्रक्रिया को रोकने के लिए प्रयोग किया जाता है (रुको) जब तक कि ग्राहक चिड़ियाघरकीपर पहनावा से न जुड़ जाए।
चिड़ियाघरकीपर पहनावा कनेक्शन की स्थिति के माध्यम से जवाब देता है Watcher callback। एक बार जब ग्राहक ZooKeeper कलाकारों की टुकड़ी के साथ जुड़ता है और वॉकर कॉलबैक कॉल को कॉल करता है, तो वॉचर कॉलबैक कहा जाएगाcountDown की विधि CountDownLatch ताला जारी करने के लिए, await मुख्य प्रक्रिया में।
यहाँ एक चिड़ियाघर कीपर पहनावे के साथ जुड़ने का पूरा कोड है।
कोडिंग: ZooKeeperConnection.java
// import java classes
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
// import zookeeper classes
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.data.Stat;
public class ZooKeeperConnection {
// declare zookeeper instance to access ZooKeeper ensemble
private ZooKeeper zoo;
final CountDownLatch connectedSignal = new CountDownLatch(1);
// Method to connect zookeeper ensemble.
public ZooKeeper connect(String host) throws IOException,InterruptedException {
zoo = new ZooKeeper(host,5000,new Watcher() {
public void process(WatchedEvent we) {
if (we.getState() == KeeperState.SyncConnected) {
connectedSignal.countDown();
}
}
});
connectedSignal.await();
return zoo;
}
// Method to disconnect from zookeeper server
public void close() throws InterruptedException {
zoo.close();
}
}
उपरोक्त कोड को सहेजें और इसका उपयोग अगले अनुभाग में चिड़ियाघरकीपर पहनावा को जोड़ने के लिए किया जाएगा।
एक Znode बनाएँ
चिड़ियाघरकीपर वर्ग प्रदान करता है create methodचिड़ियाघरकीपर पहनावा में एक नया ज़नोड बनाने के लिए। के हस्ताक्षरcreate विधि इस प्रकार है -
create(String path, byte[] data, List<ACL> acl, CreateMode createMode)
कहाँ पे,
path- ज़नोड मार्ग। उदाहरण के लिए, / myapp1, / myapp2, / myapp1 / mydata1, myapp2 / mydata1 / myanothersubdata
data - निर्दिष्ट ज़ोनोड पथ में संग्रहीत करने के लिए डेटा
acl- बनाए जाने वाले नोड की एक्सेस कंट्रोल लिस्ट। चिड़ियाघरकीपर एपीआई एक स्थिर इंटरफ़ेस प्रदान करता हैZooDefs.Idsकुछ बुनियादी एसएल सूची प्राप्त करने के लिए। उदाहरण के लिए, ZooDefs.Ids.OPEN_ACL_UNSAFE खुले ज़नॉड्स के लिए acl की सूची देता है।
createMode- नोड का प्रकार, या तो अल्पकालिक, अनुक्रमिक, या दोनों। यह एकenum।
चेक करने के लिए एक नया जावा एप्लिकेशन बनाते हैं createचिड़ियाघरकीपर एपीआई की कार्यक्षमता। एक फ़ाइल बनाएँZKCreate.java। मुख्य विधि में, प्रकार की एक वस्तु बनाएंZooKeeperConnection और कॉल करें connect ज़ूकीपर पहनावा से जुड़ने की विधि।
कनेक्ट विधि चिड़ियाघरकीपर वस्तु को वापस कर देगी zk। अब, कॉल करेंcreate उसकि विधि zk कस्टम के साथ वस्तु path तथा data।
एक znode बनाने के लिए पूरा कार्यक्रम कोड निम्नानुसार है -
कोडिंग: ZKCreate.java
import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs;
public class ZKCreate {
// create static instance for zookeeper class.
private static ZooKeeper zk;
// create static instance for ZooKeeperConnection class.
private static ZooKeeperConnection conn;
// Method to create znode in zookeeper ensemble
public static void create(String path, byte[] data) throws
KeeperException,InterruptedException {
zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
public static void main(String[] args) {
// znode path
String path = "/MyFirstZnode"; // Assign path to znode
// data in byte array
byte[] data = "My first zookeeper app”.getBytes(); // Declare data
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
create(path, data); // Create the data to the specified path
conn.close();
} catch (Exception e) {
System.out.println(e.getMessage()); //Catch error message
}
}
}
एक बार आवेदन को संकलित करने और निष्पादित करने के बाद, चिड़ियाघरकीपर पहनावा में निर्दिष्ट डेटा वाला एक ज़ोनोड बनाया जाएगा। आप चिड़ियाघरकीपर सीएलआई का उपयोग करके इसकी जांच कर सकते हैंzkCli.sh।
cd /path/to/zookeeper
bin/zkCli.sh
>>> get /MyFirstZnode
अस्तित्ववादी - एक शून्य की अस्तित्व की जाँच करें
चिड़ियाघरकीपर वर्ग प्रदान करता है exists methodएक znode के अस्तित्व की जांच करने के लिए। यह एक znode का मेटाडेटा लौटाता है, यदि निर्दिष्ट znode मौजूद है। के हस्ताक्षरexists विधि इस प्रकार है -
exists(String path, boolean watcher)
कहाँ पे,
path - ज़नोड मार्ग
watcher - बूलियन मान निर्दिष्ट ज़ोनोड देखने के लिए या नहीं
आइए हम एक नया जावा एप्लिकेशन बनाते हैं, जो चिड़ियाघर कीपर एपीआई की "मौजूद" कार्यक्षमता की जांच करता है। एक फ़ाइल "ZKExists.java" बनाएँ । मुख्य विधि में, चिड़ियाघर संचालक वस्तु, बनाने "ZK" का उपयोग कर "ZooKeeperConnection" वस्तु। फिर, कस्टम "पथ" के साथ "zk" ऑब्जेक्ट की "मौजूद" पद्धति को कॉल करें । पूरी लिस्टिंग इस प्रकार है -
कोडिंग: ZKExists.java
import java.io.IOException;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.data.Stat;
public class ZKExists {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to check existence of znode and its status, if znode is available.
public static Stat znode_exists(String path) throws
KeeperException,InterruptedException {
return zk.exists(path, true);
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path = "/MyFirstZnode"; // Assign znode to the specified path
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
Stat stat = znode_exists(path); // Stat checks the path of the znode
if(stat != null) {
System.out.println("Node exists and the node version is " +
stat.getVersion());
} else {
System.out.println("Node does not exists");
}
} catch(Exception e) {
System.out.println(e.getMessage()); // Catches error messages
}
}
}
एक बार एप्लिकेशन को संकलित और निष्पादित किया जाता है, तो आपको नीचे आउटपुट मिलेगा।
Node exists and the node version is 1.
getData विधि
चिड़ियाघरकीपर वर्ग प्रदान करता है getDataकिसी निर्दिष्ट ज़नोड और उसकी स्थिति में डेटा संलग्न करने की विधि। के हस्ताक्षरgetData विधि इस प्रकार है -
getData(String path, Watcher watcher, Stat stat)
कहाँ पे,
path - ज़नोड मार्ग।
watcher - कॉलबैक प्रकार का कार्य Watcher। चिड़ियाघरकीपर पहनावा पहरेदार कॉलबैक के माध्यम से सूचित करेगा जब निर्दिष्ट znode का डेटा बदलता है। यह एक बार की अधिसूचना है।
stat - एक ज़नोड का मेटाडेटा लौटाता है।
हमें समझने के लिए एक नया जावा एप्लिकेशन बनाएं getDataचिड़ियाघरकीपर एपीआई की कार्यक्षमता। एक फ़ाइल बनाएँZKGetData.java। मुख्य विधि में, एक चिड़ियाघर कीपर वस्तु बनाएंzk उसका उपयोग कर रहा है ZooKeeperConnectionवस्तु। फिर, कॉल करेंgetData कस्टम पथ के साथ zk वस्तु की विधि।
यहाँ एक निर्दिष्ट नोड से डेटा प्राप्त करने के लिए पूरा कार्यक्रम कोड है -
कोडिंग: ZKGetData.java
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.data.Stat;
public class ZKGetData {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
public static Stat znode_exists(String path) throws
KeeperException,InterruptedException {
return zk.exists(path,true);
}
public static void main(String[] args) throws InterruptedException, KeeperException {
String path = "/MyFirstZnode";
final CountDownLatch connectedSignal = new CountDownLatch(1);
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
Stat stat = znode_exists(path);
if(stat != null) {
byte[] b = zk.getData(path, new Watcher() {
public void process(WatchedEvent we) {
if (we.getType() == Event.EventType.None) {
switch(we.getState()) {
case Expired:
connectedSignal.countDown();
break;
}
} else {
String path = "/MyFirstZnode";
try {
byte[] bn = zk.getData(path,
false, null);
String data = new String(bn,
"UTF-8");
System.out.println(data);
connectedSignal.countDown();
} catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}
}, null);
String data = new String(b, "UTF-8");
System.out.println(data);
connectedSignal.await();
} else {
System.out.println("Node does not exists");
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
एक बार एप्लिकेशन को संकलित और निष्पादित करने के बाद, आपको निम्न आउटपुट मिलेगा
My first zookeeper app
और एप्लिकेशन चिड़ियाघरकीपर पहनावा से आगे की अधिसूचना का इंतजार करेगा। ज़ूकेरियर सीएलआई का उपयोग करके निर्दिष्ट ज़्नोड का डेटा बदलेंzkCli.sh।
cd /path/to/zookeeper
bin/zkCli.sh
>>> set /MyFirstZnode Hello
अब, एप्लिकेशन निम्न आउटपुट प्रिंट करेगा और बाहर निकल जाएगा।
Hello
सेटडाटा विधि
चिड़ियाघरकीपर वर्ग प्रदान करता है setDataएक निर्दिष्ट znode में संलग्न डेटा को संशोधित करने की विधि। के हस्ताक्षरsetData विधि इस प्रकार है -
setData(String path, byte[] data, int version)
कहाँ पे,
path - ज़नोड मार्ग
data - निर्दिष्ट ज़ोनोड पथ में संग्रहीत करने के लिए डेटा।
version- ज़्नोड का वर्तमान संस्करण। जब भी डेटा में बदलाव होता है, ज़ूकेर ज़्नोड के वर्जन नंबर को अपडेट करता है।
आइए अब समझने के लिए एक नया जावा एप्लिकेशन बनाते हैं setDataचिड़ियाघरकीपर एपीआई की कार्यक्षमता। एक फ़ाइल बनाएँZKSetData.java। मुख्य विधि में, एक चिड़ियाघर कीपर वस्तु बनाएंzk का उपयोग करते हुए ZooKeeperConnectionवस्तु। फिर, कॉल करेंsetData उसकि विधि zk निर्दिष्ट पथ, नए डेटा और नोड के संस्करण के साथ ऑब्जेक्ट।
एक निर्दिष्ट ज़नोड में संलग्न डेटा को संशोधित करने के लिए यहां पूरा कार्यक्रम कोड है।
कोड: ZKSetData.java
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import java.io.IOException;
public class ZKSetData {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to update the data in a znode. Similar to getData but without watcher.
public static void update(String path, byte[] data) throws
KeeperException,InterruptedException {
zk.setData(path, data, zk.exists(path,true).getVersion());
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path= "/MyFirstZnode";
byte[] data = "Success".getBytes(); //Assign data which is to be updated.
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
update(path, data); // Update znode data to the specified path
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
एक बार आवेदन को संकलित करने और निष्पादित करने के बाद, निर्दिष्ट ज़नोड का डेटा बदल दिया जाएगा और इसे ज़ूकेटर सीएलआई का उपयोग करके चेक किया जा सकता है, zkCli.sh।
cd /path/to/zookeeper
bin/zkCli.sh
>>> get /MyFirstZnode
getChildrenMethod
चिड़ियाघरकीपर वर्ग प्रदान करता है getChildrenकिसी विशेष क्षेत्र के सभी उप-नोड प्राप्त करने की विधि। के हस्ताक्षरgetChildren विधि इस प्रकार है -
getChildren(String path, Watcher watcher)
कहाँ पे,
path - ज़नोड मार्ग।
watcher- "वॉचर" प्रकार का कॉलबैक फ़ंक्शन। चिड़ियाघरकीपर पहनावा सूचित करेगा जब निर्दिष्ट znode हटा दिया जाता है या znode के तहत एक बच्चा बनाया / हटा दिया जाता है। यह एक बार की अधिसूचना है।
कोडिंग: ZKGetChildren.java
import java.io.IOException;
import java.util.*;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.data.Stat;
public class ZKGetChildren {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to check existence of znode and its status, if znode is available.
public static Stat znode_exists(String path) throws
KeeperException,InterruptedException {
return zk.exists(path,true);
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path = "/MyFirstZnode"; // Assign path to the znode
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
Stat stat = znode_exists(path); // Stat checks the path
if(stat!= null) {
//“getChildren” method- get all the children of znode.It has two
args, path and watch
List <String> children = zk.getChildren(path, false);
for(int i = 0; i < children.size(); i++)
System.out.println(children.get(i)); //Print children's
} else {
System.out.println("Node does not exists");
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
प्रोग्राम चलाने से पहले, आइए हम दो उप-नोड्स बनाते हैं /MyFirstZnode ज़ूकिर CLI का उपयोग करते हुए, zkCli.sh।
cd /path/to/zookeeper
bin/zkCli.sh
>>> create /MyFirstZnode/myfirstsubnode Hi
>>> create /MyFirstZnode/mysecondsubmode Hi
अब, प्रोग्राम को संकलित करने और चलाने के लिए उपरोक्त बनाए गए ज़नॉड्स का उत्पादन होगा।
myfirstsubnode
mysecondsubnode
एक Znode हटाएँ
चिड़ियाघरकीपर वर्ग प्रदान करता है deleteएक निर्दिष्ट znode को हटाने के लिए विधि। के हस्ताक्षरdelete विधि इस प्रकार है -
delete(String path, int version)
कहाँ पे,
path - ज़नोड मार्ग।
version - ज़्नोड का वर्तमान संस्करण।
हमें समझने के लिए एक नया जावा एप्लिकेशन बनाएं deleteचिड़ियाघरकीपर एपीआई की कार्यक्षमता। एक फ़ाइल बनाएँZKDelete.java। मुख्य विधि में, एक चिड़ियाघर कीपर वस्तु बनाएंzk का उपयोग करते हुए ZooKeeperConnectionवस्तु। फिर, कॉल करेंdelete उसकि विधि zk निर्दिष्ट के साथ वस्तु path और नोड का संस्करण।
एक znode को हटाने के लिए पूरा कार्यक्रम कोड इस प्रकार है -
कोडिंग: ZKDelete.java
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.KeeperException;
public class ZKDelete {
private static ZooKeeper zk;
private static ZooKeeperConnection conn;
// Method to check existence of znode and its status, if znode is available.
public static void delete(String path) throws KeeperException,InterruptedException {
zk.delete(path,zk.exists(path,true).getVersion());
}
public static void main(String[] args) throws InterruptedException,KeeperException {
String path = "/MyFirstZnode"; //Assign path to the znode
try {
conn = new ZooKeeperConnection();
zk = conn.connect("localhost");
delete(path); //delete the node with the specified path
} catch(Exception e) {
System.out.println(e.getMessage()); // catches error messages
}
}
}
ज़ुकाइपर वितरित पर्यावरण के लिए एक लचीला समन्वय बुनियादी ढांचा प्रदान करता है। ज़ूकेपर फ्रेमवर्क आज के सर्वश्रेष्ठ औद्योगिक अनुप्रयोगों में से कई का समर्थन करता है। हम इस अध्याय में चिड़ियाघरकीपर के कुछ सबसे उल्लेखनीय अनुप्रयोगों पर चर्चा करेंगे।
याहू!
चिड़ियाघरकीपर फ्रेमवर्क मूल रूप से "याहू!" पर बनाया गया था। एक अच्छी तरह से डिज़ाइन किए गए वितरित एप्लिकेशन को डेटा पारदर्शिता, बेहतर प्रदर्शन, मजबूती, केंद्रीकृत कॉन्फ़िगरेशन और समन्वय जैसी आवश्यकताओं को पूरा करने की आवश्यकता होती है। इसलिए, उन्होंने इन आवश्यकताओं को पूरा करने के लिए चिड़ियाघर कीपर फ्रेमवर्क तैयार किया।
अपाचे होदोप
Apache Hadoop बिग डेटा इंडस्ट्री की ग्रोथ के पीछे की प्रेरणा है। Hadoop कॉन्फ़िगरेशन प्रबंधन और समन्वय के लिए चिड़ियाघरकीपर पर निर्भर करता है। आइए, हमदोप में चिड़ियाघर कीपर की भूमिका को समझने के लिए एक परिदृश्य लें।
मान लें कि ए Hadoop cluster पुलों 100 or more commodity servers। इसलिए, समन्वय और नामकरण सेवाओं की आवश्यकता है। चूंकि बड़ी संख्या में नोड्स की गणना शामिल है, प्रत्येक नोड को एक दूसरे के साथ सिंक्रनाइज़ करने की आवश्यकता होती है, सेवाओं का उपयोग करने के लिए पता है, और पता है कि उन्हें कैसे कॉन्फ़िगर किया जाना चाहिए। इस समय, Hadoop समूहों को क्रॉस-नोड सेवाओं की आवश्यकता होती है। ZooKeeper के लिए सुविधाएं प्रदान करता हैcross-node synchronization और यह सुनिश्चित करता है कि Hadoop परियोजनाओं में कार्यों को क्रमबद्ध और सिंक्रनाइज़ किया गया है।
कई ज़ूकेपर सर्वर बड़े हडोप समूहों का समर्थन करते हैं। प्रत्येक क्लाइंट मशीन अपने सिंक्रनाइज़ेशन की जानकारी को पुनः प्राप्त करने और अद्यतन करने के लिए एक ज़ूकीपर सर्वर के साथ संचार करती है। वास्तविक समय के कुछ उदाहरण हैं -
Human Genome Project- ह्यूमन जीनोम प्रोजेक्ट में डेटा की टेराबाइट्स हैं। Hadoop MapReduce ढांचे का उपयोग डेटासेट का विश्लेषण करने और मानव विकास के लिए दिलचस्प तथ्यों को खोजने के लिए किया जा सकता है।
Healthcare - अस्पताल रोगी के मेडिकल रिकॉर्ड के विशाल सेटों को स्टोर, पुनर्प्राप्त और विश्लेषण कर सकते हैं, जो आमतौर पर टेराबाइट्स में होते हैं।
अपाचे HBase
अपाचे HBase एक खुला स्रोत है, वितरित किया जाता है, NoSQL डेटाबेस का उपयोग बड़े डेटासेट की वास्तविक समय पढ़ने / लिखने के लिए किया जाता है और एचडीएफएस के शीर्ष पर चलता है। HBase इस प्रकार हैmaster-slave architectureजहां HBase मास्टर सभी दासों को नियंत्रित करता है। दासों के रूप में संदर्भित किया जाता हैRegion servers।
HBase वितरित एप्लिकेशन इंस्टॉलेशन एक चल रहे ZooKeeper क्लस्टर पर निर्भर करता है। अपाचे HBase, की मदद से पूरे मास्टर और क्षेत्र सर्वरों में वितरित डेटा की स्थिति को ट्रैक करने के लिए ZooKeeper का उपयोग करता हैcentralized configuration management तथा distributed mutexतंत्र। यहाँ HBase के उपयोग के कुछ मामले हैं -
Telecom- टेलिकॉम इंडस्ट्री अरबों मोबाइल कॉल रिकॉर्ड्स (लगभग 30TB / महीने) स्टोर करती है और रियल टाइम में इन कॉल रिकॉर्ड्स को एक्सेस करना एक बहुत बड़ा काम हो जाता है। HBase का उपयोग वास्तविक समय में सभी रिकॉर्ड को आसानी से और कुशलता से संसाधित करने के लिए किया जा सकता है।
Social network- दूरसंचार उद्योग के समान, ट्विटर, लिंक्डइन, और फेसबुक जैसी साइटें उपयोगकर्ताओं द्वारा बनाई गई पोस्टों के माध्यम से बड़ी मात्रा में डेटा प्राप्त करती हैं। HBase का उपयोग हाल के रुझानों और अन्य रोचक तथ्यों को खोजने के लिए किया जा सकता है।
अपाचे सोलर
Apache Solr जावा में लिखा गया एक तेज़, ओपन सोर्स सर्च प्लेटफॉर्म है। यह एक धधकते हुए तेज, दोषपूर्ण वितरित वितरित खोज इंजन है। के शीर्ष पर निर्मित हैLucene, यह एक उच्च प्रदर्शन, पूर्ण विशेषताओं वाला पाठ खोज इंजन है।
सोलर व्यापक रूप से कॉन्फ़िगरेशन प्रबंधन, लीडर चुनाव, नोड प्रबंधन, लॉकिंग और डेटा के सिंक्रनाइज़ेशन जैसे ज़ूकेर की हर सुविधा का उपयोग करता है।
सोलर के दो अलग-अलग हिस्से हैं, indexing तथा searching। इंडेक्सिंग डेटा को एक उचित प्रारूप में संग्रहीत करने की एक प्रक्रिया है, ताकि बाद में इसे खोजा जा सके। Solr दोनों डेटा को कई नोड्स में अनुक्रमित करने और कई नोड्स से खोज करने के लिए ZooKeeper का उपयोग करता है। चिड़ियाघरकीपर निम्नलिखित विशेषताओं में योगदान देता है -
जरूरत पड़ने पर नोड्स जोड़ें / निकालें
नोड्स और बाद में डेटा हानि को कम करने के बीच डेटा की प्रतिकृति
कई नोड्स के बीच डेटा साझा करना और बाद में तेजी से खोज परिणामों के लिए कई नोड्स से खोज करना
अपाचे सोलर के कुछ उपयोग-मामलों में ई-कॉमर्स, नौकरी खोज, आदि शामिल हैं।