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

कैसे करें:अपने मानचित्र में तृतीय-पक्ष पुस्तकालयों को शामिल करें नौकरी को कम करें

"मेरी लाइब्रेरी क्लासपाथ में है लेकिन मुझे अभी भी MapReduce जॉब में क्लास नॉट फाउंड अपवाद मिलता है" - अगर आपको यह समस्या है तो यह ब्लॉग आपके लिए है।

Java को कमांड लाइन के “–classpath पर होने के लिए तृतीय-पक्ष और उपयोगकर्ता-परिभाषित कक्षाओं की आवश्यकता होती है। "विकल्प जब JVM लॉन्च किया जाता है। /usr/lib/hadoop-0.20/ में स्थित कोर लाइब्रेरी से क्लासपाथ बनाकर `hadoop` रैपर शेल स्क्रिप्ट आपके लिए ठीक यही काम करती है और /usr/lib/hadoop-0.20/lib/ निर्देशिका। हालाँकि, MapReduce के साथ आप नौकरी के कार्य प्रयासों को दूरस्थ नोड्स पर निष्पादित करते हैं। आप किसी दूरस्थ मशीन को तृतीय-पक्ष और उपयोगकर्ता-निर्धारित कक्षाओं को शामिल करने के लिए कैसे कहते हैं?

MapReduce जॉब टास्कट्रैकर्स पर अलग-अलग JVM में निष्पादित की जाती है और कभी-कभी आपको मैप में थर्ड-पार्टी लाइब्रेरी का उपयोग करने/कार्य प्रयासों को कम करने की आवश्यकता होती है। उदाहरण के लिए, हो सकता है कि आप अपने मानचित्र कार्यों के भीतर से HBase तक पहुंचना चाहें। ऐसा करने का एक तरीका सबमिट करने योग्य जार में उपयोग किए जाने वाले प्रत्येक वर्ग को पैकेज करना है। आपको मूल hbase-.jar . को अनपैक करना होगा और अपने सबमिट करने योग्य हडोप जार में सभी वर्गों को दोबारा तैयार करें। अच्छा नही। ऐसा न करें:संस्करण संगतता समस्याएं आपको देर-सबेर परेशान करने वाली हैं।

ऐसा करने के बेहतर तरीके हैं या तो अपने जार को वितरित कैश में डालकर या पूरे जार को हडूप नोड्स पर स्थापित करके और टास्कट्रैकर्स को उनके स्थान के बारे में बताकर।

1. जार को “-libjars . में शामिल करें "हडूप जार ...` कमांड का कमांड लाइन विकल्प। जार को वितरित कैश में रखा जाएगा और नौकरी के सभी कार्य प्रयासों के लिए उपलब्ध कराया जाएगा। अधिक विशेष रूप से, आप JAR को ${mapred.local.dir}/taskTracker/archive/${user.name}/distcache/… में से किसी एक में पाएंगे। स्थानीय नोड्स पर उपनिर्देशिकाएँ। वितरित कैश का लाभ यह है कि आपका जार अभी भी आपके अगले प्रोग्राम रन पर हो सकता है (कम से कम सिद्धांत रूप में:फ़ाइलों को वितरित कैश से केवल तभी निकाला जाना चाहिए जब वे local.cache द्वारा परिभाषित सॉफ्ट लिमिट से अधिक हो जाएं। .आकार कॉन्फ़िगरेशन चर, डिफ़ॉल्ट रूप से 10GB है, लेकिन आपका वास्तविक माइलेज विशेष रूप से नवीनतम सुरक्षा संवर्द्धन के साथ भिन्न हो सकता है)। Hadoop उनके संशोधन टाइमस्टैम्प की जांच करके वितरित कैश फ़ाइलों में परिवर्तनों का ट्रैक रखता है।

*पोस्ट करने के लिए अपडेट करें:कृपया ध्यान दें कि नीचे दिए गए आइटम 2 और 3 को CDH4 से हटा दिया गया है और अब CDH5 से समर्थित नहीं होगा।

