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

स्पार्क HBase कनेक्टर - समीक्षा में एक वर्ष

यह ब्लॉग पोस्ट Cloudera के साथ विलय से पहले Hortonworks.com पर प्रकाशित हुआ था। कुछ लिंक, संसाधन या संदर्भ अब सटीक नहीं हो सकते हैं।

2016 में, हमने स्पार्क HBase कनेक्टर (SHC) का दूसरा संस्करण v1.0.1 प्रकाशित किया। इस ब्लॉग में, हम उन प्रमुख विशेषताओं के बारे में जानेंगे जिन्हें हमने इस वर्ष लागू किया है।

फीनिक्स कोडर का समर्थन करें

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

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

चूंकि फीनिक्स डिफ़ॉल्ट कोडर है, उपयोगकर्ताओं के लिए एकमात्र परिवर्तन यह है कि यदि वे डेटा कोडर के रूप में प्रिमिटिव टाइप का उपयोग करना चाहते हैं, तो उन्हें एसएचसी को सूचित करने के लिए अपने कैटलॉग में "टेबलकोडर":"प्रिमिटिव टाइप" निर्दिष्ट करने की आवश्यकता है कि वे इसके बजाय प्रिमिटिव टाइप का उपयोग करना चाहते हैं। फीनिक्स के "टेबलकोडर" के रूप में।

def कैटलॉग =s"""{
|"टेबल":{"नेमस्पेस":"डिफ़ॉल्ट", "नाम":"table1″, "टेबलकोडर":"PrimitiveType"},
|"rowkey ":"कुंजी",
|"कॉलम":{
|"col0″:{"cf":"rowkey", "col":"key", "type":"string"} ,
|"col1″:{"cf":"cf1″, "col":"col1″, "type":"boolean"},
|"col2″:{"cf":"cf2″, "col":"col2″, "type":"double"},
|"col3″:{"cf":"cf3″, "col":"col3″, "type" :"float"},
|"col4″:{"cf":"cf4″, "col":"col4″, "type":"int"},
|"col5″:{"cf":"cf5″, "col":"col5″, "type":"bigint"},
|"col6″:{"cf":"cf6″, "col":"col6 , "टाइप":"स्मॉलिंट"},
|"col7″:{"cf":"cf7″, "col":"col7″, "टाइप":"स्ट्रिंग"},
|"col8″:{"cf":"cf8″, "col":"col8″, "type":"tinyint"}
|}
|}"""stripMargin

कैश स्पार्क HBase कनेक्शन

SHC ने कनेक्शन ऑब्जेक्ट को HBase से पहले कैश नहीं किया था। विशेष रूप से, 'ConnectionFactory.createConnection' को कॉल हर बार किया जाता था जब SHC को HBase तालिकाओं और क्षेत्रों का दौरा करने की आवश्यकता होती थी। उपयोगकर्ता इसे केवल निष्पादक लॉग को देखकर और प्रत्येक अनुरोध के लिए स्थापित किए जा रहे ज़ूकीपर कनेक्शन को देखकर देख सकते हैं। इंटरफ़ेस कनेक्शन के दस्तावेज़ीकरण में, यह कहता है कि कनेक्शन निर्माण एक भारी वजन वाला ऑपरेशन है और कनेक्शन कार्यान्वयन थ्रेड-सुरक्षित हैं। इसलिए, लंबे समय तक चलने वाली प्रक्रियाओं के लिए, SHC के लिए कनेक्शन को कैश्ड रखना बहुत उपयोगी होगा। इस सुविधा के साथ, SHC बनाए गए कनेक्शनों की संख्या को बहुत कम कर देता है, और इस प्रक्रिया में अपने प्रदर्शन में बहुत सुधार करता है।

डुप्लिकेट कॉलम परिवारों का समर्थन करें

SHC ने डुप्लीकेट कॉलम परिवार समर्थन का समर्थन किया है। अब उपयोगकर्ता अपने कैटलॉग को इस तरह परिभाषित कर सकते हैं:

