हाइव आंतरिक तालिकाओं और बाहरी तालिकाओं के बीच अंतर?


110

क्या कोई मुझे हाइव की बाहरी तालिका और आंतरिक तालिकाओं के बीच का अंतर बता सकता है। मुझे पता है कि टेबल को गिराने के दौरान अंतर आता है। मुझे समझ में नहीं आ रहा है कि डेटा से आपका क्या मतलब है और मेटाडेटा को आंतरिक में हटा दिया गया है और केवल मेटाडेटा को बाहरी तालिकाओं में हटा दिया गया है। क्या कोई मुझे नोड्स के संदर्भ में समझा सकता है।

जवाबों:


117

हाइव का मास्टर नोड पर एक रिलेशनल डेटाबेस है जो इसे राज्य का ट्रैक रखने के लिए उपयोग करता है। उदाहरण के लिए, जब आप CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';, इस तालिका स्कीमा को डेटाबेस में संग्रहीत किया जाता है।

यदि आपके पास एक विभाजन तालिका है, तो विभाजन डेटाबेस में संग्रहीत किए जाते हैं (यह हाइव को फ़ाइल-सिस्टम पर जाने और उन्हें खोजने, आदि के बिना विभाजन की सूची का उपयोग करने की अनुमति देता है)। इस प्रकार की बातें 'मेटाडेटा' हैं।

जब आप एक आंतरिक तालिका छोड़ते हैं, तो यह डेटा को गिराता है, और यह मेटाडेटा को भी गिराता है।

जब आप किसी बाहरी तालिका को छोड़ते हैं, तो यह केवल मेटा डेटा को गिराता है। इसका मतलब है कि छत्ता अब उस डेटा से अनभिज्ञ है। यह स्वयं डेटा को स्पर्श नहीं करता है।


ठीक है .. उदाहरण के लिए मैंने एक बाहरी तालिका बनाई है .. और मैं इसे छोड़ देता हूं। क्या होता है? डेटा से क्या मतलब है छुआ तक नहीं है? अगर मैं उस तालिका का चयन * करूं तो क्या यह प्रदर्शित होगा? मैं अंतर नहीं देख पा रहा हूं।
DrewRose

11
यदि आप एक तालिका छोड़ते हैं, तो हाइव उस स्थिति को वापस कर देता है जब आप तालिका को गिराए जाने से पहले थे। यदि आप फू को छोड़ने के बाद क्वेरी 'सेलेक्ट * फ़ू' से चलाते हैं, तो हाइव आपको बताएगा कि टेबल मौजूद नहीं है। ऐसा इसलिए है क्योंकि आपने हाइव को उस टेबल के बारे में भूलने के लिए कहा है। डेटा अभी भी मौजूद है जो पहले किसी भी फाइलसिस्टम में था। मेटाडेटा को 'पॉइंटर' मानें जहां डेटा है।
प्रीस्टोमेशन

1
तो आप बता रहे हैं कि अगर मेरे पास डिस लोकेशन ऑप्ट / नैन्सी / foo.txt में डेटा है और मैं इसे बाहरी तालिका में लोड करता हूं और इसे ड्रॉप करता हूं, तो मेटाडेटा खो जाता है, लेकिन इस स्थान में डेटा ऑप्ट / नैन्सी / foo.txt रहता है?
DrewRose

ठीक है, अब यह स्थान एचडीएफएस या मेरे स्थानीय सिस्टम में है? यदि यह स्थानीय प्रणाली में है, जब मैं डेटा को एक आंतरिक तालिका में लोड करता हूं और तालिका को ड्रॉप करता हूं फ़ाइल foo.txt उस स्थान पर अभी भी रहेगी। क्या मैं अभी तक सही हूँ?
DrewRose

