2011-10-21 26 views
5

अगर मैं एक तालिका में सम्मिलित करना चाहते हैं:क्या hbase में अधिकतम संस्करण संख्या है?

row | fam:qualifier | timestamp | value 
1 | foo:bar | 12345 | 2 
1 | foo:bar | 12346 | 3 
1 | foo:bar | 12347 | 2 
1 | foo:bar | 12348 | 1 
. 
. 
. 
1 | foo:bar | 123410 | 2 

मैं HBase में निर्दिष्ट कर सकते हैं संस्करण की अधिकतम संख्या शैल FOM एक विशेष पंक्ति पाने के लिए लेकिन जब मैं उदाहरण के लिए निर्दिष्ट '100' यह मेरे केवल 4 वापसी संस्करण ... क्या कोई अधिकतम है?

उत्तर

11

यह केवल 4 संस्करण देता है क्योंकि कॉलम परिवार अधिकतम 4 संस्करणों को स्टोर करने के लिए सेट है।

यदि आप अधिक संस्करणों को स्टोर करना चाहते हैं तो आपको सीएफ को बदलने की आवश्यकता है। HBase खोल का उपयोग करना:

hbase> alter 'table_foo', {NAME => 'column_fam_foo', VERSIONS => 100} 

डिफ़ॉल्ट अधिकतम संस्करणों के लिए 1 * है:

http://hbase.apache.org/book/schema.versions.html

* ऐसा लगता है अधिकतम संस्करणों के लिए डिफ़ॉल्ट मान कुछ बिंदु पर 1 से 3 से बदल गया था।

2

उत्तर आंशिक रूप से सही है। सच नहीं: hbase तीन संस्करणों को स्टोर करता है। सबूत नीचे देखें। यह सच है: आप के माध्यम से

alter 'marketdata', NAME => 'field', VERSIONS => 100 

संस्करणों की अधिकतम राशि जो HBase रिटर्न सेट कर सकते हैं लेकिन अभी मान लेते हैं, मैं संस्करण वेरिएबल नहीं बदला।

मैं 9. करने के लिए अपने HBase में दस प्रविष्टियों, 0 से टाइमस्टैम्प के साथ है सबसे वर्तमान टाइमस्टैम्प है:

hbase(main):025:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask'}         
COLUMN        CELL                     
field:ask      timestamp=9,   value=0.9940174211042572             
1 row(s) in 0.0590 seconds 

hbase(main):026:0> 

टाइमस्टैम्प 1 से 5 मान दिखाए जाते हैं कि इस प्रकार हैं:

hbase(main):027:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,5], VERSIONS=>5} 
COLUMN        CELL                     
field:ask      timestamp=4, value=0.530618878519702             
field:ask      timestamp=3, value=0.051028316270589014             
field:ask      timestamp=2,  value=0.11949750640509116             
3 row(s) in 0.0130 seconds 

hbase(main):028:0> 

... और जब मैं अपना अंत टाइमस्टैम्प 10 पर सेट करता हूं, तब भी यह केवल अंतिम तीन संस्करणों को दिखाता है जो उस टाइमस्टैम्प से पहले और पूर्व को दबा देता है:

hbase(main):028:0> get 'marketdata', 'instrument1', {COLUMN => 'field:ask', TIMERANGE => [0,10], VERSIONS=>5} 
COLUMN        CELL                     
field:ask      timestamp=9,  value=0.9940174211042572             
field:ask      timestamp=8,  value=0.6941263513176372             
field:ask      timestamp=7,  value=0.1814043435754933             
3 row(s) in 0.0400 seconds 

hbase(main):029:0> 
+1

प्रतीक्षा करें, तो यदि आप केवल 3 संस्करणों को संग्रहीत कर रहे हैं तो आप संस्करण 4,3,2 और 9,8,7 कैसे देख सकते हैं? शायद शेल केवल 3 लौट रहा है, किसी भी कारण से, लेकिन ऐसा लगता है कि आपके पास 'साबित' है कि और अधिक संस्करण हैं। असली जवाब भी अधिक जटिल है क्योंकि hbase संस्करणों को हटा देता है: यह वास्तव में नहीं है। यदि आप स्पष्ट रूप से डेटा हटाते हैं तो यह एक कबूतर जोड़ देगा और आपको कबूतर से पहले कोई डेटा नहीं दिखाई देगा। अन्य सभी डेटा उपलब्ध होंगे (और सभी डेटा संग्रहीत किए जाएंगे) जब तक कि अगली बड़ी कॉम्पैक्शन जो स्टोर फ़ाइल को फिर से लिखेगी और केवल संस्करणों की सही संख्या को बनाए रखेगी। – David

+0

हाय डेविड, आप कोडिंगफू द्वारा संपादित प्रतिक्रिया के आधार पर डाउनवॉटेड हैं। – user1052080

+2

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

0

कॉलम परिवार स्तर पर संस्करण की अवधारणा को कड़ाई से बनाए रखा जाता है। यह एक विन्यास योग्य पैरामीटर है।

  columnFamily.setMaxVersions(required version); 

एकाधिक एचएफआईल्स से डेटा पढ़ने की संभावनाओं को लाने के दौरान, अधिक संस्करणों में से एक है।

न्यूनतम संस्करण बनाए रखने और एक एकल ब्लॉब में डेटा को समाहित करने का सबसे अच्छा तरीका होगा।

संबंधित मुद्दे