6.1 HBase चा शोध कोणी लावला आणि का

या व्याख्यानात, आम्ही Hbase सारख्या अद्भूत साधनाबद्दल बोलू, ज्याने अलीकडेच खूप लोकप्रियता मिळवली आहे: उदाहरणार्थ, Facebook हे त्याच्या संदेशन प्रणालीचा आधार म्हणून वापरते आणि हे आधीच बरेच काही सांगते.

व्याख्यानामध्ये बिग टेबलची संकल्पना आणि त्याची मोफत अंमलबजावणी, शास्त्रीय रिलेशनल डेटाबेस (जसे की MySQL आणि ओरॅकल) आणि रेडिस, एरोस्पाइक आणि मेमकॅशेड सारख्या महत्त्वाच्या स्टोरेजमधील कामाची वैशिष्ट्ये आणि फरक याबद्दल चर्चा केली जाईल. नेहमीप्रमाणे, अंकाच्या इतिहासापासून सुरुवात करूया. इतर अनेक BigData प्रकल्पांप्रमाणे, Hbase चा जन्म Google ने विकसित केलेल्या संकल्पनेतून झाला. Hbase च्या मागे असलेल्या तत्त्वांचे वर्णन Bigtable : A Distributed Storage System for Structured Data लेखामध्ये केले आहे .

आम्ही मागील लेक्चर्समध्ये चर्चा केल्याप्रमाणे, मॅपरेड्यूस पॅराडाइम वापरून बॅच डेटा प्रोसेसिंगसाठी सामान्य फाईल्स योग्य आहेत. दुसरीकडे, फायलींमध्ये संग्रहित माहिती अद्यतनित करण्यासाठी ऐवजी गैरसोयीची आहे; फायली देखील यादृच्छिक प्रवेशाच्या शक्यतेपासून वंचित आहेत. यादृच्छिक प्रवेशासह जलद आणि सोयीस्कर कामासाठी, एरोस्पाइक, रेडिस, काउचबेस, मेमकॅशेड सारख्या की-व्हॅल्यू स्टोरेज सारख्या nosql प्रणालींचा वर्ग आहे. तथापि, या प्रणालींमध्ये बॅच प्रक्रिया सहसा खूप गैरसोयीचे असते. Hbase हा बॅच प्रोसेसिंगची सोय आणि अद्ययावत करण्याची सोय आणि यादृच्छिक प्रवेशाची सोय एकत्र करण्याचा प्रयत्न आहे.

6.2 डेटा मॉडेल

HBase एक वितरित, स्तंभ-देणारं, मल्टीव्हर्शन की-व्हॅल्यू डेटाबेस आहे.

  • डेटा Hbase मध्ये RowKey नावाच्या प्राथमिक की द्वारे अनुक्रमित केलेल्या सारण्यांमध्ये आयोजित केला जातो.
  • प्रत्येक RowKey की साठी, विशेषतांचा (किंवा स्तंभ) अमर्यादित संच संग्रहित केला जाऊ शकतो.
  • कॉलम्स कॉलम फॅमिली नावाच्या कॉलमच्या गटांमध्ये आयोजित केले जातात. नियमानुसार, समान वापर आणि स्टोरेज पॅटर्न असलेले स्तंभ एका स्तंभ कुटुंबात एकत्र केले जातात.
  • प्रत्येक विशेषतासाठी, अनेक भिन्न आवृत्त्या संग्रहित केल्या जाऊ शकतात. वेगवेगळ्या आवृत्त्यांमध्ये वेगवेगळे टाइमस्टॅम्प असतात.

रेकॉर्ड भौतिकरित्या RowKey क्रमवारीत संग्रहित केले जातात. या प्रकरणात, भिन्न स्तंभ कुटुंबाशी संबंधित डेटा स्वतंत्रपणे संग्रहित केला जातो, जो आवश्यक असल्यास, केवळ इच्छित स्तंभ कुटुंबातील डेटा वाचण्याची परवानगी देतो.

जेव्हा एखादी विशिष्ट विशेषता हटविली जाते, तेव्हा ती ताबडतोब भौतिकरित्या हटविली जात नाही, परंतु केवळ विशेष थडग्याच्या ध्वजाने चिन्हांकित केली जाते. जेव्हा मेजर कॉम्पॅक्शन ऑपरेशन केले जाते तेव्हा डेटाचे भौतिक हटविणे नंतर होईल.