3
हाइव टेबल एक समर्थित फाइल सिस्टम (Hbase, HDFS, S3, आदि) पर हैं। मैं मान रहा हूं कि आप स्थानीय फ़ाइल से डेटा को हाइव टेबल में लोड करने के लिए "लोड डेटा" का उपयोग कर रहे हैं? इस स्थिति में, आप स्थानीय फ़ाइल को हाइव तालिका में कॉपी कर रहे हैं। जब आप इस तालिका को हटाते हैं, तो आंतरिक तालिका में डेटा की प्रतिलिपि हटा दी जाएगी, लेकिन "LOAD DATA" कमांड से स्रोत फ़ाइल अभी भी बरकरार रहेगी।
prestomation

100

Hive तालिकाओं को बाहरी या आंतरिक के रूप में बनाया जा सकता है। यह एक विकल्प है जो प्रभावित करता है कि डेटा कैसे लोड, नियंत्रित और प्रबंधित किया जाता है।

जब बाहरी तालिकाओं का उपयोग करें:

  1. डेटा का उपयोग हाइव के बाहर भी किया जाता है। उदाहरण के लिए, डेटा फ़ाइलों को एक मौजूदा प्रोग्राम द्वारा पढ़ा और संसाधित किया जाता है जो फ़ाइलों को लॉक नहीं करता है।
  2. DROP TABLE के बाद भी डेटा को अंतर्निहित स्थान पर रहना होगा। यह तब लागू हो सकता है जब आप एक ही डेटा सेट पर या कई स्कीमाओं के माध्यम से पुनरावृत्ति कर रहे हों।
  3. आप ASV जैसे कस्टम स्थान का उपयोग करना चाहते हैं।
  4. हाइव के पास डेटा और नियंत्रण सेटिंग्स, डायर आदि नहीं होने चाहिए, आपके पास एक और कार्यक्रम या प्रक्रिया है जो उन चीजों को करेगी।
  5. आप मौजूदा तालिका (AS SELECT) के आधार पर तालिका नहीं बना रहे हैं।

जब आंतरिक तालिका का उपयोग करें:

डेटा अस्थायी है।

आप चाहते हैं कि हाइव तालिका और डेटा के जीवनचक्र को पूरी तरह से प्रबंधित करे।



एक आंतरिक तालिका बनाने से HDFS से डेटा हटा दिया जाएगा या यह एक प्रतिलिपि बनाता है और विशेष रूप से छत्ता स्रोत (HDFS) को बरकरार रखने के लिए उपयोग करता है?
luckyluke

@swetha हाय, मैं यहां आया क्योंकि मैंने पूरी तरह से मेटास्टोर.डब को डिलीट कर दिया था लेकिन डेटा एचडीएफएस पर बना हुआ है। इसलिए जब मैं टेबल दिखाता हूं तो कुछ भी नहीं दिखाया जाता है। क्या मेटाडेटा को फिर से बनाने का एक तरीका है?
अवधेश १४

46

आपको जवाब देने के लिए प्रश्न:

बाहरी तालिकाओं के लिए, हाइव तालिका के निर्माण के दौरान निर्दिष्ट स्थान में डेटा संग्रहीत करता है (आमतौर पर गोदाम निर्देशिका में नहीं)। यदि बाहरी तालिका को गिरा दिया जाता है, तो तालिका मेटाडेटा हटा दी जाती है, लेकिन डेटा नहीं।

आंतरिक तालिकाओं के लिए, हाइव अपने गोदाम निर्देशिका में डेटा संग्रहीत करता है। यदि तालिका को गिरा दिया जाता है तो दोनों तालिका मेटाडेटा और डेटा हटा दिया जाएगा।


आपके सन्दर्भ के लिए,

आंतरिक और बाहरी तालिकाओं के बीच अंतर:

