HBase
 sql >> डेटाबेस >  >> NoSQL >> HBase

Apache HBase प्रतिकृति:परिचालन अवलोकन

यह Apache HBase प्रतिकृति के बारे में दूसरा ब्लॉगपोस्ट है। पिछले ब्लॉगपोस्ट, HBase प्रतिकृति अवलोकन, उपयोग के मामलों, वास्तुकला और HBase प्रतिकृति में समर्थित विभिन्न तरीकों पर चर्चा की। यह ब्लॉगपोस्ट एक परिचालन दृष्टिकोण से है और HBase प्रतिकृति कॉन्फ़िगरेशन, और इसका उपयोग करने के लिए प्रमुख अवधारणाओं को स्पर्श करेगा - जैसे बूटस्ट्रैपिंग, स्कीमा परिवर्तन और दोष सहिष्णुता।

कॉन्फ़िगरेशन

जैसा कि HBase प्रतिकृति अवलोकन में उल्लेख किया गया है, मास्टर क्लस्टर एक या अधिक दास समूहों को WALEdits का शिपमेंट भेजता है। यह खंड मास्टर-स्लेव मोड में प्रतिकृति को कॉन्फ़िगर करने के लिए आवश्यक चरणों का वर्णन करता है।

  1. सभी टेबल/कॉलम परिवार जिन्हें दोहराया जाना है, दोनों क्लस्टर पर मौजूद होने चाहिए।
  2. दोनों क्लस्टर पर सभी नोड्स पर $HBASE_HOME/conf/hbase-site.xml में निम्न गुण जोड़ें; इसे सही पर सेट करें।

         
               hbase.replication
               सच
         

मास्टर क्लस्टर पर, निम्नलिखित अतिरिक्त परिवर्तन करें:

  1. प्रतिकृति क्षेत्र सेट करें (REPLICATION_SCOPE विशेषता) तालिका/स्तंभ परिवार पर जिसे दोहराया जाना है:


    hbase shell> 'टेबल' को बंद करें
    hbase शेल> 'टेबल' बदलें, {NAME => 'कॉलम-फ़ैमिली', REPLICATION_SCOPE => 1}
    hbase शेल> 'टेबल' सक्षम करें

REPLICATION_SCOPE एक स्तंभ-पारिवारिक स्तर की विशेषता है और इसका मान 0 या 1 हो सकता है। 0 के मान का अर्थ है प्रतिकृति अक्षम है, और 1 का अर्थ है प्रतिकृति सक्षम है। एक उपयोगकर्ता को प्रत्येक कॉलम परिवार को ऊपर दिखाए गए अनुसार परिवर्तन कमांड के साथ बदलना होगा, सभी कॉलम परिवारों के लिए जिसे वह दोहराना चाहता है।

यदि कोई उपयोगकर्ता तालिका बनाते समय प्रतिकृति सक्षम करना चाहता है, तो उसे निम्न आदेश का उपयोग करना चाहिए:

hbase shell> 'टेबल', 'कॉलम-फ़ैमिली1', 'कॉलम-फ़ैमिली2', {NAME => 'कॉलम-फ़ैमिली1', REPLICATION_SCOPE => 1} बनाएं

उपरोक्त आदेश उपरोक्त तालिका के 'कॉलम-फ़ैमिली1' पर प्रतिकृति को सक्षम करेगा।

       2.    hbase शेल में, स्लेव पीयर जोड़ें। एक उपयोगकर्ता को स्लेव क्लस्टर का ज़ूकीपर कोरम, उसका क्लाइंट पोर्ट, और रूट hbase znode, साथ ही एक पीरआईड प्रदान करना चाहिए:

hbase shell>add_peer 'peerId', "::"

