मेरी पिछली पोस्ट में आपने सीखा कि कैसे मॉर्फलाइनसोलरसिंक के साथ अपाचे फ्लूम का उपयोग करके, बैच मोड में और निकट वास्तविक समय में ईमेल संदेशों को अनुक्रमित किया जाए। इस पोस्ट में, आप सीखेंगे कि Apache HBase और Lily HBase Indexer के साथ Cloudera Search का उपयोग करके NGDATA और Cloudera द्वारा अनुरक्षित ईमेल को कैसे अनुक्रमित किया जाए। (यदि आपने पिछली पोस्ट नहीं पढ़ी है, तो मैं आपको आगे पढ़ने से पहले पृष्ठभूमि के लिए ऐसा करने की सलाह देता हूं।)
HBase Indexer या Flume MorphlineSolrSink को चुनने के लिए कौन-सा निकट-वास्तविक समय का तरीका पूरी तरह से आपके उपयोग के मामले पर निर्भर करेगा, लेकिन यह निर्णय लेते समय कुछ बातों पर ध्यान देना चाहिए:
- क्या दिए गए उपयोग के मामले में HBase एक इष्टतम भंडारण माध्यम है?
- क्या डेटा पहले से ही HBase में डाला जा चुका है?
- क्या कोई एक्सेस पैटर्न है जिसके लिए फ़ाइलों को HFiles के अलावा किसी अन्य प्रारूप में संग्रहीत करने की आवश्यकता होगी?
- यदि HBase वर्तमान में नहीं चल रहा है, तो क्या इसे लाने के लिए पर्याप्त हार्डवेयर संसाधन होंगे?
HBase में संग्रहीत अनुक्रमणिका दस्तावेज़ों में Cloudera खोज को कॉन्फ़िगर करने के दो तरीके हैं:कॉन्फ़िगरेशन फ़ाइलों को सीधे बदलना और Lily HBase अनुक्रमणिका को मैन्युअल रूप से या एक सेवा के रूप में प्रारंभ करना, या Cloudera प्रबंधक का उपयोग करके सब कुछ कॉन्फ़िगर करना। यह पोस्ट बाद वाले पर ध्यान केंद्रित करेगा, क्योंकि यह HBase पर खोज को सक्षम करने का सबसे आसान तरीका है - या उस मामले के लिए CDH पर कोई अन्य सेवा।
HBase प्रतिकृति और लिली HBase अनुक्रमणिका को समझना
इस समाधान को डिजाइन करते समय, क्लौडेरा ने HBase अनुक्रमण को प्रभावी बनाने के लिए चार प्रमुख आवश्यकताओं की पहचान की:
- इंडेक्सिंग लेटेंसी लगभग रीयल-टाइम (सेकंड) में होनी चाहिए और ट्यून करने योग्य होनी चाहिए
- सोलर इंडेक्स अंततः HBase तालिका के अनुरूप होना चाहिए, जबकि HBase पर इंसर्ट्स, अपडेट और डिलीट लागू होते हैं
- अनुक्रमण तंत्र को मापनीय और दोष सहिष्णु होना चाहिए
- अनुक्रमण प्रक्रिया HBase के लेखन को धीमा नहीं कर सकती
इन आवश्यकताओं को पूरा करने के लिए, Cloudera Search HBase के मूल प्रतिकृति तंत्र का उपयोग करता है। HBase प्रतिकृति से अपरिचित लोगों के लिए, यहाँ एक संक्षिप्त और बहुत उच्च-स्तरीय सारांश दिया गया है:
जैसे ही अद्यतन राइट-फ़ॉरवर्ड-लॉग (WAL) पर लागू होते हैं, HBase RegionServer इन अद्यतनों को एक अलग थ्रेड पर सुनता है। जब उस थ्रेड का बफ़र भर जाता है या यह फ़ाइल के अंत से टकराता है, तो यह सभी प्रतिकृति अद्यतनों के साथ बैचों को एक अलग क्लस्टर पर चल रहे पीयर रीजनसर्वर को भेजता है। WAL, इसलिए, काम करने के लिए अनुक्रमण के लिए आवश्यक है।
क्लौडेरा सर्च HBase प्रतिकृति तंत्र का उपयोग करता है, जो HBase पंक्ति उत्परिवर्तन घटनाओं को सुनता है और, एक अलग क्षेत्र सर्वर को अपडेट भेजने के बजाय, उन्हें लिली HBase इंडेक्सर को भेजता है। बदले में, Lily HBase Indexer Cloudera Morphlines परिवर्तन तर्क लागू करता है, घटनाओं को Solr फ़ील्ड में विभाजित करता है और उन्हें Apache Solr सर्वर में अग्रेषित करता है।
HBase प्रतिकृति बनाम HBase सहसंसाधकों में समान कार्यक्षमता को लागू करने के प्रमुख लाभ हैं। सबसे पहले, प्रतिकृति समानांतर और अतुल्यकालिक रूप से काम करती है और डेटा को HBase में डाला जाता है। इसलिए, क्लौडेरा सर्च इंडेक्सिंग नियमित HBase ऑपरेशन में कोई विलंबता या परिचालन अस्थिरता नहीं जोड़ता है। दूसरा, प्रतिकृति पद्धति का उपयोग करने से परिवर्तन तर्क में सहज ऑन-द-फ्लाई परिवर्तन की अनुमति मिलती है। इसके विपरीत, कोप्रोसेसर संशोधन के माध्यम से परिवर्तन को प्रभावित करने के लिए एक रीजनसर्वर पुनरारंभ की आवश्यकता होती है, जो डेटा को HBase उपयोगकर्ताओं के लिए अनुपलब्ध बना देगा। शायद सबसे महत्वपूर्ण यह है कि कोप्रोसेसरों को लागू करना काफी दखल देने वाला है और यदि ठीक से परीक्षण नहीं किया गया, तो यह HBase के प्रदर्शन को बाधित कर सकता है।
यह प्रवाह नीचे दिखाया गया है:
क्लौडेरा सर्च इंस्टाल करना और लिली एचबेस इंडेक्सर को तैनात करना
Cloudera प्रबंधक स्वचालित रूप से एकल पैकेज के रूप में Cloudera खोज को डाउनलोड और परिनियोजित करता है। आपको केवल शीर्ष नेविगेशन में "पैकेज" आइकन पर क्लिक करना है, सोलर संस्करण चुनना है, और इसे डाउनलोड, वितरित और सक्रिय करना है:
जैसा कि पहले उल्लेख किया गया है, क्लौडेरा सर्च HBase प्रतिकृति पर निर्भर करता है, और इसलिए, इसे आगे सक्षम किया जाएगा। HBase सेवा->कॉन्फ़िगरेशन->बैकअप . क्लिक करके प्रतिकृति सक्रिय करें और यह सुनिश्चित करना कि "HBase प्रतिकृति सक्षम करें" और "अनुक्रमण सक्षम करें" दोनों की जाँच की गई है। यदि आवश्यक हो, परिवर्तनों को सहेजें और HBase सेवा को पुनरारंभ करें।
लिली एचबेस इंडेक्सर जोड़ने के लिए, सेवाएं->सेवा जोड़ें पर जाएं , "कीस्टोर इंडेक्सर" चुनें, और इसे HBase इंस्टेंस की ओर इशारा करते हुए जोड़ें, जिसका उपयोग ईमेल प्रोसेसिंग के लिए किया जाएगा:
सोलर को कॉन्फ़िगर करना
इसके बाद, सोलर को ठीक वैसे ही कॉन्फ़िगर करें जैसा कि पिछली पोस्ट में यहां बताया गया है।
- एक नमूना schema.xml कॉन्फ़िगरेशन फ़ाइल जेनरेट करें:
$ solrctl --zk localhost:2181/solr \ instancedir --generate $HOME/emailSearchConfig
- $HOME/emailSearchConfig में schema.xml फ़ाइल संपादित करें, उस कॉन्फ़िग फ़ाइल के साथ जो ईमेल संसाधन के लिए प्रासंगिक फ़ील्ड को परिभाषित करेगी। फ़ाइल की पूरी कॉपी इस लिंक पर मिल सकती है।
- ज़ूकीपर पर सोलर कॉन्फ़िगरेशन अपलोड करें:
$ solrctl --zk localhost:2181/solr instancedir \ --create email_collection $HOME/emailSearchConfig
- सौर संग्रह उत्पन्न करें:
$ solrctl --zk localhost:2181/solr collection \ --create email_collection -s 1
इंडेक्सर को पंजीकृत करना
अनुक्रमणिका और HBase प्रतिकृति को जोड़ने और कॉन्फ़िगर करने के लिए इस चरण की आवश्यकता है। नीचे दिया गया कमांड ज़ूकीपर को अपडेट करेगा और HBase के लिए प्रतिकृति पीयर के रूप में myindexer को जोड़ेगा। यह ज़ूकीपर में कॉन्फ़िगरेशन भी सम्मिलित करेगा, जिसका उपयोग लिली एचबेस इंडेक्सर सोलर में सही संग्रह को इंगित करने के लिए करेगा।
$ hbase-indexer add-indexer -n myindexer -c indexer-config.xml \ -cp solr.zk=localhost:2181/solr \ -cp solr.collection=collection1
तर्क:
- -n myindexer – उस अनुक्रमणिका का नाम निर्दिष्ट करता है जिसे ZooKeeper में पंजीकृत किया जाएगा
- -c indexer-config.xml - कॉन्फ़िगरेशन फ़ाइल जो अनुक्रमणिका व्यवहार निर्दिष्ट करेगी
- -cp solr.zk=localhost:2181/solr - ज़ूकीपर और सोलर कॉन्फिगरेशन का स्थान निर्दिष्ट करता है। इसे ज़ूकीपर के पर्यावरण विशिष्ट स्थान के साथ अद्यतन किया जाना चाहिए।
- -cp solr.collection=Collection1 - निर्दिष्ट करता है कि किस संग्रह को अद्यतन करना है। सोलर कॉन्फ़िगरेशन चरण को याद करें जहां हमने संग्रह1 बनाया था।
इस मामले में index-config.xml फ़ाइल अपेक्षाकृत सीधी है; यह केवल इंडेक्सर को निर्दिष्ट करता है कि किस तालिका को देखना है, वह वर्ग जिसे मैपर के रूप में उपयोग किया जाएगा (com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper), और मॉर्फलाइन कॉन्फ़िगरेशन फ़ाइल का स्थान। मैपिंग-प्रकार कॉलम . पर सेट है क्योंकि हम प्रत्येक सेल को एक व्यक्तिगत सोलर दस्तावेज़ के रूप में प्राप्त करना चाहते हैं। डिफ़ॉल्ट रूप से मैपिंग-प्रकार पंक्ति . पर सेट होता है , जिस स्थिति में सोलर दस्तावेज़ पूरी पंक्ति बन जाता है।
परम नाम ="मॉर्फलाइनफाइल" मॉर्फलाइन कॉन्फ़िगरेशन फ़ाइल का स्थान निर्दिष्ट करता है। स्थान आपकी Morphlines फ़ाइल का एक संपूर्ण पथ हो सकता है, लेकिन चूंकि आप Cloudera प्रबंधक का उपयोग कर रहे हैं, इसलिए सापेक्ष पथ निर्दिष्ट करें:"morphlines.conf"।
hbase-indexer कॉन्फ़िगरेशन फ़ाइल की सामग्री इस लिंक पर पाई जा सकती है।
hbase-indexer कमांड के पूर्ण-संदर्भ के लिए, बिना किसी तर्क के कमांड को निष्पादित करना पर्याप्त है:
$ hbase-indexer Usage: hbase-indexerwhere an option from one of these categories: TOOLS add-indexer update-indexer delete-indexer list-indexers PROCESS MANAGEMENT server run the HBase Indexer server node REPLICATION (EVENT PROCESSING) TOOLS replication-status replication-wait PACKAGE MANAGEMENT classpath dump hbase CLASSPATH version print the version or CLASSNAME run the class named CLASSNAME Most commands print help when invoked w/o parameters.
लिली HBase अनुक्रमणिका को कॉन्फ़िगर करना और प्रारंभ करना
यदि आपको याद हो, जब आपने Lily HBase Indexer को जोड़ा था, तो आपने HBase का उदाहरण निर्दिष्ट किया था जिसके साथ यह संबद्ध है। इसलिए, आपको इस चरण में ऐसा करने की आवश्यकता नहीं है। हालांकि, आपको मॉर्फलाइन रूपांतरण तर्क निर्दिष्ट करने की आवश्यकता है जो इस अनुक्रमणिका को ईमेल संदेशों को पार्स करने और सभी प्रासंगिक फ़ील्ड निकालने की अनुमति देगा।
सर्विसेज पर जाएं और लिली एचबेस इंडेक्सर चुनें जिसे आपने पहले जोड़ा था। कॉन्फ़िगरेशन->देखें और संपादित करें->सर्विस-वाइड->मॉर्फ़लाइन . चुनें . मॉर्फलाइन फ़ाइल को कॉपी और पेस्ट करें।
ईमेल मॉर्फलाइन लाइब्रेरी निम्नलिखित कार्य करेगी:
1. HBase ईमेल ईवेंट को ExtractHBaseCells कमांड के साथ पढ़ें
2. ग्रोक कमांड के साथ असंरचित टेक्स्ट को फ़ील्ड में विभाजित करें
3. यदि ईमेल में संदेश-आईडी गायब है, तो इसे जनरेटयूयूआईडी कमांड के साथ जनरेट करें
4. कन्वर्टटाइमस्टैम्प कमांड के साथ दिनांक/टाइमस्टैम्प को उस फ़ील्ड में कनवर्ट करें जिसे सोलर समझेगा
5। उन सभी अतिरिक्त फ़ील्ड को छोड़ दें जिन्हें हमने sanitizeUknownSolrFieldscommand
ExtractHBaseCells कमांड अधिक ध्यान देने योग्य है, क्योंकि यह HBase इंडेक्सर के मॉर्फलाइन कॉन्फ़िगरेशन के बारे में एकमात्र चीज है। पैरामीटर हैं:
- इनपुट कॉलम - उन कॉलमों को निर्दिष्ट करता है जिनकी सदस्यता लेनी है (वाइल्ड कार्ड हो सकते हैं)
- outputFied - उस फ़ील्ड का नाम जहां डेटा भेजा जाता है
- टाइप - फ़ील्ड का प्रकार (ईमेल बॉडी के मामले में यह स्ट्रिंग है)
- स्रोत - मूल्य या योग्य हो सकता है; मान निर्दिष्ट करता है कि सेल मान को अनुक्रमित किया जाना चाहिए
extractHBaseCells { mappings : [ { inputColumn : "messages:*" outputField : "message" type : string source : value } ] }
इस मॉर्फलाइन फ़ाइल की एक प्रति यहाँ से डाउनलोड करें।
एक महत्वपूर्ण नोट यह है कि आईडी फ़ील्ड स्वचालित रूप से लिली एचबेस इंडेक्सर द्वारा जेनरेट की जाएगी। अद्वितीय-कुंजी-फ़ील्ड विशेषता निर्दिष्ट करके उपरोक्त अनुक्रमणिका-config.xml फ़ाइल में वह सेटिंग कॉन्फ़िगर करने योग्य है। आईडी के डिफ़ॉल्ट नाम को छोड़ना सबसे अच्छा अभ्यास है - क्योंकि यह उपरोक्त xml फ़ाइल में निर्दिष्ट नहीं था, डिफ़ॉल्ट आईडी फ़ील्ड उत्पन्न हुआ था और यह RowID-Column Family-Column Name का संयोजन होगा।
इस बिंदु पर परिवर्तनों को सहेजें और क्लौडेरा मैनेजर से लिली एचबेस इंडेक्सर शुरू करें।
HBase में इनबॉक्स तालिका सेट करना
HBase में प्रोग्रामेटिक रूप से तालिका बनाने के कई तरीके हैं (जावा एपीआई, आरईएसटी एपीआई, या इसी तरह की विधि)। यहां आप इनबॉक्स तालिका बनाने के लिए HBase शेल का उपयोग करेंगे (जानबूझकर वर्णनात्मक कॉलम परिवार नाम का उपयोग करके चीजों का पालन करना आसान बना सकते हैं)। उत्पादन अनुप्रयोगों में, परिवार का नाम हमेशा छोटा होना चाहिए, क्योंकि यह हमेशा सेल कुंजी के हिस्से के रूप में प्रत्येक मान के साथ संग्रहीत होता है। निम्न आदेश ऐसा करेगा और "संदेश" नामक कॉलम परिवार पर प्रतिकृति सक्षम करेगा:
hbase(main):003:0> create 'inbox', {NAME => 'messages', REPLICATION_SCOPE => 1}
यह जाँचने के लिए कि तालिका ठीक से बनाई गई है, निम्न कमांड चलाएँ:
hbase(main):003:0> describe 'inbox' DESCRIPTION ENABLED {NAME => 'inbox', FAMILIES => [{NAME => 'messages', DATA_BLOCK_ENCODING => ' true NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '1', VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DEL ETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', ENCODE _ON_DISK => 'true', BLOCKCACHE => 'true'}]}
इस बिंदु से कॉलम परिवार "संदेश" में तालिका "इनबॉक्स" में डाला गया कोई भी ईमेल लिली एचबेस इंडेक्सर को एक ईवेंट ट्रिगर करेगा, जो ईवेंट को संसाधित करेगा, इसे फ़ील्ड में तोड़ देगा, और इसे इंडेक्सिंग के लिए सोलर को भेज देगा।
इनबॉक्स तालिका का स्कीमा सरल है:पंक्ति आईडी उस व्यक्ति का नाम है जिससे यह इनबॉक्स संबंधित है। प्रत्येक सेल एक व्यक्तिगत संदेश है जिसमें कॉलम एक अद्वितीय पूर्णांक आईडी है। ह्यू के HBase इंटरफ़ेस द्वारा प्रदर्शित नमूना तालिका का स्नैपशॉट नीचे दिया गया है:
डेटा एक्सेस करना
अनुक्रमित ईमेल तक पहुंचने के लिए आपके पास कई विज़ुअल टूल का विकल्प है। ह्यू और सोलर जीयूआई दोनों बहुत अच्छे विकल्प हैं। HBase न केवल GUI से बल्कि HBase शेल, API और यहां तक कि सरल स्क्रिप्टिंग तकनीकों के माध्यम से भी कई एक्सेस तकनीकों को सक्षम बनाता है।
सोलर के साथ एकीकरण आपको बहुत लचीलापन देता है और आपके डेटा के लिए बहुत ही सरल और साथ ही उन्नत खोज विकल्प भी प्रदान कर सकता है। उदाहरण के लिए, सोलर स्कीमा.एक्सएमएल फ़ाइल को इस तरह कॉन्फ़िगर करना कि ईमेल ऑब्जेक्ट के भीतर सभी फ़ील्ड सोलर में संग्रहीत हों, उपयोगकर्ताओं को स्टोरेज स्पेस के ट्रेड-ऑफ और जटिलता की गणना के साथ एक साधारण खोज के माध्यम से पूर्ण संदेश निकायों तक पहुंचने की अनुमति देता है।
वैकल्पिक रूप से, आप सोलर को केवल सीमित संख्या में फ़ील्ड, जैसे आईडी, प्रेषक और विषय को संग्रहीत करने के लिए कॉन्फ़िगर कर सकते हैं। इन तत्वों के साथ, उपयोगकर्ता सोलर को जल्दी से खोज सकते हैं और संदेश आईडी (ओं) को पुनः प्राप्त कर सकते हैं, जिसका उपयोग एचबीएएस से ही पूर्ण संदेश को पुनः प्राप्त करने के लिए किया जा सकता है।
नीचे दिया गया उदाहरण केवल सोलर में संदेश आईडी संग्रहीत करता है लेकिन ईमेल ऑब्जेक्ट के सभी क्षेत्रों में अनुक्रमित करता है। इस परिदृश्य में सोलर की खोज करने पर ईमेल आईडी प्राप्त होती है, जिसका उपयोग आप HBase को क्वेरी करने के लिए कर सकते हैं। इस प्रकार का सेटअप सोलर के लिए आदर्श है क्योंकि यह स्टोरेज की लागत कम रखता है और सोलर की इंडेक्सिंग क्षमताओं का पूरा फायदा उठाता है।
नीचे दी गई शेल स्क्रिप्ट एक कीवर्ड "productId" के लिए Solr Rest API को एक क्वेरी जारी करती है और CSV प्रारूप में फ़ील्ड "id" लौटाती है। परिणाम दस्तावेज़ आईडी की एक सूची है जो क्वेरी से मेल खाती है। फिर स्क्रिप्ट आईडी के माध्यम से लूप करती है और उन्हें पंक्ति आईडी, कॉलम परिवार और कॉलम नाम में तोड़ देती है, जो मानक HBase REST API के माध्यम से HBase तक पहुँचने के लिए उपयोग किया जाता है।
#!/bin/bash # Query SOLR and return the id field for every document # that contains the word resign query_resp=$(curl -s 'http://spark:8983/solr/collection1_shard1_replica1/select?q=productId&fl=id&wt=csv') # Loop through results of the previous command, # and use the id to retrieve the cells from HBase via the HBase REST API for i in $query_resp do if [ "$i" != "id" ]; then cmd=$(echo $i |awk -F'-' '{print "curl -s http://spark:20550/inbox/" $1 "/" $2 ":" $3}') $cmd -H "Accept: application/x-protobuf " fi done
निष्कर्ष
इस पोस्ट में आपने देखा है कि HBase में संग्रहीत ईमेल को अनुक्रमित करना कितना आसान है - लगभग वास्तविक समय में और मुख्य HBase प्रवाह के लिए पूरी तरह से गैर-दखल। संक्षेप में, इन मुख्य चरणों को ध्यान में रखें:
- HBase में प्रतिकृति सक्षम करें
- लिली एचबेस इंडेक्सर को ठीक से कॉन्फ़िगर करें
- रूपांतरण में सहायता के लिए लिली एचबेस इंडेक्सर में मॉर्फलाइन का उपयोग करें (कोई कोडिंग आवश्यक नहीं!)
यदि आपको पिछली पोस्ट पढ़ने का अवसर मिला है, तो आप देख सकते हैं कि morphlines.conf फ़ाइल तीनों मामलों में व्यावहारिक रूप से समान है। इसका मतलब है कि Hadoop पारिस्थितिकी तंत्र पर खोज उपयोग के मामलों को बढ़ाना बहुत आसान है। यदि डेटा पहले से ही एचडीएफएस में है, तो इसे इंडेक्स करने के लिए MapReduceIndexerTool का उपयोग करें। यदि डेटा Flume के माध्यम से आ रहा है, तो समान morphlines फ़ाइल के साथ SolrMorphlineSink का उपयोग करें। यदि बाद में आप तय करते हैं कि HBase उपयोग के मामले में फिट बैठता है, तो HBase में अनुक्रमण कोशिकाओं को शुरू करने के लिए केवल एक न्यूनतम परिवर्तन की आवश्यकता होती है:बस morphlines फ़ाइल में ExtractHBaseCells कमांड जोड़ें।
यद्यपि यह उदाहरण ईमेल पर एक उपयोग के मामले के रूप में केंद्रित है, इस पद्धति को कई अन्य परिदृश्यों में लागू किया जा सकता है जहां HBase का उपयोग भंडारण और पहुंच परत के रूप में किया जाता है। यदि आपका उद्यम किसी विशिष्ट उपयोग के मामले के लिए पहले से ही HBase का उपयोग करता है, तो इसके शीर्ष पर Cloudera खोज को लागू करने पर विचार करें। इसके लिए किसी कोडिंग की आवश्यकता नहीं है और यह वास्तव में संगठन में अधिक व्यापक दर्शकों के लिए डेटा खोल सकता है।
जेफ़ शमैन क्लोडेरा में समाधान वास्तुकार हैं।