बाहरी तालिकाओं के लिए -

  • एचडीएफएस सर्वर पर बाह्य तालिका स्टोर की गई फाइलें लेकिन तालिकाएँ स्रोत फ़ाइल से पूरी तरह से जुड़ी नहीं हैं।

  • यदि आप किसी बाहरी तालिका को हटाते हैं, तो फ़ाइल अभी भी HDFS सर्वर पर बनी रहती है।

    एक उदाहरण के रूप में यदि आप HIVE -QL का उपयोग करके HIVE में "table_test" नामक एक बाहरी तालिका बनाते हैं और तालिका को "फ़ाइल" से लिंक करते हैं , तो HIVE से "table_test" को हटाने से HDFS से "फ़ाइल" नहीं हटेगी

  • बाहरी टेबल फाइलें उन लोगों के लिए सुलभ हैं जिनके पास एचडीएफएस फ़ाइल संरचना तक पहुंच है और इसलिए एचडीएफएस फ़ाइल / फ़ोल्डर स्तर पर सुरक्षा को प्रबंधित करने की आवश्यकता है।

  • मेटा डेटा को मास्टर नोड पर बनाए रखा जाता है, और HIVE से एक बाहरी तालिका को हटाकर केवल मेटाडेटा को हटाता है डेटा / फ़ाइल नहीं।


आंतरिक तालिकाओं के लिए-

  • में सेटिंग के आधार पर एक निर्देशिका में संग्रहीत hive.metastore.warehouse.dir, डिफ़ॉल्ट आंतरिक तालिकाओं द्वारा जमा हो जाती है निम्न निर्देशिका में "/ उपयोगकर्ता / छत्ता / गोदाम" आप कॉन्फ़िग फ़ाइल में स्थान अपडेट करके इसे बदल सकते हैं।
  • तालिका को हटाने से क्रमशः मास्टर-नोड और एचडीएफएस से मेटाडेटा और डेटा हटा दिया जाता है।
  • आंतरिक तालिका फ़ाइल सुरक्षा को केवल HIVE के माध्यम से नियंत्रित किया जाता है। सुरक्षा को HIVE के भीतर प्रबंधित करने की आवश्यकता है, शायद स्कीमा स्तर पर (संगठन पर निर्भर करता है)।

हाइव में आंतरिक या बाहरी टेबल हो सकते हैं, यह एक विकल्प है जो प्रभावित करता है कि डेटा कैसे लोड, नियंत्रित और प्रबंधित किया जाता है।

जब बाहरी तालिकाओं का उपयोग करें:

  • डेटा भी हाइव का इस्तेमाल किया बाहर है । उदाहरण के लिए, डेटा फ़ाइलों को एक मौजूदा प्रोग्राम द्वारा पढ़ा और संसाधित किया जाता है जो फ़ाइलों को लॉक नहीं करता है।
  • DROP TABLE के बाद भी डेटा को अंतर्निहित स्थान पर रहना होगा। यह तब लागू हो सकता है जब आप किसी एकल डेटा सेट पर या कई स्कीमा के माध्यम से पुनरावृत्ति कर रहे हों।
  • हाइव के पास डेटा और नियंत्रण सेटिंग्स, निर्देशिकाएं आदि नहीं होनी चाहिए । आपके पास एक और कार्यक्रम या प्रक्रिया हो सकती है जो उन चीजों को करेगी।
  • आप मौजूदा तालिका (AS SELECT) के आधार पर तालिका नहीं बना रहे हैं।

जब आंतरिक तालिका का उपयोग करें:

  • डेटा अस्थायी है
  • आप चाहते हैं कि हाइव तालिका और डेटा के जीवन-चक्र को पूरी तरह से प्रबंधित करे

स्रोत:

एचडीआईनाइट: हाइव इंटरनल और एक्सटर्नल टेबल इंट्रो

Hadoop- HIVE में आंतरिक और बाहरी टेबल


1
@CapturedTree लेकिन जवाब सही नहीं है। "हाइव अपने वेयरहाउस निर्देशिका में डेटा ले जाता है।" -यह पूरी तरह से गलत है, ऐसा नहीं है। तालिका स्थान में डेटा संग्रहीत किया जा रहा है। बाहरी या प्रबंधित कोई फर्क नहीं पड़ता।
बायीं ओर

6

एक आंतरिक तालिका डेटा को वेयरहाउस फ़ोल्डर में संग्रहीत किया जाता है, जबकि एक बाहरी तालिका डेटा आपके द्वारा तालिका निर्माण में उल्लिखित स्थान पर संग्रहीत किया जाता है।