पीयरआईड एक या दो वर्णों की लंबी स्ट्रिंग है, और पिछले ब्लॉग में बताए अनुसार पीयर्स ज़्नोड के अंतर्गत एक संबंधित ज़नोड बनाया जाता है। एक बार जब कोई उपयोगकर्ता add_peer कमांड चलाता है, तो प्रतिकृति कोड उस सहकर्मी के लिए एक प्रतिकृति स्रोत ऑब्जेक्ट को तुरंत चालू कर देता है, और सभी मास्टर क्लस्टर क्षेत्र सर्वर दास क्लस्टर के क्षेत्र सर्वर से कनेक्ट करने का प्रयास करते हैं। यह स्लेव क्लस्टर के ClusterId (UUID, स्लेव क्लस्टर के ज़ूकीपर कोरम पर पंजीकृत) को भी प्राप्त करता है। मास्टर क्लस्टर रीजनसर्वर दास क्लस्टर के ज़ूकीपर कोरम पर "/ hbase / rs" ज़्नोड और उसके बच्चों को पढ़कर दास के उपलब्ध क्षेत्र सर्वरों को सूचीबद्ध करता है, और इससे संबंध बनाता है। मास्टर क्लस्टर में प्रत्येक रीजनसर्वर, "replication.source.ratio" द्वारा निर्दिष्ट अनुपात के आधार पर, डिफ़ॉल्ट मान 0.1 के साथ, स्लेव रीजनसर्वर से एक सबसेट चुनता है। इसका मतलब है कि प्रत्येक मास्टर क्लस्टर क्षेत्रसर्वर कुल दास क्लस्टर क्षेत्र सर्वर के 10% से जुड़ने का प्रयास करेगा। लेन-देन बैच भेजते समय, मास्टर क्लस्टर रीजनसर्वर इन कनेक्टेड रीजनसर्वर से एक रैंडम रीजनसर्वर चुनेगा। (नोट:कैटलॉग टेबल, .META. और _ROOT_ के लिए प्रतिकृति नहीं की जाती है।)

मास्टर-मास्टर मोड सेट करने के लिए, उपरोक्त चरणों को दोनों समूहों पर दोहराया जाना चाहिए।

स्कीमा परिवर्तन

जैसा कि पिछले अनुभाग में बताया गया है, दोनों समूहों में प्रतिकृति तालिका और स्तंभ परिवार मौजूद होना चाहिए। यह खंड विभिन्न संभावित परिदृश्यों पर चर्चा करता है कि एक स्कीमा परिवर्तन के दौरान क्या होता है जब प्रतिकृति अभी भी प्रगति पर है:

ए) मास्टर में कॉलम परिवार को हटाएं:एक कॉलम परिवार को हटाने से उस परिवार के लिए किसी भी लंबित उत्परिवर्तन की प्रतिकृति प्रभावित नहीं होगी। ऐसा इसलिए है क्योंकि प्रतिकृति कोड WAL को पढ़ता है और प्रत्येक WALEdit के लिए स्तंभ परिवारों के प्रतिकृति क्षेत्र की जाँच करता है। प्रत्येक WALEdit में प्रतिकृति सक्षम स्तंभ परिवारों का मानचित्र होता है; चेक सभी गठित कीवैल्यू के कॉलम परिवार पर किया जाता है (चाहे वे दायरे में हों या नहीं)। यदि यह मानचित्र में मौजूद है, तो इसे शिपमेंट में जोड़ा जाता है। चूंकि स्तंभ परिवार को हटाए जाने से पहले WALEdit ऑब्जेक्ट बनाया गया है, इसलिए इसकी प्रतिकृति प्रभावित नहीं होगी।

b) स्लेव में कॉलम फैमिली को डिलीट करें:WALEdits को मास्टर क्लस्टर से एक विशेष स्लेव रीजनसर्वर को भेज दिया जाता है, जो इसे एक सामान्य HBase क्लाइंट (HTablePool ऑब्जेक्ट का उपयोग करके) की तरह प्रोसेस करता है। चूंकि कॉलम परिवार हटा दिया गया है, पुट ऑपरेशन विफल हो जाएगा और उस अपवाद को मास्टर रीजनसर्वर क्लस्टर में फेंक दिया जाएगा।

प्रतिकृति प्रारंभ/बंद करें

स्टार्ट/स्टॉप कमांड किल स्विच की तरह काम करते हैं। जब स्टॉप_रेप्लिकेशन कमांड HBase शेल पर चलाया जाता है, तो यह /hbase/replication/state के मान को गलत में बदल देगा। यह सभी प्रतिकृति स्रोत वस्तुओं को लॉग पढ़ने से रोक देगा; लेकिन मौजूदा पठन प्रविष्टियां भेज दी जाएंगी। यदि कोई उपयोगकर्ता स्टॉप प्रतिकृति कमांड का उपयोग करता है, तो नए रोल किए गए लॉग प्रतिकृति के लिए कतार में नहीं होंगे। इसी तरह, start_replication कमांड जारी करने से वर्तमान WAL (जिसमें कुछ पिछले लेन-देन हो सकते हैं) से प्रतिकृति शुरू हो जाएगी, न कि उस समय से जब कमांड जारी किया गया था।

