सीडीएच 5/एचबेस 0.96 के साथ संघनन मॉडल काफी बदल रहा है। यहां आपको जानने की जरूरत है।
Apache HBase एक वितरित डेटा स्टोर है जो लॉग-स्ट्रक्चर्ड मर्ज ट्री पर आधारित है, इसलिए प्रति स्टोर केवल एक फ़ाइल (कॉलम फ़ैमिली) होने से इष्टतम पठन प्रदर्शन आएगा। हालाँकि, भारी आवक लेखन की अवधि के दौरान यह आदर्श संभव नहीं है। इसके बजाय, HBase पढ़ने के लिए आवश्यक डिस्क की अधिकतम संख्या को कम करने के लिए HFiles को संयोजित करने का प्रयास करेगा। इस प्रक्रिया को संघनन . कहा जाता है ।
संघनन एक क्षेत्र में एक ही स्टोर से कुछ फ़ाइलें चुनते हैं और उन्हें संयोजित करते हैं। इस प्रक्रिया में इनपुट फ़ाइलों में KeyValues पढ़ना और कोई भी KeyValues लिखना शामिल है जो हटाए नहीं गए हैं, जो रहने के समय (TTL) के अंदर हैं, और संस्करणों की संख्या का उल्लंघन नहीं करते हैं। नई बनाई गई संयुक्त फ़ाइल तब क्षेत्र में इनपुट फ़ाइलों को बदल देती है।
अब, जब भी कोई क्लाइंट डेटा मांगता है, HBase जानता है कि इनपुट फ़ाइलों से डेटा डिस्क पर एक सन्निहित फ़ाइल में रखा जाता है - इसलिए केवल एक सीक की आवश्यकता होती है, जबकि पहले प्रत्येक फ़ाइल के लिए एक की आवश्यकता हो सकती है। लेकिन डिस्क आईओ मुक्त नहीं है, और सावधानीपूर्वक ध्यान दिए बिना, डेटा को बार-बार लिखने से कुछ गंभीर नेटवर्क और डिस्क ओवर-सब्सक्रिप्शन हो सकता है। दूसरे शब्दों में, संघनन कुछ डिस्क IO के व्यापार के बारे में है जो बाद में कम खोज के लिए है।
इस पोस्ट में, आप सीडीएच 4 में संघनन के उपयोग और निहितार्थों के साथ-साथ सीडीएच 5 में संघनन मॉडल में परिवर्तन (जो HBase 0.96 पर फिर से आधारित होगा) के बारे में अधिक जानेंगे।
सीडीएच 4 में संघनन
आदर्श संघनन उन फ़ाइलों को चुनता है जो आगामी पठन में सबसे अधिक खोज को कम कर देंगी, साथ ही उन फ़ाइलों को भी चुनेंगी जिन्हें कम से कम IO की आवश्यकता होगी। दुर्भाग्य से, यह समस्या भविष्य की जानकारी के बिना हल नहीं हो सकती। जैसे, यह सिर्फ एक आदर्श है जिसके लिए HBase को प्रयास करना चाहिए न कि कुछ ऐसा जो वास्तव में प्राप्य हो।
असंभव आदर्श के बजाय, HBase एक अनुमानी का उपयोग करता है और यह चुनने की कोशिश करता है कि स्टोर में कौन सी फाइलें अच्छे उम्मीदवार होने की संभावना है। फ़ाइलों को इस अंतर्ज्ञान पर चुना जाता है कि जैसी फ़ाइलों को समान फ़ाइलों के साथ जोड़ा जाना चाहिए - अर्थात, समान आकार की फ़ाइलों को संयोजित किया जाना चाहिए।
HBase 0.94 (CDH 4 में शिपिंग) में डिफ़ॉल्ट नीति HFiles की सूची के माध्यम से देखती है, पहली फ़ाइल को खोजने का प्रयास करती है जिसका आकार hbase.store.compaction.ratio द्वारा गुणा की गई सभी फ़ाइलों के कुल से कम है। एक बार वह फ़ाइल मिल जाने के बाद, HFile और छोटी अनुक्रम आईडी वाली सभी फ़ाइलों को संकुचित करने के लिए चुना जाता है।
सबसे बड़ी फ़ाइलों के सबसे पुराने होने के डिफ़ॉल्ट मामले के लिए, यह दृष्टिकोण अच्छी तरह से काम करता है:
हालांकि, उम्र और फाइलों के आकार के बीच संबंध के बारे में यह धारणा कुछ मामलों में दोषपूर्ण है, जिससे वर्तमान एल्गोरिदम उप-इष्टतम रूप से चुनने के लिए अग्रणी है। इसके बजाय, बल्क-लोडेड फ़ाइलें अधिक सामान्य रूप से फ़्लश किए गए HFiles से बहुत अलग तरीके से सॉर्ट कर सकती हैं और कभी-कभी करती हैं, इसलिए वे महान उदाहरण बनाती हैं:
सीडीएच 5 में संघनन परिवर्तन
संघनन हाल ही में महत्वपूर्ण तरीकों से बदल गया है। HBase 0.96 और CDH 5 के लिए, फ़ाइल चयन एल्गोरिथम को HBASE-7516 के माध्यम से कॉन्फ़िगर करने योग्य बनाया गया था - इसलिए अब उपयोगकर्ता द्वारा आपूर्ति की गई संघनन नीतियों का होना संभव है। यह परिवर्तन अधिक अनुभवी उपयोगकर्ताओं को यह परीक्षण करने और पुनरावृति करने की अनुमति देता है कि वे संघनन कैसे चलाना चाहते हैं।
डिफ़ॉल्ट संघनन चयन एल्गोरिथ्म को भी ExploringCompactionPolicy में बदल दिया गया था। यह नीति पुराने डिफ़ॉल्ट से इस मायने में अलग है कि यह सुनिश्चित करती है कि प्रस्तावित संघनन में प्रत्येक फ़ाइल दिए गए अनुपात के भीतर है। साथ ही, यह केवल उन फ़ाइलों के पहले सेट का चयन नहीं करता है जिनका आकार संघनन अनुपात के भीतर है; इसके बजाय यह उन सभी संभावित सेटों को देखता है जो किसी भी नियम का उल्लंघन नहीं करते हैं, और फिर कुछ ऐसा चुनता है जो कम से कम अपेक्षित आईओ के लिए सबसे प्रभावशाली दिखता है। ऐसा करने के लिए, ExploringCompactionPolicy एक संघनन चुनता है जो अनुपात के भीतर अधिकांश फ़ाइलों को हटा देगा, और यदि कोई टाई है, तो आकार में छोटी फ़ाइलों के सेट को वरीयता दी जाती है:
भविष्य में रिलीज़ के लिए और बदलावों की योजना बनाई गई है, जिसमें स्तरीय संघनन, धारीदार संघनन और स्तर-आधारित संघनन शामिल हैं।
निष्कर्ष
कुछ उपयोग के मामलों के लिए, इस कार्य का कोई प्रभाव नहीं पड़ेगा। यह एक अच्छी बात है, क्योंकि संघनन का पहले से ही बहुत अच्छी तरह से अध्ययन किया जा चुका था। हालांकि, उन उपयोगकर्ताओं के लिए जिनके पास बड़े ट्रैफ़िक स्पाइक हैं या जो बल्क लोड का उपयोग करते हैं, यह कार्य IO प्रतीक्षा समय और अनुरोध विलंबता में बहुत सुधार ला सकता है। एक विशिष्ट बल्क-लोड उपयोग के मामले में, हमने संघनन के कारण डिस्क IO में 90% की कमी देखी है।
HBase की PerfTestCompactionPolicies में एक परीक्षण मामले के परिणाम यहां दिए गए हैं:
सीडीएच 5 में इस काम को देखें (इस लेखन के समय बीटा में) जब यह आपके पास एक क्लस्टर की बात आती है।
आगे पढ़ना:
- संघनन नीति की खोज
- https://hbase.apache.org/book/regions.arch.html#compaction.file.selection
- https://issues.apache.org/jira/browse/HBASE-7516
- https://issues.apache.org/jira/browse/HBASE-7678
- https://issues.apache.org/jira/browse/HBASE-7667
- https://issues.apache.org/jira/browse/HBASE-7055
- http://www.hbasecon.com/sessions/compaction-improvements-in-apache-hbase/