इसलिए जब आप एक आंतरिक तालिका को हटाते हैं, तो यह स्कीमा के साथ-साथ वेयरहाउस फ़ोल्डर के तहत डेटा को हटा देता है, लेकिन बाहरी तालिका के लिए यह केवल स्कीमा है जिसे आप ढीला करेंगे।

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


4

मेरे सीमित शोध और परीक्षण के आधार पर अब तक व्यवहार में केवल अंतर (इच्छित उपयोग नहीं) (हाइव 1.1.0 -cdh5.12.0 का उपयोग करके) ऐसा प्रतीत होता है कि जब कोई तालिका गिरा दी जाती है

  • HDFS फ़ाइल सिस्टम से आंतरिक (प्रबंधित) तालिकाओं का डेटा हटा दिया जाता है
  • जबकि बाहरी तालिकाओं का डेटा HDFS फाइल सिस्टम से डिलीट नहीं होता है।

(नोट: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL में अनुभाग 'प्रबंधित और बाहरी तालिकाएँ' देखें जो कुछ अन्य अंतर को सूचीबद्ध करते हैं जो मुझे पूरी तरह से समझ में नहीं आए)

मेरा मानना ​​है कि हाइव उस स्थान को चुनता है जहां उसे ऊपर से नीचे तक की पूर्ववर्तीता के आधार पर तालिका बनाने की आवश्यकता होती है

  1. तालिका निर्माण के दौरान निर्धारित स्थान
  2. डेटाबेस / स्कीमा क्रिएशन में परिभाषित स्थान जिसमें तालिका बनाई जाती है।
  3. डिफ़ॉल्ट हाइव वेयरहाउस निर्देशिका (संपत्ति hive.metastore.warehouse.dir में hive.site.xml)

जब "हाइव टेबल के निर्माण" के दौरान "स्थान" विकल्प का उपयोग नहीं किया जाता है, तो उपरोक्त पूर्ववर्ती नियम का उपयोग किया जाता है। यह आंतरिक और बाहरी दोनों तालिकाओं के लिए लागू है। इसका मतलब है कि एक आंतरिक तालिका को वेयरहाउस निर्देशिका में निवास करने की आवश्यकता नहीं है और कहीं और निवास कर सकता है।

नोट: मुझे कुछ परिदृश्य याद आ सकते हैं, लेकिन मेरी सीमित खोज के आधार पर, आंतरिक और बाह्य तालिका दोनों का व्यवहार ऊपर वर्णित एक अंतर (डेटा विलोपन) को छोड़कर समान प्रतीत होता है। मैंने आंतरिक और बाहरी दोनों तालिकाओं के लिए निम्नलिखित परिदृश्यों की कोशिश की।

  1. स्थान विकल्प के साथ और बिना तालिका बनाना
  2. विभाजन विकल्प के साथ और उसके बिना तालिका बनाना
  3. हाइव लोड और इन्सर्ट स्टेटमेंट का उपयोग करके नया डेटा जोड़ना
  4. Hive के बाहर तालिका स्थान पर डेटा फ़ाइलों को जोड़ना (HDFS आदेशों का उपयोग करके) और "MSCK मरम्मत योग्य आदेश" का उपयोग करके तालिका को ताज़ा करना।
  5. टेबलों को गिरा देना

अच्छा अन्वेषण। यह एकमात्र उत्तर है जो बताया गया है कि हाइव आंतरिक और बाहरी तालिका के लिए स्थान विकल्प को कैसे संभालता है।
d2207197

3

बाहरी तालिकाओं में, यदि आप इसे छोड़ देते हैं, तो यह तालिका के केवल स्कीमा को हटा देता है, तालिका डेटा भौतिक स्थान में मौजूद है। तो डेटा का उपयोग करने के लिए हडोप एफएस - आरएमआर टैबलेन का उपयोग करें। प्रबंधित टेबल हाइव का टेबल पर पूरा नियंत्रण होगा। बाहरी तालिकाओं में उपयोगकर्ताओं का इस पर नियंत्रण होगा।