चित्र 1 स्टार्ट-स्टॉप स्विच व्यवहार की व्याख्या करता है, जहां घटनाओं का क्रम तीरों की दिशा में बहता है।

संस्करण संगतता

मास्टर क्लस्टर रीजनसर्वर स्लेव क्लस्टर रीजनसर्वर से सामान्य HBase क्लाइंट के रूप में कनेक्ट होते हैं। संगतता का एक ही नियम इस पर लागू होता है कि संस्करण xxx पर HBase क्लाइंट संस्करण yyy पर HBase सर्वर पर समर्थित है या नहीं।

एक अन्य बिंदु पर, चूंकि प्रतिकृति अभी भी विकसित हो रही है (अधिक से अधिक कार्यात्मकताओं को इसमें लगातार जोड़ा जाता है), एक उपयोगकर्ता को मौजूदा कार्यात्मकताओं के बारे में पता होना चाहिए। उदाहरण के लिए, CDH4 में, जो HBase 0.92 शाखा पर आधारित है, मास्टर-मास्टर और चक्रीय प्रतिकृति के लिए समर्थन है। समकक्ष स्तर पर प्रतिकृति स्रोत को सक्षम/अक्षम करना HBase 0.94 शाखा में जोड़ा जाता है।

बूट-स्ट्रैपिंग

मास्टर क्लस्टर रीजनसर्वर के WALs को पढ़कर प्रतिकृति काम करती है। यदि कोई उपयोगकर्ता पुराने डेटा को दोहराना चाहता है, तो वे प्रतिकृति को सक्षम करते हुए एक कॉपीटेबल कमांड (स्टार्ट और एंड टाइमस्टैम्प को परिभाषित करते हुए) चला सकते हैं। कॉपीटेबल कमांड स्टार्ट/एंड टाइमस्टैम्प द्वारा स्कोप किए गए डेटा की प्रतिलिपि बनाएगा, और प्रतिकृति वर्तमान डेटा का ख्याल रखेगी। समग्र दृष्टिकोण को संक्षेप में प्रस्तुत किया जा सकता है:

  1. प्रतिकृति प्रारंभ करें (टाइमस्टैम्प नोट करें)।
  2. उपरोक्त टाइमस्टैम्प के बराबर एंड टाइमस्टैम्प के साथ कॉपीटेबल कमांड चलाएँ।
  3. चूंकि प्रतिकृति वर्तमान वाल से शुरू होती है, इसलिए कुछ प्रमुख मूल्य हो सकते हैं जिन्हें प्रतिकृति और कॉपीटेबल जॉब दोनों द्वारा दास में कॉपी किया जाता है। यह अभी भी ठीक है, क्योंकि यह एक निष्क्रिय ऑपरेशन है।

मास्टर-मास्टर प्रतिकृति के मामले में, प्रतिकृति शुरू करने से पहले कॉपीटेबल जॉब चलाना चाहिए। ऐसा इसलिए है क्योंकि यदि कोई उपयोगकर्ता प्रतिकृति को सक्षम करने के बाद कॉपीटेबल का काम शुरू करता है, तो दूसरा मास्टर पहले मास्टर को डेटा फिर से भेजेगा, क्योंकि कॉपीटेबल म्यूटेशन ऑब्जेक्ट में क्लस्टर आईडी को संपादित नहीं करता है। समग्र दृष्टिकोण को संक्षेप में प्रस्तुत किया जा सकता है:

  1. कॉपीटेबल जॉब चलाएँ, (नौकरी के प्रारंभ टाइमस्टैम्प पर ध्यान दें)।
  2. प्रतिकृति प्रारंभ करें।
  3. प्रतिलिपि तालिका को चरण 1 में बताए गए प्रारंभ समय के बराबर प्रारंभ समय के साथ फिर से चलाएँ।

इसमें दो समूहों के बीच कुछ डेटा को आगे और पीछे धकेला जाता है; लेकिन यह अपने आकार को छोटा कर देता है।

दोष सहनशीलता