समान स्तंभ गटाशी संबंधित आणि समान कीशी संबंधित गुणधर्म भौतिकरित्या क्रमवारीत सूची म्हणून संग्रहित केले जातात. कोणतीही विशेषता प्रत्येक कीसाठी अनुपस्थित किंवा उपस्थित असू शकते आणि जर विशेषता अनुपस्थित असेल, तर यामुळे रिक्त मूल्ये संचयित करण्याचे ओव्हरहेड होत नाही.

सूची आणि स्तंभ गट नावे निश्चित आहेत आणि स्पष्ट मांडणी आहे. स्तंभ गट स्तरावर, टाइम टू लाइव्ह (TTL) आणि संचयित आवृत्त्यांची कमाल संख्या यासारखे पॅरामीटर्स सेट केले जातात. विशिष्ट आवृत्तीसाठी टाइमस्टॅम्प आणि सध्याच्या वेळेतील फरक TTL पेक्षा जास्त असल्यास, एंट्री हटवण्यासाठी चिन्हांकित केली जाते. एखाद्या विशिष्ट गुणधर्मासाठी आवृत्त्यांची संख्या आवृत्त्यांच्या कमाल संख्येपेक्षा जास्त असल्यास, रेकॉर्ड हटविण्यासाठी देखील चिन्हांकित केले जाते.

Hbase डेटा मॉडेल मुख्य-मूल्य जुळणी म्हणून लक्षात ठेवता येईल:

<table, RowKey, Column Family, Column, timestamp> -> Value

6.3 समर्थित ऑपरेशन्स

hbase मध्ये समर्थित ऑपरेशन्सची यादी अगदी सोपी आहे. 4 मुख्य ऑपरेशन्स समर्थित आहेत:

  • ठेवा : hbase वर नवीन एंट्री जोडा. या एंट्रीचा टाइमस्टॅम्प हाताने सेट केला जाऊ शकतो, अन्यथा तो वर्तमान वेळेवर स्वयंचलितपणे सेट केला जाईल.
  • मिळवा : विशिष्ट RowKey साठी डेटा मिळवा. आपण कॉलम फॅमिली निर्दिष्ट करू शकता ज्यामधून आम्ही डेटा आणि आम्ही वाचू इच्छित असलेल्या आवृत्त्यांची संख्या घेऊ.
  • स्कॅन करा : एक एक करून रेकॉर्ड वाचा. आपण ज्या रेकॉर्डमधून वाचन सुरू करतो ते रेकॉर्ड, ज्या रेकॉर्डवर वाचायचे आहे, रेकॉर्ड्सची संख्या, ज्या कॉलम फॅमिलीमधून वाचन केले जाईल आणि प्रत्येक रेकॉर्डसाठी आवृत्त्यांची कमाल संख्या निर्दिष्ट करू शकता.
  • हटवा : हटवण्यासाठी विशिष्ट आवृत्ती चिन्हांकित करा. कोणतेही भौतिक हटवले जाणार नाही, ते पुढील प्रमुख कॉम्पॅक्शनपर्यंत पुढे ढकलले जाईल (खाली पहा).

6.4 आर्किटेक्चर

HBase हा एक वितरित डेटाबेस आहे जो डझनभर किंवा शेकडो भौतिक सर्व्हरवर चालू शकतो, त्यांपैकी काही अयशस्वी झाले तरीही विनाव्यत्यय ऑपरेशन सुनिश्चित करतो. म्हणून, क्लासिक रिलेशनल डेटाबेसच्या तुलनेत HBase चे आर्किटेक्चर खूपच गुंतागुंतीचे आहे.

HBase त्याच्या कामासाठी दोन मुख्य प्रक्रिया वापरते:

1. प्रदेश सर्व्हर - एक किंवा अधिक प्रदेशांना सेवा देतो. क्षेत्र म्हणजे सलग RowKeys च्या विशिष्ट श्रेणीशी संबंधित रेकॉर्डची श्रेणी. प्रत्येक प्रदेशात हे समाविष्ट आहे:

  • पर्सिस्टंट स्टोरेज हे HBase मधील मुख्य डेटा स्टोरेज आहे. डेटा भौतिकरित्या HDFS वर, एका विशेष HFile स्वरूपात संग्रहित केला जातो. HFile मधील डेटा RowKey क्रमवारीत संग्रहित केला जातो. एक जोडी (प्रदेश, स्तंभ कुटुंब) किमान एक HFIle शी संबंधित आहे.
  • मेमस्टोर - बफर लिहा. डेटा HFile d मध्ये क्रमवारीत संग्रहित केल्यामुळे, प्रति रेकॉर्ड HFile अद्यतनित करणे खूप महाग आहे. त्याऐवजी, लिहिताना, डेटा एका विशेष मेमस्टोर मेमरी क्षेत्रात प्रवेश करतो, जिथे तो काही काळ जमा होतो. जेव्हा मेमस्टोअर काही गंभीर मूल्याने भरले जाते, तेव्हा डेटा नवीन HFile वर लिहिला जातो.
  • ब्लॉककॅश - वाचनासाठी कॅशे. तुम्हाला वारंवार वाचल्या जाणार्‍या डेटावरील वेळेची लक्षणीय बचत करण्याची अनुमती देते.
  • अहेड लॉग (WAL) लिहा . डेटा मेमस्टोअरवर लिहिला जात असल्याने, क्रॅश झाल्यामुळे डेटा गमावण्याचा काही धोका असतो. हे होण्यापासून रोखण्यासाठी, हाताळणीच्या वास्तविक अंमलबजावणीपूर्वी सर्व ऑपरेशन्स एका विशेष लॉग फाइलमध्ये येतात. हे आपल्याला कोणत्याही अपयशानंतर डेटा पुनर्प्राप्त करण्यास अनुमती देते.

2. मास्टर सर्व्हर - HBase क्लस्टरमधील मुख्य सर्व्हर. मास्टर क्षेत्रीय सर्व्हरमधील प्रदेशांचे वितरण व्यवस्थापित करतो, प्रदेशांची नोंद ठेवतो, नियमित कार्ये सुरू करणे व्यवस्थापित करतो आणि इतर उपयुक्त कार्ये करतो.

सेवांमधील क्रिया समन्वयित करण्यासाठी, HBase Apache ZooKeeper वापरते, कॉन्फिगरेशन व्यवस्थापित करण्यासाठी आणि सेवा समक्रमित करण्यासाठी डिझाइन केलेली एक विशेष सेवा.

जेव्हा प्रदेशातील डेटाचे प्रमाण वाढते आणि ते एका विशिष्ट आकारापर्यंत पोहोचते, तेव्हा Hbase विभाजित करणे सुरू होते, एक ऑपरेशन जे प्रदेशाला 2 ने विभाजित करते. प्रदेशांचे सतत विभाजन टाळण्यासाठी, तुम्ही प्रदेशांच्या सीमा आधीच सेट करू शकता आणि त्यांची कमाल वाढवू शकता. आकार

एका प्रदेशासाठीचा डेटा अनेक HFiles मध्ये संग्रहित केला जाऊ शकतो, Hbase वेळोवेळी कामाला गती देण्यासाठी त्यांना एकत्र विलीन करतो. या ऑपरेशनला Hbase मध्ये कॉम्पॅक्शन म्हणतात. कॉम्पॅक्शन दोन प्रकारचे आहेत:

  • किरकोळ कॉम्पॅक्शन . आपोआप सुरू होते, पार्श्वभूमीत चालते. इतर Hbase ऑपरेशन्सच्या तुलनेत कमी प्राधान्य आहे.
  • मुख्य कॉम्पॅक्शन . हे हाताने किंवा विशिष्ट ट्रिगर्सच्या घटनेवर लॉन्च केले जाते (उदाहरणार्थ, टाइमरद्वारे). त्याला उच्च प्राधान्य आहे आणि क्लस्टरची गती लक्षणीयरीत्या कमी होऊ शकते. जेव्हा क्लस्टरवरील भार कमी असतो तेव्हा मुख्य कॉम्पॅक्शन सर्वोत्तम प्रकारे केले जातात. मेजर कॉम्पॅक्शन पूर्वी थडग्याच्या दगडाने चिन्हांकित केलेला डेटा भौतिकरित्या हटवते.

6.5 HBase सह काम करण्याचे मार्ग

HBase शेल

Hbase सह प्रारंभ करण्याचा सर्वात सोपा मार्ग म्हणजे hbase शेल युटिलिटी वापरणे. कोणत्याही hbase क्लस्टर नोडवर hbase स्थापित केल्यानंतर ते लगेच उपलब्ध होते.

Hbase शेल हे सर्व मूलभूत Hbase ऑपरेशन्ससाठी अंगभूत समर्थनासह एक jruby कन्सोल आहे. दोन कॉलम फॅमिलीसह वापरकर्ता टेबल तयार करणे, त्यावर काही फेरफार करणे आणि hbase शेलमध्ये टेबल शेवटी टाकण्याचे उदाहरण खालीलप्रमाणे आहे:

create 'users', {NAME => 'user_profile', VERSIONS => 5}, {NAME => 'user_posts', VERSIONS => 1231231231} 
put 'users', 'id1', 'user_profile:name', 'alexander' 
put 'users', 'id1', 'user_profile:second_name', 'alexander' 
get 'users', 'id1' 
put 'users', 'id1', 'user_profile:second_name', 'kuznetsov' 
get 'users', 'id1' 
get 'users', 'id1', {COLUMN => 'user_profile:second_name', VERSIONS => 5} 
put 'users', 'id2', 'user_profile:name', 'vasiliy' 
put 'users', 'id2', 'user_profile:second_name', 'ivanov' 
scan 'users', {COLUMN => 'user_profile:second_name', VERSIONS => 5} 
delete 'users', 'id1', 'user_profile:second_name' 
get 'users', 'id1' 
disable 'users' 
drop 'users'

मूळ API

इतर हॅडूप-संबंधित प्रकल्पांप्रमाणे, hbase जावामध्ये लागू केले जाते, म्हणून नेटिव्ह API Java मध्ये उपलब्ध आहे. नेटिव्ह API अधिकृत वेबसाइटवर चांगले दस्तऐवजीकरण केले आहे. तेथून घेतलेले Hbase API वापरण्याचे येथे एक उदाहरण आहे:

import java.io.IOException;

import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

public class MyLittleHBaseClient {
  public static void main(String[] args) throws IOException {
	Configuration config = HBaseConfiguration.create();
	Connection connection = ConnectionFactory.createConnection(config);
	try {
  	Table table = connection.getTable(TableName.valueOf("myLittleHBaseTable"));
  	try {
    	Put p = new Put(Bytes.toBytes("myLittleRow"));
    	p.add(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"),
    	Bytes.toBytes("Some Value"));
    	table.put(p);

    	Get g = new Get(Bytes.toBytes("myLittleRow"));
    	Result r = table.get(g);
    	byte [] value = r.getValue(Bytes.toBytes("myLittleFamily"),
      	Bytes.toBytes("someQualifier"));

    	String valueStr = Bytes.toString(value);
    	System.out.println("GET: " + valueStr);

    	Scan s = new Scan();
    	s.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"));
    	ResultScanner scanner = table.getScanner(s);
    	try {
       	for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
         	System.out.println("Found row: " + rr);
       	}
     	} finally {
       	scanner.close();
     	}
   	} finally {
     	if (table != null) table.close();
   	}
 	} finally {
   	connection.close();
 	}
  }
}

काटकसर, REST आणि इतर प्रोग्रामिंग भाषांसाठी समर्थन

इतर प्रोग्रामिंग भाषांमधून काम करण्यासाठी, Hbase Thrift API आणि Rest API प्रदान करते. त्यांच्यावर आधारित, क्लायंट सर्व प्रमुख प्रोग्रामिंग भाषांसाठी तयार केले जातात: पायथन, पीएचपी, जावा स्क्रिप्ट इ.

6.6 HBase सह काम करण्याची काही वैशिष्ट्ये

  1. Hbase MapReduce सह बॉक्सच्या बाहेर समाकलित होते आणि विशेष TableInputFormat आणि TableOutputFormat वापरून इनपुट आणि आउटपुट म्हणून वापरले जाऊ शकते.

  2. योग्य RowKey निवडणे खूप महत्वाचे आहे. RowKey ने सर्व प्रदेशांमध्ये चांगले समान वितरण प्रदान करणे आवश्यक आहे, अन्यथा तथाकथित "हॉट प्रदेश" - इतरांपेक्षा जास्त वेळा वापरल्या जाणार्‍या प्रदेशांचा धोका असतो, ज्यामुळे सिस्टम संसाधनांचा अकार्यक्षम वापर होतो.

  3. डेटा एकट्याने अपलोड केला नसल्यास, परंतु लगेच मोठ्या बॅचेसमध्ये, Hbase एका विशेष बल्कलोड यंत्रणेचे समर्थन करते जे तुम्हाला सिंगल पुट्स वापरण्यापेक्षा खूप जलद डेटा अपलोड करण्यास अनुमती देते. बल्कलोड हे मूलत: दोन-चरण ऑपरेशन आहे:

    • विशेष MapReduce जॉब वापरून पुट्सच्या सहभागाशिवाय HFile तयार करणे
    • या फाइल्स थेट Hbase मध्ये टाकत आहे
  4. Hbase त्याचे मेट्रिक्स Ganglia मॉनिटरिंग सर्व्हरवर आउटपुट करण्यास समर्थन देते. hbase समस्यांच्या तळाशी जाण्यासाठी Hbase चे प्रशासन करताना हे खूप उपयुक्त ठरू शकते.

