2013-01-11 38 views
5

मैं एक दूरसंचार परियोजना पर काम कर रहा हूं, जो डेटा विश्लेषण के लिए हैडोप - हाइव का उपयोग करता है। एक दिन के लिए, हमें लाखों रिकॉर्ड मिलेंगे। निर्दिष्ट दिनों के बाद, हमें पुराने डेटा को हटाने की जरूरत है, क्योंकि हमारे पास स्टोरेज क्षमता नहीं है। रिकॉर्ड हटाने का सबसे अच्छा तरीका क्या है?हडोप - हाइव: निर्दिष्ट डेटा से अधिक पुराना डेटा हटाएं

अतिरिक्त जानकारी:

उन छत्ता टेबल एक स्तंभ जो आबादी की तारीख होने होगा।

उत्तर

11

मुझे लगता है कि आपका उपयोग केस आपके हाइव टेबल में "दिन" विभाजन का उपयोग करने के लिए स्वयं को बहुत अच्छी तरह से उधार देता है। यदि "दिन" केवल एक स्तंभ है तो यह आपकी तालिका को बनाए रखने और साफ करने में मुश्किल हो जाएगा।

क्या एक विभाजन वास्तव में हाइव में इसका मतलब है कि आप प्रत्येक "दिन"

उदाहरण के लिए

तो के लिए एक निर्देशिका होगा: निम्नलिखित

create table mytable (
    ... 
) partitioned by (day string) 

तो जब आप डेटा जोड़ने आप उदाहरण के लिए होगा HDFS में संरचना:

/user/hive/warehouse/mytable/day=2013-01-10 
/user/hive/warehouse/mytable/day=2013-01-11 
... 

और प्रत्येक विभाजन में आप उस दिन के लिए सामग्री के लिए होगा।

तो पुराने डेटा तुच्छ हो जाता है को हटाने, आप उदाहरण के लिए एक क्रॉन जॉब है कि दैनिक चलाता है और (आदेश date --date '30 days ago' +\%Y-\%m-\%d का उपयोग कर उदाहरण के लिए) एक्स दिनों के लिए डेटा को हटा देता पहले और बस कर निम्न आदेश हो सकता है:

hadoop fs -rmr -skiptrash /user/hive/warehouse/mytable/day=`date --date '30 days ago' +\%Y-\%m-\%d` 

यदि आप show partitions mytable करते हैं तो इस बिंदु पर आपके पास अभी भी आपके विभाजन तालिका में आपका विभाजन होगा, लेकिन विभाजन हटाए गए विभाजनों के लिए कोई भी क्वेरी जहां आप डेटा हटाएंगे, कुछ भी वापस नहीं आएगा। क्या तुम सच में metastore में विभाजन को नष्ट करना चाहते हैं तो आप निम्न आदेश का उपयोग करने के लिए है:

ALTER TABLE mytable DROP PARTITION (day='xxxx-xx-xx'); 

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