मास्टर क्लस्टर क्षेत्र सर्वर विफलता
मास्टर क्लस्टर के सभी रीजनसर्वर "/hbase/replication/rs" के तहत एक ज़नोड बनाते हैं, जैसा कि आर्किटेक्चर सेक्शन में बताया गया है। एक रीजनसर्वर प्रत्येक WAL के लिए एक चाइल्ड ज़नोड जोड़ता है, जैसा कि चित्र 1 में दिखाया गया है, प्रतिकृति पदानुक्रम में इसके ज़्नोड के तहत एक बाइट ऑफ़सेट होता है। यदि कोई रीजनसर्वर विफल रहता है, तो अन्य रीजनसर्वर को डेड रीजनसर्वर के लॉग की देखभाल करने की आवश्यकता होती है, जो इसके तहत सूचीबद्ध हैं। क्षेत्रसर्वर का znode. सभी रीजनसर्वर अन्य रीजनसर्वर ज़्नोड्स ("/ hbase/rs") ज़नोड पर नज़र रखते हैं; इसलिए जब कोई रीजनसर्वर विफल हो जाता है, तो अन्य रीजनसर्वर इवेंट प्राप्त करेंगे क्योंकि मास्टर इस रीजनसर्वर को मृत के रूप में चिह्नित करता है। इस मामले में, अन्य सभी क्षेत्रसर्वर वाल को डेड रीजनसर्वर ज़नोड से उनके ज़नोड में स्थानांतरित करने के लिए दौड़ लगाते हैं, और अन्य सामान्य लॉग से अलग होने के लिए इसे स्लेव आईडी और डेड रीजनसर्वर नाम के साथ एक उपसर्ग संलग्न करते हैं। स्थानांतरित लॉग के लिए एक अलग प्रतिकृति स्रोत (NodeFailoverWorker उदाहरण) तत्काल है, जो इन स्थानांतरित लॉग को संसाधित करने के बाद मर जाता है।

यदि कोई HBase प्रतिकृति अवलोकन के चित्र 1 को प्रतिकृति znodes पदानुक्रम के आधार आंकड़े के रूप में मानता है, तो चित्र 2 सर्वर foo1.bar.com के मरने और foo2.bar.com के कतार में आने की स्थिति में नए प्रतिकृति znodes पदानुक्रम को दर्शाता है। नए znode “1-foo1.bar.com,40020,1339435481973” पर ध्यान दें जो foo2.bar.com znode

के अंतर्गत बनाया गया है।

/hbase/hbaseid:b53f7ec6-ed8a-4227-b088-fd6552bd6a68…. /hbase/rs/foo2.bar.com,40020,1339435481973:/hbase/rs/foo3.bar.com,40020,1339435486713:/hbase/replication:/hbase/replication/state:true /hbase/replication/peers:/hbase/replication/peers/1:zk.quorum.slave:281:/hbase /hbase/replication/rs:/hbase/replication/rs/foo1.bar.com.com,40020,133943508486:/hbase/replication/ rs/foo1.bar.com,40020,1339435481973/1:/hbase/replication/rs/foo1.bar.com,40020, 1339435481973/1/foo1.bar.com.1339435485769:1243232 /hbase/replication/rs/foo3 .bar.com,40020,1339435481742:/hbase/replication/rs/foo3.bar.com,40020,1339435481742/1:/hbase/replication/rs/foo3.bar.com,40020, 1339435481742/1/foo3.bar ..com.1339435485769:1243232 /hbase/replication/rs/foo2.bar.com,40020,1339435089550:/hbase/replication/rs/foo2.bar.com,40020,1339435481742/1:/hbase/replication/rs/ foo2.bar.com,40020, 1339435481742/1/foo2.bar..com.13394354343443:1909033 /hbase/replication/rs/foo2.bar.com,40020,1339435481742/1- foo1.bar.com,40020,1339435481973 /foo1.bar.com.1339435485769:1243232

चित्र 2. रीजनसर्वर फेलओवर znodes पदानुक्रम

इस बीच, लॉग विभाजन शुरू हो सकता है और मृत क्षेत्र सर्वर लॉग को संग्रहीत कर सकता है। प्रतिकृति स्रोत नियमित और संग्रहीत निर्देशिका दोनों में लॉग की तलाश करता है।

धीमी गति से काम न करने वाले स्लेव क्लस्टर (या रीजनसर्वर)
जब कोई स्लेव क्लस्टर डाउन होता है, या यदि कोई अस्थायी नेटवर्क विभाजन होता है, तो ऐसे लॉग जिन्हें अभी तक स्लेव में दोहराया नहीं गया है, उन्हें HBase लॉग क्लीनर द्वारा हटाया नहीं जाएगा।