मैं ऐसी स्थिति का सामना कर रहा हूं, जहां क्रिएट टेबल फू (आईडी INT) के माध्यम से बनाई गई आंतरिक तालिका पर एक डीआरओपी टेबल के बाद निर्देशिका को हमेशा हटाया नहीं जाता है। मेटाडेटा जाहिरा तौर पर ठीक है क्योंकि शो टेबल सुसंगत है - तालिका उस सूची में दिखाई नहीं देती है जब वह गिरा दिया जाता है। भ्रामक रूप से, मैंने कभी-कभी डायर / को हटा दिया है / देखा है, लेकिन मैं लगातार इसे फिर से नहीं बना सकता। कोई विचार?
मैथ्यू कॉर्नेल

क्या तालिकाओं की अनुमति की जाँच की गई है? आपने HDFS पर स्थान के स्वामित्व को कुछ भिन्न उपयोगकर्ता में बदल दिया होगा।
मिलिंद जिंदल

1

आंतरिक तालिकाएँ उपयोगी होती हैं, यदि आप चाहते हैं कि हाइव आपके डेटा के पूर्ण जीवनचक्र को हटाए जाने सहित प्रबंधित करे, जबकि बाहरी तालिकाएँ तब उपयोगी होती हैं जब फ़ाइलों का उपयोग हाइव के बाहर किया जा रहा हो।


1

बाहरी हाइव टेबल के फायदे हैं कि यह तालिकाओं को छोड़ने पर फ़ाइलों को नहीं हटाता है, हम अलग-अलग सेटिंग्स के साथ पंक्ति प्रारूप सेट कर सकते हैं, जैसे कि सर्ड ....।


1

यह भी ध्यान रखें कि हाइव एक बड़ा डेटा वेयरहाउस है। जब आप किसी तालिका को छोड़ना चाहते हैं तो आप गिगाबाइट्स या टेराबाइट्स डेटा खोना नहीं चाहते हैं। उस पैमाने पर डेटा बनाना, बढ़ना और कॉपी करना समय लेने वाला हो सकता है। जब आप 'प्रबंधित' तालिका हाइव को छोड़ते हैं, तो इसके डेटा को भी कचरा कर देगा। जब आप एक 'बाहरी' तालिका छोड़ते हैं तो हाइव मेटा-स्टोर से केवल स्कीमा परिभाषा हटा दी जाती है। Hdfs पर डेटा अभी भी बना हुआ है।


1

इस परिदृश्य पर विचार करें जो बाहरी तालिका के लिए सबसे अच्छा है:

MapReduce (MR) जॉब एक ​​बड़ी लॉग फाइल को nसब लॉग फाइल को थूकने के लिए फ़िल्टर करती है (जैसे प्रत्येक सब लॉग फाइल में एक विशिष्ट संदेश प्रकार लॉग होता है) और आउटपुट यानी nसब लॉग फाइलें एचडीएफएस में संग्रहित होती हैं।

इन लॉग फ़ाइलों को आगे के विश्लेषणात्मक प्रदर्शन के लिए हाइव तालिकाओं में लोड किया जाना है, इस परिदृश्य में मैं एक बाहरी तालिका (ओं) की सिफारिश करूंगा, क्योंकि वास्तविक लॉग फाइलें उत्पन्न होती हैं और बाहरी प्रक्रिया के स्वामित्व में होती हैं अर्थात एमआर नौकरी इसके अलावा आप एक से बच सकते हैं प्रत्येक उत्पन्न लॉग फ़ाइल को संबंधित हाइव तालिका में भी लोड करने का अतिरिक्त चरण।


1

हाइव में बाहरी तालिका के लिए सबसे अच्छा उपयोग मामला तब होता है जब आप किसी फ़ाइल से CSV या पाठ से तालिका बनाना चाहते हैं


0

हाइव केवल मेटास्टोर में मेटा डेटा और मूल डेटा को हाइव के आउट साइड में स्टोर करता है जब हम बाहरी तालिका का उपयोग करते हैं तो हम टेबल को ड्रॉप करते समय हमारे मूल डेटा अभ्यस्त प्रभाव द्वारा '' स्थान '' दे सकते हैं।


0

