नमूना HBase POC

इस पोस्ट में HBase के लिए कॉन्सेप्ट के एक सैंपल प्रूफ के बारे में चर्चा की गई है। आप HBase की अपनी समझ को बेहतर बनाने के लिए अवधारणा की स्पष्ट व्याख्या पा सकते हैं।

इस ब्लॉग में हम HBase के लिए अवधारणा का एक नमूना सबूत के बारे में चर्चा करेंगे।





यहां हमारे पास नीचे की छवि के अनुसार एक डेटा सेट है।

Sample_Hbase_Use_case



इस डेटा सेट में कुल इनकमिंग कॉल की अवधि, आउटगोइंग कॉल और किसी विशेष मोबाइल नंबर से भेजे गए संदेशों के बारे में विवरण होता है।

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

झांकी कैसे एक सेट बनाने के लिए

अब हमारा कार्य किसी विशेष तिथि पर फोन नंबर से भेजे गए इनकमिंग और आउटगोइंग कॉल और संदेशों की अवधि की जानकारी प्राप्त करना है।



इस उपयोग के मामले में, मैं 15 के रिकॉर्ड को फ़िल्टर करने का प्रयास कर रहा हूंमार्च 2014. इसे प्राप्त करने के लिए एक HBase कार्यक्रम है।

नीचे इसका पूरा कोड है।

