क्लौडेरा लैब्स में स्पार्कऑनएचबेस प्रोजेक्ट को हाल ही में अपाचे एचबेस ट्रंक में मिला दिया गया था। इस पोस्ट में, प्रोजेक्ट के इतिहास और नए HBase-Spark मॉड्यूल के लिए भविष्य कैसा दिखता है, इसके बारे में जानें।
स्पार्कऑनएचबेस को पहली बार जुलाई 2014 में जीथब में धकेल दिया गया था, स्पार्क समिट 2013 के छह महीने बाद और अपाचे स्पार्क के सीडीएच में पहली बार भेजे जाने के पांच महीने बाद। वह सम्मेलन मेरे लिए एक बड़ा मोड़ था, क्योंकि पहली बार मैंने महसूस किया कि MapReduce इंजन का एक बहुत मजबूत प्रतियोगी था। स्पार्क अपने ओपन सोर्स जीवन चक्र में एक रोमांचक नए चरण में प्रवेश करने वाला था, और सिर्फ एक साल बाद, इसका उपयोग 100 से अधिक कंपनियों में बड़े पैमाने पर किया जाता है (जिनमें से 200+ क्लाउडेरा के प्लेटफॉर्म पर ऐसा करते हैं)।
SparkOnHBase HBase और Spark के बीच पहले से उपलब्ध HBase और MapReduce के समान बातचीत के स्तर के लिए एक साधारण ग्राहक अनुरोध से बाहर आया। यहां उस कार्यक्षमता का त्वरित सारांश दिया गया है जो दायरे में थी:
- नक्शे में HBase तक पूर्ण पहुंच या चरण कम करें
- बल्क लोड करने की क्षमता
- बल्क ऑपरेशन करने की क्षमता जैसे प्राप्त करना, रखना, हटाना
- एसक्यूएल इंजन के लिए डेटा स्रोत बनने की क्षमता
SparkOnHBase की प्रारंभिक रिलीज़ एक क्लौडेरा ग्राहकों के लिए बनाई गई थी जो काम को सार्वजनिक करने की अनुमति देने के लिए सहमत हुए थे। शुक्र है, मुझे साथी Clouderans और HBase PMC के सदस्यों जॉन हसीह और माटेओ बर्टोज़ी, और स्पार्क PMC के सदस्य तथागत दास से शुरुआती मदद मिली, यह सुनिश्चित करने के लिए कि डिजाइन अपाचे स्पार्क के साथ-साथ स्पार्क स्ट्रीमिंग दोनों के लिए काम करेगा।
सुपर बाउल संडे के लिए अपने रीयल-टाइम स्पार्क स्ट्रीमिंग एप्लिकेशन के साथ अन्य ग्राहकों ने SparkOnHBase—विशेष रूप से Edmunds.com का उपयोग करना शुरू करने में बहुत समय नहीं लगाया था। जब अन्य कंपनियां बोर्ड पर कूद गईं, तो यह जल्दी से स्पष्ट हो गया कि एक एकल परियोजना अनुरक्षक (अर्थात्:मैं) पैमाने पर नहीं जा रहा था। सौभाग्य से, उस समय, क्लौडेरा ने हाल ही में क्लौडेरा लैब्स की घोषणा की थी, जो परियोजना के लिए एकदम सही घर साबित हुआ। सीधे शब्दों में कहें तो, क्लाउडेरा लैब्स उभरती पारिस्थितिकी तंत्र परियोजनाओं के लिए एक आभासी कंटेनर है जो अपनी उद्यम तत्परता, विकास और महत्वाकांक्षा के मामले में युवा हैं, लेकिन उन उपयोगकर्ताओं द्वारा उच्च मांग में हैं जो नवीनतम तकनीकों को आजमाना चाहते हैं। SparkOnHBase नियत समय में Cloudera Labs प्रोजेक्ट बन गया।
आज, मुझे यह बताते हुए खुशी हो रही है कि SparkOnHbase हाल ही में HBase ट्रंक (HBASE-13992) के लिए प्रतिबद्ध है। HBASE-13992 एक नए उपनाम, HBase-Spark मॉड्यूल के तहत SparkOnHBase को HBase कोर में जोड़ता है। मैं HBase VP एंड्रयू पर्टेल को उनके प्रोत्साहन और HBASE-13992 के लिए "दरवाजा खोलने" और PMC सदस्य सीन बसबे को उनकी सलाह और मार्गदर्शन के लिए धन्यवाद देना चाहता हूं। इसके अलावा, मैं इलियट क्लार्क, एनिस सोजतुटार, माइकल स्टैक, निकोलस लिओचॉन, कोस्टास सैकेलिस, टेड यू, लार्स हॉफहंसल और स्टीव लॉफ्रेन को उनकी कोड समीक्षाओं के लिए धन्यवाद देना चाहता हूं। (जैसा कि आप देख सकते हैं, SparkOnHBase एक प्रामाणिक सामुदायिक प्रयास था।)
विशेष रूप से, HBASE-13992 के साथ, मैं पहली बार Apache HBase प्रोजेक्ट में स्पार्क और स्काला कोड जोड़ने में सक्षम था। HBase के इतिहास में पहला स्काला यूनिट परीक्षण बनाने का सौभाग्य प्राप्त करना बहुत मज़ेदार था!
अब, तकनीकी विवरण में गोता लगाएँ।
HBASE-13992 के अंदर
HBASE-13992 में, आप देखेंगे कि SparkOnHBase के अधिकांश मूल कोड और डिज़ाइन अपरिवर्तित हैं। मूल संरचना अभी भी कायम है, जिसमें कोड का मुख्य भाग प्रत्येक स्पार्क एक्ज़ीक्यूटर में एक HBase कनेक्शन ऑब्जेक्ट प्राप्त करने के लिए डिज़ाइन किया गया है।
जबकि मूल बातें बनी रहती हैं, HBASE-13992 पैच और Cloudera Labs SparkOnHbase प्रोजेक्ट के बीच तीन प्रमुख अंतर हैं:
- HBase API: HBASE-13992 सभी नए HBase 1.0+ API का उपयोग करता है।
- RDD और DStream फ़ंक्शन: स्पार्कऑनएचबेस के बारे में सबसे बड़ी शिकायतों में से एक यह है कि कार्यों को कैसे निष्पादित किया गया था; स्पार्क प्रेमी HBase क्रियाओं को सीधे RDD या DStream से करना चाहते थे। HBASE-13992 में, उस क्षमता को यूनिट परीक्षणों और उदाहरणों के माध्यम से बेक-इन किया जाता है। इसके अलावा, इस पोस्ट में बाद में RDD से सीधे HBase फ़ंक्शंस के कोड उदाहरण हैं, ताकि आप यह महसूस कर सकें कि API कैसा दिखेगा।
- आसान
foreach
औरmap
कार्य: अबforeachPartition
करना और भी आसान हो गया है s औरmapPartition
HBase कनेक्शन के साथ। एक उदाहरण इस पोस्ट में बाद में आएगा।
अब, एक त्वरित मिनट लेते हैं और SparkOnHbase कोड आधार और HBASE-13992 पैच के बीच के अंतरों के माध्यम से चलते हैं। यहां bulkDelete
का एक त्वरित उदाहरण दिया गया है स्पार्कऑनएचबेस से:
वैल hbaseContext =नया HBaseContext(sc, config);hbaseContext.bulkDelete[Array[Byte]](rdd, टेबलनाम, putRecord => new Delete(putRecord), ;इस उदाहरण में ध्यान दें कि हम एक फ़ंक्शन को सीधे HBaseContext ऑब्जेक्ट से कॉल कर रहे हैं, भले ही ऑपरेशन वास्तव में RDD पर निष्पादित किया जा रहा था। तो आइए अब इसी कोड के लिए HBase-Spark मॉड्यूल को देखें:
वैल hbaseContext =नया HBaseContext(sc, config)rdd.hbaseBulkDelete(hbaseContext, तालिका का नाम, putRecord => नया हटाएं (putRecord),बड़ा अंतर यह है कि
hbaseBulkDelete
विधि सीधे RDD से निकलती है। साथ ही, यह दृष्टिकोण भविष्य के जिरा के साथ निम्नलिखित विकल्पों के लिए दरवाजा खुला छोड़ देता है:वैल hbaseContext =नया HBaseContext(sc, config)rdd.hbaseBulkDelete(tableName)यह उतना ही साफ है जितना मैं इसे अभी प्राप्त कर सकता हूं, लेकिन लक्ष्य इसे और भी अधिक बनाना है सरल और साफ।
आइए HBASE-13992 में foreach और मानचित्र कार्यों पर एक त्वरित नज़र डालें। आप
ForeachPartition
. में देख सकते हैं नीचे उदाहरण है कि हमारे पास एक पुनरावर्तक और एक HBaseConnection
. है वस्तु। यह हमें HBase के साथ कुछ भी करने की पूरी शक्ति देगा क्योंकि हम अपने मूल्यों पर पुनरावृति करते हैं:val hbaseContext =new HBaseContext(sc, config)rdd.hbaseForeachPartition(hbaseContext, (it, conn) => { वैल बफर्ड म्यूटेटर =conn.getBufferedMutator(TableName.valueOf("t1")) ... ) bufferedMutator.close() })अंत में, यहां मानचित्र विभाजन फ़ंक्शन का एक उदाहरण दिया गया है जहां हम अपने मूल्यों पर पुनरावृति करते हुए एक कनेक्शन ऑब्जेक्ट प्राप्त कर सकते हैं:
val getRdd =rdd.hbaseMapPartitions(hbaseContext, (it, conn) => { वैल टेबल =conn.getTable(TableName.valueOf("t1")) var res =mutable.MutableList[String]() ... })भविष्य का काम
निम्नलिखित जिरा मेरी टू डू सूची में हैं:
HBASE-14150 -
BulkLoad
जोड़ें HBase-Spark मॉड्यूल की कार्यक्षमताजल्द ही हम कोड के साथ सीधे आरडीडी से बल्क लोड करने में सक्षम होंगे जो कि सरल दिखता है:
rdd.hbaseBulkLoad (tableName, t => { Seq((new KeyFamilyQualifier(t.rowKey, t.family, t.qualifier), t.value))।HBASE-14181 - HBase-Spark मॉड्यूल में Spark DataFrame DataSource जोड़ें
इस पैच के साथ, हम स्पार्क एसक्यूएल को एचबीएएस के साथ सीधे एकीकृत करने में सक्षम होंगे और स्कैन-रेंज पुशडाउन के साथ फिल्टर और कॉलम चयन पुशडाउन जैसी अच्छी चीजें कर सकेंगे। स्पार्क SQL और HBase इंटरेक्शन प्राप्त करने का लक्ष्य निम्न के समान सरल है:
val df =sqlContext.load("org.apache.hadoop.hbase.spark", Map("hbase.columns.mapping" -> "KEY_FIELD STRING :key, A_FIELD STRING c:a, B_FIELD STRING c:b ,", "hbase.table" -> "t1"))df.registerTempTable("hbaseTmp")sqlContext.sql ("hbaseTmp से KEY_FIELD चुनें" + "कहां" + "(KEY_FIELD ='get1' और B_FIELD <'3 ') या "+ "(KEY_FIELD <='get3' और B_FIELD ='8')")। foreach(r => println(" - " + r))कोड को उपयोग में आसान बनाने और यूनिट परीक्षण को अधिक व्यापक बनाने के लिए अन्य JIRA डिज़ाइन किए गए हैं। मेरा व्यक्तिगत लक्ष्य एक अनुवर्ती ब्लॉग पोस्ट में वापस रिपोर्ट करने में सक्षम होना है जिसमें हम सभी महान प्रगति कर रहे हैं। इसका उद्देश्य स्पार्क को प्रथम श्रेणी के नागरिक में बदलना है, जो कि HBase के संबंध में होने का हकदार है, इसे उद्योग में MapReduce प्रतिस्थापन के रूप में और मजबूत करना है। MapReduce को स्पार्क के साथ बदलने से हम HBase क्लस्टर पर और भी अधिक प्रसंस्करण कर सकेंगे, बिना इस चिंता के कि डिस्क IO विवाद अधिक होगा।
HBase-Spark मॉड्यूल को HBase के रिलीज़ में आने में समय लगेगा। इस बीच, क्लाउडेरा लैब्स में HBase-Spark मॉड्यूल से कुछ कोड को SparkOnHBase में बैक-पोर्ट करने की योजना है। वर्तमान में, SparkOnHBase CDH 5.3 और 5.4 पर काम करता है, और लक्ष्य 2015 में बाद में CDH माइनर रिलीज़ के लिए HBase-Spark मॉड्यूल एडवांस के साथ SparkOnHBase को अपडेट करना होगा।
टेड मालास्का क्लाउडेरा में एक समाधान वास्तुकार है, स्पार्क, अपाचे फ्लूम, और अपाचे एचबेस के लिए एक योगदानकर्ता, और ओ रेली पुस्तक के सह-लेखक हैं, Hadoop एप्लिकेशन आर्किटेक्चर।