पंक्ती की

RowKey हा वापरकर्ता आयडी आहे, जो एक GUUID आहे, एक स्ट्रिंग विशेषत: जगभरात अद्वितीय होण्यासाठी व्युत्पन्न केली जाते. GUUID समान रीतीने वितरीत केले जातात, जे सर्व्हरवर डेटाचे चांगले वितरण देते.

स्तंभ कुटुंब

आमचे स्टोरेज दोन स्तंभ कुटुंबे वापरते:

  • डेटा स्तंभांचा हा गट डेटा संग्रहित करतो जो यापुढे जाहिरातींच्या उद्देशांसाठी संबंधित नाही, जसे की वापरकर्त्याने विशिष्ट URL ला भेट दिली आहे. या स्तंभ कुटुंबासाठी TTL 2 महिन्यांसाठी सेट केले आहे, आवृत्त्यांच्या संख्येची मर्यादा 2000 आहे.
  • दीर्घ डेटा. स्तंभांचा हा गट डेटा संग्रहित करतो जो कालांतराने त्याची प्रासंगिकता गमावत नाही, जसे की लिंग, जन्मतारीख आणि इतर "शाश्वत" वापरकर्ता वैशिष्ट्ये.

स्पीकर्स

प्रत्येक प्रकारच्या वापरकर्त्याची तथ्ये वेगळ्या स्तंभात संग्रहित केली जातात. उदाहरणार्थ, Data:_v स्तंभ वापरकर्त्याने भेट दिलेल्या URL संग्रहित करतो आणि LongData:gender स्तंभ वापरकर्त्याचे लिंग संचयित करतो.

या वस्तुस्थितीचा टाइम स्टॅम्प टाइमस्टॅम्प म्हणून संग्रहित केला जातो. उदाहरणार्थ, डेटा:_v स्तंभामध्ये, वापरकर्त्याने विशिष्ट URL ला भेट दिलेली वेळ म्हणजे टाइमस्टॅम्प.

ही वापरकर्ता डेटा स्टोरेज रचना आमच्या वापराच्या पद्धतीशी अगदी व्यवस्थित बसते आणि तुम्हाला वापरकर्ता डेटा त्वरीत अद्यतनित करण्याची, वापरकर्त्यांबद्दल सर्व आवश्यक माहिती पटकन मिळविण्याची आणि, MapReduce वापरून, एकाच वेळी सर्व वापरकर्त्यांच्या डेटावर द्रुतपणे प्रक्रिया करण्याची परवानगी देते.

6.7 पर्याय

HBase प्रशासित करणे आणि वापरणे खूपच जटिल आहे, म्हणून HBase वापरण्यापूर्वी पर्यायांकडे लक्ष देणे योग्य आहे:

  • रिलेशनल डेटाबेस एक अतिशय चांगला पर्याय, विशेषत: जेव्हा डेटा एका मशीनवर बसतो तेव्हा. तसेच, सर्व प्रथम, जेव्हा प्राथमिक व्यतिरिक्त इतर निर्देशांकांचे व्यवहार महत्त्वाचे असतात तेव्हा आपण संबंधात्मक डेटाबेसबद्दल विचार केला पाहिजे.

  • की-व्हॅल्यू स्टोरेज . जेव्हा लेटन्सी आवश्यक असते आणि बॅच प्रक्रिया कमी महत्त्वाची असते तेव्हा Redis आणि Aerospike सारखे स्टोरेज अधिक योग्य असतात.

  • MapReduce सह फाइल्स आणि त्यांची प्रक्रिया . जर डेटा फक्त जोडला गेला असेल आणि क्वचितच अपडेट/बदलला असेल, तर HBase न वापरणे चांगले आहे, परंतु फक्त फायलींमध्ये डेटा संग्रहित करणे चांगले आहे. फायलींसह कार्य सुलभ करण्यासाठी, आपण पोळे, डुक्कर आणि इम्पाला यासारख्या साधनांचा वापर करू शकता.

HBase चा वापर न्याय्य आहे जेव्हा:

  • तेथे भरपूर डेटा आहे आणि ते एका संगणकावर / सर्व्हरवर बसत नाहीत
  • डेटा वारंवार अपडेट केला जातो आणि हटविला जातो
  • डेटामध्ये एक स्पष्ट "की" आहे, ज्यावर इतर सर्व गोष्टी बांधणे सोयीचे आहे
  • बॅच प्रक्रिया आवश्यक आहे
  • विशिष्ट कींद्वारे डेटावर यादृच्छिक प्रवेश आवश्यक आहे