मुझे पता है कि MSCK REPAIR TABLE
बाहरी तालिका के वर्तमान विभाजन के साथ मेटास्टोर को अपडेट करता है।
ऐसा करने के लिए, आपको केवल टेबल के रूट फोल्डर पर ls
करने की जरूरत है (दिए गए टेबल को केवल एक कॉलम द्वारा विभाजित किया गया है), और इसके सभी विभाजन प्राप्त करें, स्पष्ट रूप से एक <1s ऑपरेशन।
लेकिन व्यवहार में, ऑपरेशन को निष्पादित होने में बहुत लंबा समय लग सकता है (या यहां तक कि समयबाह्य अगर एडब्ल्यूएस एथेना पर चलता है)।
तो मेरा सवाल यह है कि, पर्दे के पीछे वास्तव में MSCK REPAIR TABLE
क्या करता है और क्यों?
MSCK REPAIR TABLE पार्टिशन को कैसे ढूंढता है?
प्रासंगिक होने पर अतिरिक्त डेटा:
हमारा डेटा S3 पर है, यह EMR (हाइव) या एथेना (प्रेस्टो) पर चलते समय धीमा है, तालिका में ~ 450 विभाजन हैं, प्रत्येक विभाजन में औसत 90 फाइलें हैं, एक विभाजन के लिए कुल 3 गीगाबाइट, फाइलें अंदर हैं अपाचे लकड़ी की छत प्रारूप
1 उत्तर
आप इस अर्थ में सही हैं कि यह निर्देशिका संरचना को पढ़ता है, इसमें से विभाजन बनाता है और फिर हाइव मेटास्टोर को अपडेट करता है। वास्तव में हाल ही में, मेटास्टोर से गैर-मौजूदा विभाजन को भी हटाने के लिए कमांड में सुधार किया गया था। आप जो उदाहरण दे रहे हैं वह बहुत सरल है क्योंकि इसमें विभाजन कुंजियों का केवल एक स्तर है। एकाधिक विभाजन कुंजियों वाली तालिका पर विचार करें (2-3 विभाजन कुंजियाँ व्यवहार में सामान्य हैं)। msck repair
को तालिका निर्देशिका के अंतर्गत सभी उप-निर्देशिकाओं का पूर्ण-वृक्ष ट्रैवर्सल करना होगा, फ़ाइल नामों को पार्स करना होगा, सुनिश्चित करें कि फ़ाइल नाम मान्य हैं, जांचें कि विभाजन मेटास्टोर में पहले से मौजूद है या नहीं और फिर केवल वही विभाजन जोड़ें जो मेटास्टोर में मौजूद नहीं हैं। ध्यान दें कि फाइल सिस्टम पर प्रत्येक लिस्टिंग नामेनोड (एचडीएफएस के मामले में) के लिए एक आरपीसी है या एस 3 या एडीएलएस के मामले में एक वेब-सेवा कॉल है जो महत्वपूर्ण मात्रा में जोड़ सकती है। इसके अतिरिक्त, यह पता लगाने के लिए कि विभाजन पहले से ही मेटास्टोर में मौजूद है या नहीं, इसे उन सभी विभाजनों की पूरी सूची बनाने की आवश्यकता है जो मेटास्टोर तालिका के लिए जानता है। ये दोनों कदम संभावित रूप से बड़े टेबल पर कमांड के लिए लगने वाले समय को बढ़ा सकते हैं। एमएसके मरम्मत तालिका के प्रदर्शन में हाल ही में हाइव 2.3.0 में काफी सुधार हुआ था (अधिक विवरण के लिए एचआईवीई -15879 देखें)। आप कमांड के प्रदर्शन को बेहतर बनाने के लिए hive.metastore.fshandler.threads
और hive.metastore.batch.retrieve.max
को ट्यून करना चाह सकते हैं।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
amazon-web-services
Amazon Web Services (AWS) एक सार्वजनिक-क्लाउड है: IaaS (एक सेवा के रूप में अवसंरचना) और अमेज़न द्वारा उपलब्ध कराए गए SaaS (एक सेवा के रूप में सॉफ़्टवेयर)। प्रोग्रामिंग और आर्किटेक्चर के बारे में प्रश्न विषय पर हैं। Https://serverfault.com पर सामान्य सर्वर सहायता प्राप्त की जा सकती है। AWS टैग का उपयोग शायद ही कभी किया जाता है और आमतौर पर अन्य टैग के साथ प्रश्न के विषय को अधिक स्पष्ट रूप से परिभाषित करने के लिए उपयोग किया जाएगा।