सह लोक कक्षा नमूना है{{

निजी स्थिर विन्यास आत्मविश्वास

स्थिर HTable तालिका

सह लोक नमूना (स्ट्रिंग तालिकानाम, स्ट्रिंग colFams) फेंकता है IOException {

आत्मविश्वास = HBaseConfiguration। सृजन करना ()

createTable (तालिका नाम, colFams)

तालिका = नया HTable ( आत्मविश्वास , तालिका नाम)

}

शून्य createTable (स्ट्रिंग तालिका नाम, स्ट्रिंग colFams) फेंकता है IOException {

HBaseAdmin hbase = नया HBaseAdmin ( आत्मविश्वास )

HTableDescriptor desc = नया HTableDescriptor (तालिका नाम)

HColumnDescriptor मेटा = नया HColumnDescriptor (colFams.getBytes ())

desadadFamily (मेटा)

hbase.createTable (desc)

}

सह लोक स्थिर शून्य AddColumnEntry (स्ट्रिंग तालिका नाम, स्ट्रिंग पंक्ति,

स्ट्रिंग colFamilyName, स्ट्रिंग कॉलनाम, स्ट्रिंग मान)

फेंकता है IOException {

बाइट [] rowKey = बाइट्स। टॉयलेट्स (पंक्ति)

पुट्टा लगाना = नया रखो (rowKey)

putdata.add (बाइट्स) टॉयलेट्स (colFamilyName), बाइट्स। टॉयलेट्स (कोलनेम),

बाइट्स। टॉयलेट्स (मान)

तालिका .put (पुट्टा)

}

सह लोक स्थिर शून्य getAllRecord (स्ट्रिंग तालिका नाम, स्ट्रिंग प्रारंभपार्टीकेय,

स्ट्रिंग एंडपार्टियलकेय) फेंकता है IOException {

प्रयत्न {{

स्कैन एस

अगर (startPartialKey == अमान्य || endPartialKey == अमान्य )

s = नया स्कैन ()

अन्य

s = नया स्कैन (बाइट्स) टॉयलेट्स (startPartialKey),

बाइट्स। टॉयलेट्स (एंडपार्टियलकेय))

ResultScanner ss = तालिका .getScanner (s)

हैश मैपoutputRec = नया हैश मैप()

स्ट्रिंग imsi = ''

के लिये (परिणाम r: ss) {

हशपप कीवल = नया हैश मैप()

के लिये (KeyValue kv: r.raw ()) {

इमसी = नया स्ट्रिंग (kv.getRow ())। सबटाइटलिंग (10)

keyVal.put ( नया स्ट्रिंग (kv.getQualifier ()),

नया स्ट्रिंग (kv.getValue ()))

outputRec.put (imsi, keyVal)

अगर (कीवैल.साइज़ () == 3)

प्रणाली। बाहर .println (ले + '' + 'आने वाले मिनट:'

+ KeyVal.get ('c1”) + 'आगामी मिनट:'

+ KeyVal.get ('c2 V) +' संदेश: '

+ keyVal.get ('c3'))

}

}

} आखिरकार {{

}

}

सह लोक स्थिर शून्य मुख्य (स्ट्रिंग [] args) फेंकता है IOException {

स्ट्रिंग तालिकानाम = 'प्रसूतिगृह'

स्ट्रिंग colFamilyNames = 'i'

नमूना परीक्षण = नया नमूना (तालिका का नाम, colFamilyNames)

स्ट्रिंग फ़ाइलनाम = '/ होम / क्लाउडडर / डेस्कटॉप / डेटा'

// यह एक बार में एक लाइन को संदर्भित करेगा

स्ट्रिंग लाइन = अमान्य

प्रयत्न {{

// FileReader डिफ़ॉल्ट इनकोडिंग में पाठ फ़ाइलों को पढ़ता है।

FileReader fileReader = नया FileReader (फ़ाइल नाम)

// हमेशा बफ़ररएडर में FileReader लपेटें।

बफेडरएडर बफर्डरएडर = नया बफ़रडियर (फ़ाइलरेडर)

जबकि ((पंक्ति = बफ़रडेडरएडर.लाइन ())! = अमान्य ) {

स्ट्रिंग [] मान = line.split ('')

addColumnEntry (तालिका नाम, मान [0] + '-' + मान [1],

colFamilyNames, 'c1', मान [2])

addColumnEntry (तालिका नाम, मान [0] + '-' + मान [1],

colFamilyNames, 'c2', मान [3])

कैसे जावा में एक विधि को समाप्त करने के लिए

addColumnEntry (तालिका नाम, मान [0] + '-' + मान [1],

colFamilyNames, 'c3', मान [4])

}

bufferedReader.close ()

} पकड़ (FileNotFoundException पूर्व) {

प्रणाली। बाहर .println ('फ़ाइल खोलने में असमर्थ' + फ़ाइलनाम + 'n')

} पकड़ (IOException पूर्व) {

प्रणाली। बाहर .println ('फ़ाइल पढ़ने में त्रुटि' + फ़ाइल का नाम + '“ ')

// या हम ऐसा कर सकते हैं:

// ex.printStackTrace ()

}

getAllRecord (तालिका नाम, '20140315', '20140316')

}

}

यहां हमने कॉन्फ़िगरेशन, HTable क्लास और नाम के साथ Hbase टेबल बनाते हुए एक ऑब्जेक्ट बनाया है: प्रसूता और स्तंभ परिवार: मैं

इस उपयोग के मामले में, हम इस Hbase तालिका के लिए पंक्ति कुंजी के रूप में '-' द्वारा अलग किए गए दिनांक और मोबाइल नंबर के संयोजन को ले जाएंगे और इनकमिंग, आउटगोइंग कॉल अवधि ', कॉलम' c1 'के रूप में भेजे गए संदेशों की संख्या,' c2 ', कॉलम परिवार' i 'के लिए' c3 '।

हमारे पास Cloudera के स्थानीय फ़ाइल सिस्टम में संग्रहीत इनपुट डेटा है। इसलिए हमें जावा लॉजिक लिखना होगा जो फ़ाइल से डेटा पढ़ता है।

नीचे जावा तर्क है।

इस पद्धति में हम स्तंभ परिवार के प्रत्येक स्तंभ के लिए तालिका में डेटा संग्रहीत कर रहे हैं।

हम स्कैन कमांड का उपयोग करके Hbase तालिका ords daterecords ’में संग्रहीत डेटा की जांच कर सकते हैं।

आप नीचे दी गई छवि के अनुसार डेटा प्राप्त करेंगे।

सरणी जावास्क्रिप्ट की लंबाई ज्ञात करें

अब हमने HBase तालिका में सफलतापूर्वक डेटा डाला है।

आइए हम एक विशेष तिथि की तालिका में संग्रहीत रिकॉर्ड को पुनः प्राप्त करते हैं।

इस उपयोग के मामले में, हम दिनांक: 15 के रिकॉर्ड को पुनः प्राप्त करने का प्रयास कर रहे हैंमार्च 2014

हमारे द्वारा बनाए गए रिकॉर्ड को पुनः प्राप्त करने के लिए एक विधि

getAllRecord (स्ट्रिंग तालिकानाम, स्ट्रिंग प्रारंभपार्टकेली, स्ट्रिंग अंतराष्ट्रीयकेय)

पहला पैरामीटर तालिका नाम का प्रतिनिधित्व करता है, दूसरा प्रारंभ तिथि का प्रतिनिधित्व करता है जिसमें से हमें डेटा को पुनः प्राप्त करने की आवश्यकता होती है और तीसरा प्रारंभ तिथि की अगली तारीख होती है।

जैसे:

getAllRecord (तालिका नाम, '20140315', '20140316')

अब हम इसे समझते हैं तर्क इस विधि का।

हम HBase API का उपयोग startPartialKey और endPartialKey की मदद से Hbase टेबल को स्कैन करने की कोशिश कर रहे हैं।

चूंकि StartPartialKey और endPartialkey शून्य नहीं हैं, इसलिए यह अन्य ब्लॉक में जाएगा और startPartialKey के मान को रिकॉर्ड करेगा।

हमने परिणाम स्कैनर का एक ऑब्जेक्ट बनाया है, जो परिणाम के रूप में आउटपुट करने के लिए Hbase तालिका के स्कैन किए गए रिकॉर्ड और एक HashMap को संग्रहीत करता है।

हम रिजल्ट स्कैनर में डेटा स्टोर प्राप्त करने और लूप के लिए निष्पादित करने के लिए परिणाम का एक ऑब्जेक्ट बना रहे हैं।

imsi वह स्ट्रिंग है जिसे मोबाइल नंबर को स्टोर करने के लिए परिभाषित किया गया है और keyVal एक हैश मैप है जो किसी विशेष फोन के कॉलम से प्राप्त आउटपुट को संग्रहीत करता है।

हम दे चुके हैं 20140315-1234567890 के रूप में उपद्रवी Hbase तालिका में। इसमें 20140315 तारीख का प्रतिनिधित्व करता है और 1234567890 मोबाइल नंबर का प्रतिनिधित्व करता है।

जैसा कि हमें केवल मोबाइल नंबर की आवश्यकता है जिसे हम इसे पुनः प्राप्त करने के लिए प्रतिस्थापन विधि का उपयोग कर रहे हैं।

हम r.raw () से डेटा पुनर्प्राप्त कर रहे हैं और पुट का उपयोग करके इसे HashMap में संग्रहीत कर रहे हैं।

अंत में हम उन्हें कंसोल पर प्रिंट करने का प्रयास कर रहे हैं।

आउटपुट निम्न छवि में होगा।

हमने दिनांक: 15 के रिकॉर्ड को सफलतापूर्वक प्राप्त कर लिया हैमार्च 2014।