Apache HBase आपको अपने बिग डेटा तक रैंडम, रीयल-टाइम, रीड/राइट एक्सेस देने के बारे में है, लेकिन आप उस डेटा को HBase में कुशलतापूर्वक कैसे प्राप्त करते हैं? सहज रूप से, एक नया उपयोगकर्ता क्लाइंट एपीआई के माध्यम से या TableOutputFormat के साथ MapReduce जॉब का उपयोग करके ऐसा करने का प्रयास करेगा, लेकिन वे दृष्टिकोण समस्याग्रस्त हैं, जैसा कि आप नीचे सीखेंगे। इसके बजाय, HBase बल्क लोडिंग सुविधा का उपयोग करना बहुत आसान है और समान मात्रा में डेटा को अधिक तेज़ी से सम्मिलित कर सकता है।
यह ब्लॉग पोस्ट बल्क लोडिंग सुविधा की बुनियादी अवधारणाओं का परिचय देगा, दो उपयोग के मामले प्रस्तुत करेगा, और दो उदाहरण प्रस्तावित करेगा।
बल्क लोडिंग का अवलोकन
यदि आपके पास इनमें से कोई भी लक्षण है, तो बल्क लोडिंग शायद आपके लिए सही विकल्प है:
- अधिकांश मेमोरी का उपयोग करने के लिए आपको अपने MemStores को ट्वीक करना होगा।
- आपको या तो बड़े WAL का उपयोग करना होगा या उन्हें पूरी तरह से बायपास करना होगा।
- आपकी संघनन और फ्लश कतार सैकड़ों में हैं।
- आपका जीसी नियंत्रण से बाहर है क्योंकि आपके इंसर्ट एमबी में हैं।
- जब आप डेटा आयात करते हैं तो आपकी प्रतीक्षा अवधि आपके SLA से बाहर हो जाती है।
उन लक्षणों में से अधिकांश को आमतौर पर "बढ़ते दर्द" के रूप में जाना जाता है। बल्क लोडिंग का उपयोग करने से आप इनसे बचने में मदद कर सकते हैं।
HBase-speak में, बल्क लोडिंग HFiles (HBase का अपना फ़ाइल फॉर्मेट) को सीधे रीजनसर्वर में तैयार करने और लोड करने की प्रक्रिया है, इस प्रकार लेखन पथ को छोड़कर और उन मुद्दों को पूरी तरह से समाप्त कर देता है। यह प्रक्रिया ईटीएल के समान है और इस तरह दिखती है:
<मजबूत>1. किसी स्रोत से डेटा निकालें, आमतौर पर टेक्स्ट फ़ाइलें या अन्य डेटाबेस। HBase प्रक्रिया के इस भाग का प्रबंधन नहीं करता है। दूसरे शब्दों में, आप HBase को सीधे MySQL से पढ़कर HFiles तैयार करने के लिए नहीं कह सकते - बल्कि, आपको इसे अपने तरीके से करना होगा। उदाहरण के लिए, आप एक टेबल पर mysqldump चला सकते हैं और परिणामी फाइलों को एचडीएफएस पर अपलोड कर सकते हैं या बस अपनी अपाचे HTTP लॉग फाइलों को पकड़ सकते हैं। किसी भी स्थिति में, आपका डेटा अगले चरण से पहले एचडीएफएस में होना चाहिए।
<मजबूत>2. डेटा को HFiles में बदलें। इस चरण के लिए MapReduce जॉब की आवश्यकता होती है और अधिकांश इनपुट प्रकारों के लिए आपको मैपर को स्वयं लिखना होगा। नौकरी को पंक्ति कुंजी को कुंजी के रूप में उत्सर्जित करने की आवश्यकता होगी, और या तो एक कीवैल्यू, एक पुट, या मान के रूप में हटाएं। रेड्यूसर को HBase द्वारा नियंत्रित किया जाता है; आप इसे HFileOutputFormat.configureIncrementalLoad() का उपयोग करके कॉन्फ़िगर करते हैं और यह निम्न कार्य करता है:
- कुल ऑर्डर पार्टीशनर को कॉन्फ़िगर करने के लिए तालिका का निरीक्षण करता है
- विभाजन फ़ाइल को क्लस्टर में अपलोड करता है और इसे DistributedCache में जोड़ता है
- क्षेत्रों की वर्तमान संख्या से मेल खाने के लिए कार्यों को कम करने की संख्या निर्धारित करता है
- आउटपुट कुंजी/मान वर्ग को HFileOutputFormat की आवश्यकताओं से मेल खाने के लिए सेट करता है
- उपयुक्त छँटाई करने के लिए रेड्यूसर सेट करता है (या तो KeyValueSortReducer या PutSortReducer)
इस स्तर पर, आउटपुट फ़ोल्डर में प्रति क्षेत्र एक HFile बनाया जाएगा। ध्यान रखें कि इनपुट डेटा लगभग पूरी तरह से फिर से लिखा गया है, इसलिए आपको मूल डेटा सेट के आकार की तुलना में कम से कम दो बार उपलब्ध डिस्क स्थान की आवश्यकता होगी। उदाहरण के लिए, 100GB mysqldump के लिए आपके पास HDFS में कम से कम 200GB उपलब्ध डिस्क स्थान होना चाहिए। आप प्रक्रिया के अंत में डंप फ़ाइल को हटा सकते हैं।
<मजबूत>3. क्षेत्रीय सर्वरों को यह बताकर कि उन्हें कहां खोजना है, फाइलों को HBase में लोड करें। यह सबसे आसान कदम है। इसके लिए LoadIncrementalHFiles (अधिक सामान्यतः पूर्णबल्कलोड टूल के रूप में जाना जाता है) का उपयोग करने की आवश्यकता होती है, और इसे एक URL पास करके जो HDFS में फाइलों का पता लगाता है, यह प्रत्येक फ़ाइल को उस क्षेत्र सर्वर के माध्यम से संबंधित क्षेत्र में लोड करेगा जो इसे परोसता है। इस घटना में कि फ़ाइलें बनाए जाने के बाद एक क्षेत्र विभाजित हो गया था, उपकरण स्वचालित रूप से नई सीमाओं के अनुसार HFile को विभाजित कर देगा। यह प्रक्रिया बहुत कुशल नहीं है, इसलिए यदि आपकी तालिका वर्तमान में अन्य प्रक्रियाओं द्वारा लिखी जा रही है, तो ट्रांसफ़ॉर्म चरण पूरा होते ही फ़ाइलों को लोड करना सबसे अच्छा है।
यहाँ इस प्रक्रिया का एक उदाहरण दिया गया है। डेटा प्रवाह मूल स्रोत से एचडीएफएस तक जाता है, जहां रीजनसर्वर फाइलों को अपने क्षेत्र की निर्देशिका में स्थानांतरित कर देंगे।
मामलों का उपयोग करें
मूल डेटासेट लोड: किसी अन्य डेटास्टोर से माइग्रेट करने वाले सभी उपयोगकर्ताओं को इस उपयोग के मामले पर विचार करना चाहिए। सबसे पहले, आपको टेबल स्कीमा को डिज़ाइन करने के अभ्यास से गुजरना होगा और फिर टेबल को पूर्व-विभाजित करना होगा। विभाजन बिंदुओं को पंक्ति-कुंजी वितरण और क्षेत्र सर्वरों की संख्या को ध्यान में रखना होगा। मैं किसी भी गंभीर उपयोग के मामले के लिए उन्नत स्कीमा डिज़ाइन पर अपने सहयोगी लार्स जॉर्ज की प्रस्तुति को पढ़ने की सलाह देता हूं।
यहां लाभ यह है कि रीजनसर्वर के लेखन पथ (मेमस्टोर और वाल दोनों को लिखने) और फिर अंततः फ्लशिंग, कॉम्पैक्टिंग, और इसी तरह से फ़ाइलों को सीधे लिखना बहुत तेज़ है। इसका मतलब यह भी है कि आपको अपने क्लस्टर को लिखने-भारी कार्यभार के लिए ट्यून करने और फिर अपने सामान्य कार्यभार के लिए इसे फिर से ट्यून करने की आवश्यकता नहीं है।
वृद्धिशील भार: मान लें कि आपके पास वर्तमान में HBase द्वारा परोसा जा रहा कुछ डेटासेट है, लेकिन अब आपको किसी तृतीय पक्ष से बैच में अधिक डेटा आयात करने की आवश्यकता है या आपके पास एक रात का काम है जो कुछ गीगाबाइट उत्पन्न करता है जिसे आपको सम्मिलित करने की आवश्यकता है। यह संभवत:उतना बड़ा नहीं है जितना कि HBase पहले से ही सेवा दे रहा है, लेकिन यह आपके विलंबता के 95 वें प्रतिशतक को प्रभावित कर सकता है। सामान्य लेखन पथ के माध्यम से जाने से आयात के दौरान सामान्य से अधिक फ्लश और संघनन को ट्रिगर करने का प्रतिकूल प्रभाव पड़ेगा। यह अतिरिक्त IO तनाव आपके विलंबता-संवेदनशील प्रश्नों के साथ प्रतिस्पर्धा करेगा।
उदाहरण
आप अपने स्वयं के Hadoop क्लस्टर में निम्न उदाहरणों का उपयोग कर सकते हैं, लेकिन निर्देश Cloudera QuickStart VM के लिए दिए गए हैं, जो एक एकल-नोड क्लस्टर, अतिथि OS और नमूना डेटा और उदाहरण हैं जो आपके डेस्कटॉप के लिए वर्चुअल मशीन उपकरण में बेक किए गए हैं।पी>
एक बार जब आप वीएम शुरू करते हैं, तो सीडीएच को तैनात करने के लिए वेब इंटरफेस के माध्यम से इसे बताएं, और फिर सुनिश्चित करें कि एचबीएएस सेवा भी शुरू हो गई है।
अंतर्निहित TSV बल्क लोडर
HBase एक MR जॉब के साथ शिप करता है जो एक डिलीमीटर से अलग वैल्यू फाइल और आउटपुट को सीधे HBase टेबल में पढ़ सकता है या बल्क लोडिंग के लिए HFiles बना सकता है। यहां हम जा रहे हैं:
- नमूना डेटा प्राप्त करें और इसे एचडीएफएस पर अपलोड करें।
- एक पूर्व-कॉन्फ़िगर तालिका के अनुसार फ़ाइल को एकाधिक HFiles में बदलने के लिए ImportTsv जॉब चलाएँ।
- फ़ाइलें तैयार करें और HBase में लोड करें।
पहला कदम एक कंसोल खोलना और नमूना डेटा प्राप्त करने के लिए निम्न कमांड का उपयोग करना है:
curl -O https://people.apache.org/~jdcryans/word_count.csv
मैंने इस ब्लॉग पोस्ट की मूल पांडुलिपि पर एक शब्द गणना चलाकर और फिर बिना किसी कॉलम शीर्षक के सीएसवी प्रारूप में परिणाम आउटपुट करके यह फ़ाइल बनाई है। अब, फाइल को एचडीएफएस पर अपलोड करें:
hdfs dfs -put word_count.csv
बल्क लोड का निष्कर्षण भाग अब पूरा हो रहा है, आपको फ़ाइल को रूपांतरित करने की आवश्यकता है। सबसे पहले आपको टेबल डिजाइन करने की जरूरत है। चीजों को सरल रखने के लिए, इसे "वर्डकाउंट" कहते हैं - पंक्ति कुंजियाँ स्वयं शब्द होंगे और एकमात्र कॉलम में गिनती होगी, एक परिवार में जिसे हम "f" कहते हैं। तालिका बनाते समय सबसे अच्छा अभ्यास यह है कि इसे पंक्ति कुंजी वितरण के अनुसार विभाजित किया जाए, लेकिन इस उदाहरण के लिए हम केवल पांच क्षेत्रों का निर्माण करेंगे, जो कि प्रमुख स्थान पर समान रूप से फैले हुए हैं। एचबेस शेल खोलें:
hbase shell
और टेबल बनाने के लिए निम्न कमांड चलाएँ:
create 'wordcount', {NAME => 'f'}, {SPLITS => ['g', 'm', 'r', 'w']}
चार विभाजन बिंदु पांच क्षेत्र उत्पन्न करेंगे, जहां पहला क्षेत्र एक खाली पंक्ति कुंजी से शुरू होता है। बेहतर स्प्लिट पॉइंट पाने के लिए आप यह देखने के लिए एक त्वरित विश्लेषण भी कर सकते हैं कि शब्दों को वास्तव में कैसे वितरित किया जाता है, लेकिन मैं इसे आप पर छोड़ दूंगा।
यदि आप अपने VM के ब्राउज़र को http://localhost:60010/ पर इंगित करते हैं, तो आप हमारी नई बनाई गई तालिका और उसके पांच क्षेत्रों को सभी रीजनसर्वर को सौंपे गए देखेंगे।
अब हैवी लिफ्टिंग करने का समय आ गया है। "हडूप" स्क्रिप्ट के साथ कमांड लाइन पर HBase जार को लागू करने से उपलब्ध उपकरणों की एक सूची दिखाई देगी। जिसे हम चाहते हैं उसे importtsv कहा जाता है और इसका निम्नलिखित उपयोग होता है:
hadoop jar /usr/lib/hbase/hbase-0.94.6-cdh4.3.0-security.jar importtsv ERROR: Wrong number of arguments: 0 Usage: importtsv -Dimporttsv.columns=a,b,c
हम जिस कमांड लाइन का उपयोग करने जा रहे हैं वह निम्नलिखित है:
hadoop jar /usr/lib/hbase/hbase-0.94.6-cdh4.3.0- security.jar importtsv -Dimporttsv.separator=, -Dimporttsv.bulk.output=output -Dimporttsv.columns=HBASE_ROW_KEY,f:count wordcount word_count.csv
यहां विभिन्न कॉन्फ़िगरेशन तत्वों का संक्षिप्त विवरण दिया गया है:
- -Dimporttsv.separator=, निर्दिष्ट करता है कि विभाजक एक अल्पविराम है।
- -Dimporttsv.bulk.output=output एक सापेक्ष पथ है जहाँ HFiles लिखा जाएगा। चूंकि VM पर आपका उपयोगकर्ता डिफ़ॉल्ट रूप से "क्लाउडेरा" है, इसका मतलब है कि फाइलें /user/cloudera/output में होंगी। इस विकल्प को छोड़ने से कार्य सीधे HBase को लिख दिया जाएगा।
- -Dimporttsv.columns=HBASE_ROW_KEY,f:count इस फ़ाइल में निहित सभी स्तंभों की एक सूची है। पंक्ति कुंजी को ऑल-कैप्स HBASE_ROW_KEY स्ट्रिंग का उपयोग करके पहचाना जाना चाहिए; अन्यथा यह काम शुरू नहीं करेगा। (मैंने क्वालीफायर "गिनती" का उपयोग करने का फैसला किया, लेकिन यह कुछ और भी हो सकता है।)
छोटे इनपुट आकार को देखते हुए कार्य एक मिनट के भीतर पूरा हो जाना चाहिए। ध्यान दें कि पांच रेड्यूसर चल रहे हैं, एक प्रति क्षेत्र। ये रहा एचडीएफएस पर परिणाम:
-rw-r--r-- 3 cloudera cloudera 4265 2013-09-12 13:13 output/f/2c0724e0c8054b70bce11342dc91897b -rw-r--r-- 3 cloudera cloudera 3163 2013-09-12 13:14 output/f/786198ca47ae406f9be05c9eb09beb36 -rw-r--r-- 3 cloudera cloudera 2487 2013-09-12 13:14 output/f/9b0e5b2a137e479cbc978132e3fc84d2 -rw-r--r-- 3 cloudera cloudera 2961 2013-09-12 13:13 output/f/bb341f04c6d845e8bb95830e9946a914 -rw-r--r-- 3 cloudera cloudera 1336 2013-09-12 13:14 output/f/c656d893bd704260a613be62bddb4d5f
जैसा कि आप देख सकते हैं, फ़ाइलें वर्तमान में उपयोगकर्ता "क्लाउडेरा" से संबंधित हैं। उन्हें लोड करने के लिए हमें मालिक को "hbase" में बदलना होगा या HBase को फ़ाइलों को स्थानांतरित करने की अनुमति नहीं होगी। निम्न आदेश चलाएँ:
sudo -u hdfs hdfs dfs -chown -R hbase:hbase/user/cloudera/output
अंतिम चरण के लिए, हमें यह इंगित करने के लिए पूर्ण बल्कलोड टूल का उपयोग करने की आवश्यकता है कि फाइलें कहां हैं और हम किन तालिकाओं को लोड कर रहे हैं:
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles output wordcount
HBase शेल में वापस जाकर, आप काउंट कमांड चला सकते हैं जो आपको दिखाएगा कि कितनी पंक्तियाँ लोड की गई थीं। अगर आप चाउन करना भूल गए, तो कमांड हैंग हो जाएगी।
कस्टम एमआर जॉब
TSV बल्क लोडर प्रोटोटाइप के लिए अच्छा है, लेकिन क्योंकि यह सब कुछ स्ट्रिंग्स के रूप में व्याख्या करता है और परिवर्तन के समय फ़ील्ड में हेरफेर करने का समर्थन नहीं करता है, इसलिए आपको अपना स्वयं का MR जॉब लिखना होगा। मेरे सहयोगी जेम्स किनले, जो यूरोप में एक समाधान वास्तुकार के रूप में काम करते हैं, ने ऐसा काम लिखा है जिसका उपयोग हम अपने अगले उदाहरण के लिए करने जा रहे हैं। नौकरी के डेटा में लेकर्स और सेल्टिक्स के बीच 2010 एनबीए फाइनल (गेम 1) से संबंधित सार्वजनिक फेसबुक और ट्विटर संदेश शामिल हैं। आप कोड यहां देख सकते हैं। (क्विक स्टार्ट VM में git और maven इंस्टाल होते हैं ताकि आप उस पर रिपॉजिटरी को क्लोन कर सकें।)
ड्राइवर वर्ग को देखते हुए, सबसे महत्वपूर्ण बिट्स निम्नलिखित हैं:
job.setMapOutputKeyClass(ImmutableBytesWritable.class); job.setMapOutputValueClass(KeyValue.class); … // Auto configure partitioner and reducer HFileOutputFormat.configureIncrementalLoad(job, hTable);
सबसे पहले, आपके मैपर को एक ImmutableBytesWritable आउटपुट करने की आवश्यकता होती है जिसमें पंक्ति कुंजी होती है, और आउटपुट मान या तो KeyValue, Put या Delete हो सकता है। दूसरा स्निपेट दिखाता है कि रेड्यूसर को कैसे कॉन्फ़िगर किया जाए; यह वास्तव में पूरी तरह से HFileOutputFormat द्वारा नियंत्रित किया जाता है। configIncrementalLoad() जैसा कि पहले "ट्रांसफ़ॉर्म" अनुभाग में वर्णित है।
HBaseKVMapper वर्ग में केवल मैपर होता है जो कॉन्फ़िगर की गई आउटपुट कुंजी और मानों का सम्मान करता है:
public class HBaseKVMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, KeyValue> {
इसे चलाने के लिए आपको मेवेन का उपयोग करके प्रोजेक्ट को संकलित करना होगा और रीडमे में लिंक के बाद डेटा फ़ाइलों को पकड़ना होगा। (इसमें टेबल बनाने के लिए शेल स्क्रिप्ट भी शामिल है।) काम शुरू करने से पहले, एचडीएफएस पर फाइल अपलोड करना न भूलें और एचबीएएस के बारे में जागरूक होने के लिए अपने क्लासपाथ को सेट करें क्योंकि आप इस बार इसके जार का उपयोग नहीं करने जा रहे हैं। :
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/etc/hbase/conf/:/usr/lib/hbase/*
आप इस तरह की कमांड लाइन का उपयोग करके कार्य शुरू करने में सक्षम होंगे:
hadoop jar hbase-examples-0.0.1-SNAPSHOT.jar com.cloudera.examples.hbase.bulkimport.Driver -libjars /home/cloudera/.m2/repository/joda-time/joda-time/2.1/joda-time-2.1.jar, /home/cloudera/.m2/repository/net/sf/opencsv/opencsv/2.3/opencsv-2.3.jar RowFeeder\ for\ Celtics\ and\ Lakers\ Game\ 1.csv output2 NBAFinal2010
जैसा कि आप देख सकते हैं, नौकरी की निर्भरता को अलग से जोड़ना होगा। अंत में, आप पहले उनके स्वामी को बदलकर और फिर पूर्णबल्कलोड टूल चलाकर फ़ाइलों को लोड कर सकते हैं:
sudo -u hdfs hdfs dfs -chown -R hbase:hbase/user/cloudera/output2 hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles output2 NBAFinal2010
संभावित समस्याएं
हाल ही में हटाया गया डेटा फिर से दिखाई दे रहा है। यह समस्या तब होती है जब एक डिलीट को बल्क लोड के माध्यम से डाला जाता है और प्रमुख रूप से कॉम्पैक्ट किया जाता है, जबकि संबंधित पुट अभी भी एक मेमस्टोर में है। डेटा को डिलीट माना जाएगा जब डिलीट एक HFile में होगा, लेकिन एक बार कॉम्पैक्शन के दौरान इसे हटा दिए जाने के बाद, पुट फिर से दिखाई देने लगेगा। यदि आपके पास ऐसा उपयोग मामला है, तो हटाए गए सेल को शेल में KEEP_DELETED_CELLS या HColumnDescriptor.setKeepDeletedCells() के साथ रखने के लिए अपने कॉलम परिवारों को कॉन्फ़िगर करने पर विचार करें।
बल्क-लोडेड डेटा को किसी अन्य बल्क लोड द्वारा अधिलेखित नहीं किया जा सकता है। यह समस्या तब होती है जब अलग-अलग समय पर लोड किए गए दो बल्क-लोडेड HFiles एक ही सेल में एक अलग मान लिखने का प्रयास करते हैं, जिसका अर्थ है कि उनके पास एक ही पंक्ति कुंजी, परिवार, क्वालीफायर और टाइमस्टैम्प है। नतीजा यह है कि पहला डाला गया मान दूसरे के बजाय वापस कर दिया जाएगा। इस बग को एचबेस 0.96.0 और सीडीएच 5 (अगले सीडीएच प्रमुख संस्करण) में ठीक किया जाएगा और एचबीएएसई-8521 में 0.94 शाखा और सीडीएच 4 के लिए काम किया जा रहा है।
बल्क लोडिंग प्रमुख संघनन को ट्रिगर करती है। यह समस्या तब आती है जब आप वृद्धिशील बल्क लोड कर रहे होते हैं और एक मामूली संघनन को ट्रिगर करने के लिए पर्याप्त बल्क-लोडेड फ़ाइलें होती हैं (डिफ़ॉल्ट सीमा 3 होती है)। HFiles को 0 पर सेट अनुक्रम संख्या के साथ लोड किया जाता है, इसलिए जब क्षेत्र सर्वर संघनन के लिए फ़ाइलों का चयन कर रहा होता है, तो उन्हें सबसे पहले उठाया जाता है, और एक बग के कारण यह सभी शेष फ़ाइलों का भी चयन करेगा। यह समस्या उन लोगों को गंभीर रूप से प्रभावित करेगी जिनके पास पहले से ही बड़े क्षेत्र (एकाधिक जीबी) हैं या जो अक्सर बल्क लोड करते हैं (हर कुछ घंटे या उससे कम) क्योंकि बहुत सारा डेटा जमा हो जाएगा। HBase 0.96.0 में उचित सुधार है और इसी तरह CDH 5; HBASE-8521 समस्या को 0.94 में ठीक करता है क्योंकि बल्क-लोडेड HFiles को अब एक उचित अनुक्रम संख्या असाइन की गई है। HBASE-8283 को 0.94.9 और CDH 4.4.0 के बाद hbase.hstore.useExploringCompation के साथ सक्षम किया जा सकता है ताकि इस समस्या को कम करने के लिए केवल एक बेहतर संघनन-चयन एल्गोरिथम हो।
बल्क-लोडेड डेटा दोहराया नहीं जाता है . चूंकि बल्क लोडिंग लेखन पथ को छोड़ देती है, इसलिए प्रक्रिया के भाग के रूप में WAL को लिखा नहीं जाता है। प्रतिकृति WAL फ़ाइलों को पढ़कर काम करती है, इसलिए यह थोक लोड किए गए डेटा को नहीं देखेगा - और वही संपादन के लिए जाता है जो Put.setWriteToWAL(true) का उपयोग करते हैं। इसे संभालने का एक तरीका यह है कि कच्ची फ़ाइलों या HFiles को दूसरे क्लस्टर में शिप किया जाए और दूसरी प्रोसेसिंग वहीं की जाए।
निष्कर्ष
इस ब्लॉग पोस्ट का लक्ष्य आपको Apache HBase बल्क लोडिंग की बुनियादी अवधारणाओं से परिचित कराना था। हमने समझाया कि प्रक्रिया ईटीएल करने की तरह है, और यह सामान्य एपीआई का उपयोग करने की तुलना में बड़े डेटा सेट के लिए बहुत बेहतर है क्योंकि यह लेखन पथ को छोड़ देता है। दो उदाहरणों को यह दिखाने के लिए शामिल किया गया था कि कैसे TSV फ़ाइलों को HBase पर बल्क लोड किया जा सकता है और अन्य डेटा प्रारूपों के लिए अपना खुद का मैपर कैसे लिखा जा सकता है।
अब आप ह्यू के माध्यम से ग्राफिकल यूजर इंटरफेस का उपयोग करके ऐसा करने का प्रयास कर सकते हैं।