मुझे पता है कि MSCK REPAIR TABLE बाहरी तालिका के वर्तमान विभाजन के साथ मेटास्टोर को अपडेट करता है।

ऐसा करने के लिए, आपको केवल टेबल के रूट फोल्डर पर ls करने की जरूरत है (दिए गए टेबल को केवल एक कॉलम द्वारा विभाजित किया गया है), और इसके सभी विभाजन प्राप्त करें, स्पष्ट रूप से एक <1s ऑपरेशन।

लेकिन व्यवहार में, ऑपरेशन को निष्पादित होने में बहुत लंबा समय लग सकता है (या यहां तक ​​कि समयबाह्य अगर एडब्ल्यूएस एथेना पर चलता है)।

तो मेरा सवाल यह है कि, पर्दे के पीछे वास्तव में MSCK REPAIR TABLE क्या करता है और क्यों?

MSCK REPAIR TABLE पार्टिशन को कैसे ढूंढता है?


प्रासंगिक होने पर अतिरिक्त डेटा:

हमारा डेटा S3 पर है, यह EMR (हाइव) या एथेना (प्रेस्टो) पर चलते समय धीमा है, तालिका में ~ 450 विभाजन हैं, प्रत्येक विभाजन में औसत 90 फाइलें हैं, एक विभाजन के लिए कुल 3 गीगाबाइट, फाइलें अंदर हैं अपाचे लकड़ी की छत प्रारूप

16
gdoron is supporting Monica 7 पद 2018, 13:26

1 उत्तर

सबसे बढ़िया उत्तर

आप इस अर्थ में सही हैं कि यह निर्देशिका संरचना को पढ़ता है, इसमें से विभाजन बनाता है और फिर हाइव मेटास्टोर को अपडेट करता है। वास्तव में हाल ही में, मेटास्टोर से गैर-मौजूदा विभाजन को भी हटाने के लिए कमांड में सुधार किया गया था। आप जो उदाहरण दे रहे हैं वह बहुत सरल है क्योंकि इसमें विभाजन कुंजियों का केवल एक स्तर है। एकाधिक विभाजन कुंजियों वाली तालिका पर विचार करें (2-3 विभाजन कुंजियाँ व्यवहार में सामान्य हैं)। msck repair को तालिका निर्देशिका के अंतर्गत सभी उप-निर्देशिकाओं का पूर्ण-वृक्ष ट्रैवर्सल करना होगा, फ़ाइल नामों को पार्स करना होगा, सुनिश्चित करें कि फ़ाइल नाम मान्य हैं, जांचें कि विभाजन मेटास्टोर में पहले से मौजूद है या नहीं और फिर केवल वही विभाजन जोड़ें जो मेटास्टोर में मौजूद नहीं हैं। ध्यान दें कि फाइल सिस्टम पर प्रत्येक लिस्टिंग नामेनोड (एचडीएफएस के मामले में) के लिए एक आरपीसी है या एस 3 या एडीएलएस के मामले में एक वेब-सेवा कॉल है जो महत्वपूर्ण मात्रा में जोड़ सकती है। इसके अतिरिक्त, यह पता लगाने के लिए कि विभाजन पहले से ही मेटास्टोर में मौजूद है या नहीं, इसे उन सभी विभाजनों की पूरी सूची बनाने की आवश्यकता है जो मेटास्टोर तालिका के लिए जानता है। ये दोनों कदम संभावित रूप से बड़े टेबल पर कमांड के लिए लगने वाले समय को बढ़ा सकते हैं। एमएसके मरम्मत तालिका के प्रदर्शन में हाल ही में हाइव 2.3.0 में काफी सुधार हुआ था (अधिक विवरण के लिए एचआईवीई -15879 देखें)। आप कमांड के प्रदर्शन को बेहतर बनाने के लिए hive.metastore.fshandler.threads और hive.metastore.batch.retrieve.max को ट्यून करना चाह सकते हैं।

21
Vihang 10 पद 2018, 23:28