जब एचडीएफएस में पहले से ही डेटा है, तो डेटा का वर्णन करने के लिए एक बाहरी हाइव तालिका बनाई जा सकती है। इसे बाहरी कहा जाता है क्योंकि बाहरी तालिका में डेटा डिफ़ॉल्ट गोदाम निर्देशिका के बजाय LOCATION गुणों में निर्दिष्ट है।

आंतरिक तालिकाओं में डेटा रखते समय, हाइव पूरी तरह से तालिका और डेटा के जीवन चक्र का प्रबंधन करता है। इसका मतलब है कि आंतरिक तालिका को गिरा दिए जाने के बाद डेटा हटा दिया जाता है। यदि बाहरी तालिका को गिरा दिया जाता है, तो तालिका मेटाडेटा हटा दी जाती है, लेकिन डेटा रखा जाता है। अधिकांश समय, गलती से टेबल के साथ-साथ डेटा को हटाने से बचने के लिए एक बाहरी तालिका को प्राथमिकता दी जाती है।


0

प्रबंधित तालिकाओं के लिए, हाइव उनके डेटा के जीवनचक्र को नियंत्रित करता है। हाइव डिफ़ॉल्ट रूप से hive.metastore.warehouse.dir द्वारा परिभाषित निर्देशिका के तहत उप-निर्देशिका में प्रबंधित तालिकाओं के लिए डेटा संग्रहीत करता है।

जब हम एक प्रबंधित तालिका छोड़ते हैं, तो हाइव तालिका में डेटा को हटा देता है। लेकिन प्रबंधित तालिकाओं को अन्य उपकरणों के साथ साझा करने के लिए कम सुविधाजनक है। उदाहरण के लिए, हम कहते हैं कि हमारे पास मुख्य रूप से सुअर द्वारा बनाए और उपयोग किए गए डेटा हैं, लेकिन हम इसके खिलाफ कुछ क्वेरीज़ चलाना चाहते हैं, लेकिन डेटा के Hive को स्वामित्व नहीं देते हैं।

उस समय, बाहरी तालिका परिभाषित होती है जो उस डेटा को इंगित करती है, लेकिन इसका स्वामित्व नहीं लेती है।


0

आंतरिक : तालिका पहले बनाई गई है और डेटा बाद में लोड किया गया है

बाहरी : डाटा है वर्तमान और टेबल है शीर्ष पर बनाया इसके बारे में।


0

हाइव में हम एक बाहरी तालिका भी बना सकते हैं। यह हाइव को उस डेटा को संदर्भित करने के लिए कहता है जो गोदाम निर्देशिका के बाहर मौजूदा स्थान पर है। बाहरी तालिकाओं को छोड़ने से मेटाडेटा हटा दिया जाएगा, लेकिन डेटा नहीं।


0

मैं उसे जोड़ना चाहूंगा

  1. आंतरिक तालिकाओं का उपयोग तब किया जाता है जब डेटा को अपडेट करने की आवश्यकता होती है या कुछ पंक्तियों को हटाने की आवश्यकता होती है क्योंकि ACID गुण आंतरिक तालिकाओं पर समर्थित हो सकते हैं लेकिन ACID गुणों को बाहरी तालिकाओं पर समर्थित नहीं किया जा सकता है।
  2. कृपया सुनिश्चित करें कि आंतरिक तालिका में डेटा का बैकअप है क्योंकि यदि कोई आंतरिक तालिका गिरा दी गई है, तो डेटा भी खो जाएगा।

-2

सरल शब्दों में, दो चीजें हैं:

हाइव गोदाम में चीजों का प्रबंधन कर सकता है अर्थात यह गोदाम से डेटा को नष्ट नहीं करेगा। जब हम तालिका हटाते हैं:

1) आंतरिक तालिकाओं के लिए डेटा को आंतरिक रूप से वेयरहाउस में प्रबंधित किया जाता है। तो हटा दिया जाएगा।

2) बाहरी तालिकाओं के लिए डेटा को गोदाम से शाश्वत प्रबंधित किया जाता है। तो हटाया नहीं जा सकता है और अन्य ग्राहक तो हाइव भी इसका इस्तेमाल कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.