def कैटलॉग =s"""{
|"टेबल":{"नेमस्पेस":"डिफ़ॉल्ट", "नाम":"table1″, "टेबलकोडर":"PrimitiveType"},
|"rowkey ":"कुंजी",
|"कॉलम":{
|"col0″:{"cf":"rowkey", "col":"key", "type":"string"} ,
|"col1″:{"cf":"cf1″, "col":"col1″, "type":"boolean"},
|"col2″:{"cf":"cf1″, "col":"col2″, "type":"double"},
|"col3″:{"cf":"cf1″, "col":"col3″, "type" :"float"},
|"col4″:{"cf":"cf2″, "col":"col4″, "type":"int"},
|"col5″:{"cf":"cf2″, "col":"col5″, "type":"bigint"},
|"col6″:{"cf":"cf3″, "col":"col6 ″, "टाइप":"स्मॉलिंट"},
|"col7″:{"cf":"cf3″, "col":"col7″, "टाइप":"स्ट्रिंग"},
|"col8″:{"cf":"cf3″, "col":"col8″, "type":"tinyint"}
|}
|}"""stripMargin

उपरोक्त कैटलॉग परिभाषा में, कॉलम 'col0', 'col1' और 'col2' में एक ही कॉलम परिवार 'cf1' है।

Spark UnhandledFilters API का उपयोग करें

SHC ने Spark API unhandledFilters को भी लागू किया है, जो एक प्रभावी अनुकूलन है। यह एपीआई स्पार्क को उन फिल्टर्स के बारे में बताता है जो SHC सभी फिल्टर्स को वापस करने के विपरीत लागू नहीं कर रहे हैं। पिछला व्यवहार, इस मामले में, स्पार्क में डेटा खींचे जाने के बाद सभी फ़िल्टरों को फिर से लागू करना था। यह निष्क्रिय होना चाहिए, इसलिए कोई भी डेटा नहीं बदलता है, लेकिन यदि फ़िल्टर जटिल हैं तो यह महंगा हो सकता है।

SHC समुदाय

SHC समुदाय एक साल पहले की तुलना में बड़ा और अधिक प्रभावशाली है। 2016 में, हमने Hadoop समिट और HBase/Spark मीटअप में बातचीत की, और विस्तृत ब्लॉग लिखे। SHC उपयोगकर्ताओं की संख्या बढ़ने के साथ, हमें अधिक संख्या में उपयोगकर्ता प्रश्न प्राप्त हो रहे हैं। हम SHC के बढ़ते उपयोग को देखकर बहुत खुश हैं और यदि आपके पास इसे और बेहतर बनाने के बारे में कोई विचार है, तो कृपया हॉर्टनवर्क्स कम्युनिटी कनेक्शन के माध्यम से हमें फ़ीडबैक प्रदान करें।

स्वीकृति

हम इस काम में हमारा मार्गदर्शन करने और इस काम को मान्य करने में हमारी मदद करने के लिए ब्लूमबर्ग टीम को धन्यवाद देना चाहते हैं। हम HBase समुदाय को उनकी प्रतिक्रिया प्रदान करने और इसे बेहतर बनाने के लिए भी धन्यवाद देना चाहते हैं। अंत में, इस काम ने पहले स्पार्क HBase एकीकरण से सबक लिया है और हम सड़क को पक्का करने के लिए उनके डेवलपर्स को धन्यवाद देना चाहते हैं।

संदर्भ:

एसएचसी: https://github.com/hortonworks-spark/shc

अपाचे HBase: https://hbase.apache.org/

अपाचे स्पार्क: http://spark.apache.org/

अपाचे फीनिक्स: https://phoenix.apache.org/


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. कैसे करें:अपने मानचित्र में तृतीय-पक्ष पुस्तकालयों को शामिल करें नौकरी को कम करें

  2. प्रदर्शन में सुधार के लिए MapReduce में प्रदर्शन ट्यूनिंग

  3. Apache Hadoop के साथ निकट रीयल-टाइम डेटा प्रोसेसिंग के लिए आर्किटेक्चरल पैटर्न

  4. HBase और Hive - एक साथ बेहतर

  5. मुख्य MapReduce की विशेषताएं - MapReduce का महत्व