यह पोस्ट मूल रूप से blogs.apache.org के माध्यम से प्रकाशित हुई थी, हम आपकी सुविधा के लिए इसे थोड़ा संशोधित रूप में यहां पुनर्प्रकाशित करते हैं:
पहली नज़र में, Apache HBase आर्किटेक्चर एक मास्टर / स्लेव मॉडल का अनुसरण करता प्रतीत होता है जहाँ मास्टर को सभी अनुरोध प्राप्त होते हैं लेकिन वास्तविक कार्य दास द्वारा किया जाता है। वास्तव में ऐसा नहीं है, और इस लेख में मैं वर्णन करूंगा कि वास्तव में स्वामी और दास कौन से कार्य संभालते हैं।
क्षेत्र और क्षेत्र सर्वर
HBase Hadoop स्टोरेज मैनेजर है जो HDFS के शीर्ष पर कम-विलंबता यादृच्छिक रीड और राइट प्रदान करता है, और यह डेटा के पेटबाइट्स को संभाल सकता है। HBase में दिलचस्प क्षमताओं में से एक ऑटो-शेयरिंग है, जिसका सीधा सा मतलब है कि टेबल बहुत बड़े होने पर सिस्टम द्वारा गतिशील रूप से वितरित किए जाते हैं।
HBase में क्षैतिज मापनीयता की मूल इकाई को क्षेत्र . कहा जाता है . क्षेत्र तालिका के डेटा का एक सबसेट हैं और वे अनिवार्य रूप से पंक्तियों की एक सन्निहित, क्रमबद्ध श्रेणी हैं जो एक साथ संग्रहीत हैं।
प्रारंभ में, तालिका के लिए केवल एक क्षेत्र होता है। जैसा कि नीचे दिखाया गया है, जब अधिक पंक्तियों को जोड़ने के बाद क्षेत्र बहुत बड़े हो जाते हैं, तो क्षेत्र मध्य कुंजी पर दो भागों में विभाजित हो जाता है, जिससे लगभग दो बराबर भाग बन जाते हैं।
HBase में दासों को क्षेत्र सर्वर . कहा जाता है . प्रत्येक क्षेत्र सर्वर क्षेत्रों के एक समूह की सेवा के लिए जिम्मेदार है, और एक क्षेत्र (यानी पंक्तियों की श्रेणी) को केवल एक क्षेत्र सर्वर द्वारा परोसा जा सकता है।
HBase आर्किटेक्चर की दो मुख्य सेवाएं हैं:HMaster जो क्लस्टर को समन्वित करने और प्रशासनिक कार्यों को निष्पादित करने के लिए जिम्मेदार है, और HRegionServer तालिका के डेटा के सबसेट को संभालने के लिए ज़िम्मेदार है।
HMमास्टर, क्षेत्र असाइनमेंट, और संतुलन
जैसा कि पहले उल्लेख किया गया है, HBase मास्टर HBase क्लस्टर का समन्वय करता है और प्रशासनिक कार्यों के लिए जिम्मेदार है।
एक क्षेत्र सर्वर एक या अधिक क्षेत्रों की सेवा कर सकता है। प्रत्येक क्षेत्र को स्टार्टअप पर एक क्षेत्र सर्वर को सौंपा जाता है और मास्टर लोड संतुलन संचालन के परिणामस्वरूप एक क्षेत्र को एक क्षेत्र सर्वर से दूसरे क्षेत्र में स्थानांतरित करने का निर्णय ले सकता है। मास्टर किसी अन्य क्षेत्र सर्वर को क्षेत्र निर्दिष्ट करके क्षेत्र सर्वर विफलताओं को भी संभालता है।
रीजन और रीजन सर्वर की मैपिंग को मेटा नामक सिस्टम टेबल में रखा जाता है। मेटा पढ़कर, आप पहचान सकते हैं कि आपकी कुंजी के लिए कौन सा क्षेत्र जिम्मेदार है। इसका मतलब है कि पढ़ने और लिखने के संचालन के लिए, मास्टर बिल्कुल भी शामिल नहीं है और ग्राहक अनुरोधित डेटा की सेवा के लिए सीधे क्षेत्र सर्वर पर जा सकते हैं।
पंक्ति-कुंजी का पता लगाना:कौन सा क्षेत्र सर्वर जिम्मेदार है?
एक पंक्ति रखने या प्राप्त करने के लिए क्लाइंट को मास्टर से संपर्क करने की आवश्यकता नहीं है, क्लाइंट सीधे उस क्षेत्र सर्वर से संपर्क कर सकते हैं जो निर्दिष्ट पंक्ति को संभालता है, या क्लाइंट स्कैन के मामले में, सेट को संभालने के लिए जिम्मेदार रीजन सर्वर के सेट से सीधे संपर्क कर सकता है। चाबियों की:
क्षेत्र सर्वर की पहचान करने के लिए, क्लाइंट मेटा टेबल पर एक क्वेरी करता है।
META एक सिस्टम टेबल है जिसका उपयोग क्षेत्रों पर नज़र रखने के लिए किया जाता है। इसमें सर्वर का नाम और एक क्षेत्र पहचानकर्ता होता है जिसमें तालिका का नाम और प्रारंभ पंक्ति-कुंजी शामिल होती है। स्टार्ट-की और अगले क्षेत्र को देखकर स्टार्ट-की क्लाइंट किसी विशेष क्षेत्र में निहित पंक्तियों की श्रेणी की पहचान करने में सक्षम होते हैं।
क्लाइंट क्षेत्र के स्थानों के लिए कैश रखता है। यह क्लाइंट को हर बार उसी क्षेत्र पर एक ऑपरेशन जारी होने पर मेटा टेबल पर हिट करने से बचाता है। किसी क्षेत्र के विभाजन या किसी अन्य क्षेत्र सर्वर (संतुलन, या असाइनमेंट नीतियों के कारण) में स्थानांतरित होने की स्थिति में, क्लाइंट को प्रतिक्रिया के रूप में एक अपवाद प्राप्त होगा और मेटा तालिका से अद्यतन जानकारी प्राप्त करके कैश को ताज़ा किया जाएगा:
चूंकि मेटा अन्य की तरह एक टेबल है, क्लाइंट को यह पहचानना होगा कि मेटा किस सर्वर पर स्थित है। मास्टर द्वारा असाइनमेंट पर META स्थानों को ZooKeeper नोड में संग्रहीत किया जाता है, और क्लाइंट META वाले क्षेत्र सर्वर का पता प्राप्त करने के लिए सीधे नोड को पढ़ता है।
HBase का मूल डिज़ाइन BigTable पर आधारित था, जिसमें एक अन्य तालिका -ROOT- थी जिसमें META स्थान और Apache ZooKeeper इसकी ओर इशारा करते थे। HBase 0.96 ने केवल ZooKeeper के पक्ष में उस व्यवस्था को हटा दिया, क्योंकि META को विभाजित नहीं किया जा सकता है और इसलिए इसमें एक ही क्षेत्र शामिल है।
क्लाइंट एपीआई:मास्टर और क्षेत्र की जिम्मेदारियां
HBase Java क्लाइंट API के दो मुख्य इंटरफेस हैं:
- HBaseAdmin टेबल बनाने/हटाने/संशोधित करके "टेबल स्कीमा" के साथ बातचीत की अनुमति देता है, और यह क्षेत्रों को असाइन/अनअसाइन करके, क्षेत्रों को एक साथ विलय करके, फ्लश के लिए कॉल करके क्लस्टर के साथ बातचीत की अनुमति देता है। यह इंटरफ़ेस मास्टर के साथ संचार करता है।
- एचटेबल क्लाइंट को एक निर्दिष्ट तालिका के डेटा को प्राप्त करने, डालने, हटाने और अन्य सभी डेटा संचालन का उपयोग करके हेरफेर करने की अनुमति देता है। यह इंटरफ़ेस चाबियों के अनुरोधित सेट को संभालने के लिए जिम्मेदार क्षेत्र सर्वर से सीधे संचार करता है।
उन दो इंटरफेस की अलग-अलग जिम्मेदारियां हैं:HBaseAdmin का उपयोग केवल व्यवस्थापक संचालन को निष्पादित करने और मास्टर के साथ संवाद करने के लिए किया जाता है जबकि HTable का उपयोग डेटा में हेरफेर करने और क्षेत्रों के साथ संचार करने के लिए किया जाता है।
निष्कर्ष
जैसा कि हमने यहां देखा, मास्टर / स्लेव आर्किटेक्चर होने का मतलब यह नहीं है कि प्रत्येक ऑपरेशन मास्टर के माध्यम से जाता है। डेटा को पढ़ने और लिखने के लिए, HBase क्लाइंट, वास्तव में, सभी डेटा संचालन (HTable) के लिए पंक्ति कुंजियों को संभालने के लिए जिम्मेदार विशिष्ट क्षेत्र सर्वर पर सीधे जाता है। मास्टर का उपयोग क्लाइंट द्वारा केवल टेबल निर्माण, संशोधन और हटाने के संचालन (HBaseAdmin) के लिए किया जाता है।
हालांकि मास्टर की अवधारणा मौजूद है, एचबीएएस क्लाइंट डेटा संचालन के लिए इस पर निर्भर नहीं है और क्लस्टर मास्टर के नीचे जाने पर भी डेटा की सेवा जारी रख सकता है।
Matteo Bertozzi प्लेटफ़ॉर्म टीम में सॉफ़्टवेयर इंजीनियर और HBase कमिटर हैं।
यदि आप HBase में रुचि रखते हैं, तो HBaseCon 2013 (13 जून, सैन फ्रांसिस्को) के लिए पंजीकरण करना सुनिश्चित करें - HBase योगदानकर्ताओं, डेवलपर्स, व्यवस्थापकों और उपयोगकर्ताओं के लिए सामुदायिक कार्यक्रम। स्थान सीमित है!