2. सबमिट करने योग्य JAR की उपनिर्देशिका में संदर्भित JAR शामिल करें:MapReduce जॉब इस उपनिर्देशिका से JAR को ${mapred.local.dir}/taskTracker/${user.name}/jobcache/$ में अनपैक कर देगी। जॉबिड/जार टास्कट्रैकर नोड्स पर और JAR को आपके कोड पर उपलब्ध कराने के लिए अपने कार्यों को इस निर्देशिका में इंगित करें। यदि जार छोटे हैं, तो अक्सर बदलते हैं, और नौकरी-विशिष्ट हैं तो यह पसंदीदा तरीका है।

3. अंत में, आप क्लस्टर नोड्स पर JAR स्थापित कर सकते हैं। सबसे आसान तरीका है कि जार को $HADOOP_HOME/lib . में रखा जाए निर्देशिका के रूप में इस निर्देशिका से सब कुछ शामिल है जब एक Hadoop डेमॉन शुरू होता है। हालाँकि, चूंकि आप जानते हैं कि केवल टास्कट्रैकर्स को ही इन नए JAR की आवश्यकता होगी, इसलिए एक बेहतर तरीका है कि हडूप-एनवी.एसएच कॉन्फ़िगरेशन फ़ाइल में HADOOP_TASKTRACKER_OPTS विकल्प को संशोधित किया जाए। इस विधि को प्राथमिकता दी जाती है यदि JAR को HBase जैसे नोड्स पर चलने वाले कोड से जोड़ा जाता है।

HADOOP_TASKTRACKER_OPTS="-classpath<colon-separated-paths-to-your-jars>"

जब आप कर लें तो टेस्टट्रैकर्स को पुनरारंभ करें। अंतर्निहित सॉफ़्टवेयर में परिवर्तन होने पर जार को अपडेट करना न भूलें।

उपरोक्त सभी विकल्प केवल वितरित नोड्स पर चल रहे कोड को प्रभावित करते हैं। यदि आपका कोड जो Hadoop जॉब लॉन्च करता है, उसी लाइब्रेरी का उपयोग करता है, तो आपको JAR को HADOOP_CLASSPATH पर्यावरण चर में भी शामिल करना होगा:

HADOOP_CLASSPATH="<colon-separated-paths-to-your-jars>"

ध्यान दें कि जावा 1.6 क्लासपाथ से शुरू होकर "/path/to/your/jars/* जैसी निर्देशिकाओं को इंगित किया जा सकता है। " जो दी गई निर्देशिका से सभी JARs को उठाएगा।

वही मार्गदर्शक सिद्धांत देशी कोड पुस्तकालयों पर लागू होते हैं जिन्हें नोड्स (जेएनआई या सी ++ पाइप) पर चलाने की आवश्यकता होती है। आप उन्हें "-files . के साथ वितरित कैश में डाल सकते हैं ” विकल्प, उन्हें “-अभिलेखागार . के साथ निर्दिष्ट संग्रह फ़ाइलों में शामिल करें “विकल्प, या उन्हें क्लस्टर नोड्स पर स्थापित करें। यदि डायनेमिक लाइब्रेरी लिंकर ठीक से कॉन्फ़िगर किया गया है तो मूल कोड आपके कार्य प्रयासों के लिए उपलब्ध कराया जाना चाहिए। आप JAVA_LIBRARY_PATH या LD_LIBRARY_PATH चर निर्दिष्ट करके कार्य के चल रहे कार्य प्रयासों के वातावरण को भी स्पष्ट रूप से संशोधित कर सकते हैं:

hadoop jar <your jar> [main class]
      -D mapred.child.env="LD_LIBRARY_PATH=/path/to/your/libs" ...

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. HBase और Hive - एक साथ बेहतर

  2. सैंटेंडर के पास रीयल-टाइम डेटा इंजेस्ट आर्किटेक्चर के अंदर

  3. एचडीएफएस ट्यूटोरियल - शुरुआती के लिए एचडीएफएस का पूरा परिचय

  4. अपाचे HBase क्या करें और क्या न करें

  5. Hadoop Partitioner - MapReduce Partitioner की मूल बातें जानें