लॉग सफाई को LogCleaner वर्ग द्वारा नियंत्रित किया जाता है, जो कॉन्फ़िगर किए गए समय के बाद भी चलता रहता है। प्रतिकृति कोड, LogCleaner वर्ग में ReplicationLogCleaner प्लगइन जोड़ता है। जब उत्तरार्द्ध एक विशिष्ट लॉग को हटाने का प्रयास करता है, तो ReplicationLogCleaner यह देखने के लिए देखेगा कि क्या वह लॉग प्रतिकृति znode पदानुक्रम (/hbase/replication/rs/ znode के अंतर्गत) में मौजूद है। यदि लॉग मिल जाता है, तो इसका मतलब है कि लॉग को अभी दोहराया जाना बाकी है, और यह इसके विलोपन को छोड़ देगा। एक बार लॉग दोहराए जाने के बाद, इसके ज़नोड को प्रतिकृति पदानुक्रम से हटा दिया जाएगा। अपने अगले भाग में, LogCleaner लॉग फ़ाइल को दोहराए जाने के बाद उसे सफलतापूर्वक हटा देगा।

सत्यापन

कम मात्रा में डेटा के लिए, कोई बस यह सत्यापित करने के लिए दास क्लस्टर में hbase शेल का उपयोग करके तालिका पंक्तियों की तलाश कर सकता है कि वे दोहराए गए हैं या नहीं। सत्यापित करने का एक मानक तरीका है, HBase के साथ आने वाले Verifyrep mapreduce जॉब को चलाना। इसे मास्टर क्लस्टर पर चलाया जाना चाहिए और इसके लिए गुलाम क्लस्टर आईडी और लक्ष्य तालिका नाम की आवश्यकता होती है। कोई अतिरिक्त तर्क भी प्रदान कर सकता है जैसे स्टार्ट/स्टॉप टाइमस्टैम्प और कॉलम परिवार। यह दो काउंटरों नामतः GOODROWS और BADROWS को प्रिंट करता है, जो क्रमशः दोहराई गई और बिना दोहराई गई पंक्तियों की संख्या को दर्शाता है।

प्रतिकृति मीट्रिक

प्रतिकृति ढांचा कुछ उपयोगी मेट्रिक्स को उजागर करता है जिनका उपयोग प्रतिकृति प्रगति की जांच के लिए किया जा सकता है। इनमें से कुछ महत्वपूर्ण हैं:

  1. sizeOfLogQueue:प्रतिकृति स्रोत पर संसाधित होने वाले HLogs की संख्या (संसाधित होने वाले को छोड़कर)
  2. shippedOpsRate:शिप किए गए म्यूटेशन की दर
  3. logEditsReadRate:प्रतिकृति स्रोत पर HLogs से पढ़े गए उत्परिवर्तन की दर
  4. ageOfLastShippedOp:प्रतिकृति स्रोत द्वारा भेजे गए अंतिम बैच की आयु

भविष्य का काम

वर्तमान HBase प्रतिकृति में मौजूद सभी मौजूदा सुविधाओं के साथ,  अभी भी और सुधार की गुंजाइश है। यह प्रदर्शन से भिन्न होता है जैसे कि मास्टर और दास के बीच प्रतिकृति समय-अंतराल को कम करना, क्षेत्र सर्वर विफलता (HBase-2611) के अधिक मजबूत संचालन के लिए। सुधार के और क्षेत्रों में पीयर-लेवल टेबल प्रतिकृति को सक्षम करना और IncrementColumnValue (HBase-2804) का उचित प्रबंधन शामिल है।

निष्कर्ष
इस पोस्ट ने एक ऑपरेटर के दृष्टिकोण से HBase प्रतिकृति पर चर्चा की, जिसमें कॉन्फ़िगरेशन (विभिन्न मोड के), मौजूदा क्लस्टर को बूटस्ट्रैप करना, स्कीमा परिवर्तन के प्रभाव और दोष सहिष्णुता शामिल हैं।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hadoop में HDFS NameNode उच्च उपलब्धता

  2. पेश है Apache HBase मीडियम ऑब्जेक्ट स्टोरेज (MOB) कॉम्पैक्शन पार्टीशन पॉलिसी

  3. MapReduce में Hadoop InputFormat और InputFormat के प्रकार

  4. Hadoop में MapReduce फेरबदल और छँटाई

  5. Apache HBase में वास्तव में स्केलिंग कैसे काम करती है