11

सॉल्व: इस समस्या के लिए 'समाधान' के लिए नीचे अपडेट # 2 देखें।हाइव, एस 3, ईएमआर, और पुनर्प्राप्ति विभाजन के साथ डेटा लोड हो रहा है

s3://($BUCKET)/y=2012/m=11/d=09/H=10/ 

मैं हाइव में इन लोड करने का प्रयास कर रहा हूँ:

~~~~~~~

S3 में, मैं कुछ लॉग * .gz फ़ाइलों की तरह एक नेस्टेड निर्देशिका संरचना में संग्रहीत है लचीला पर मानचित्र, कम (ईएमआर) की तरह एक बहु-स्तरीय विभाजन कल्पना का उपयोग कर: तालिका कार्यों के

create external table logs (content string) 
partitioned by (y string, m string, d string, h string) 
location 's3://($BUCKET)'; 

निर्माण। मैं तो मौजूदा विभाजन के सभी ठीक करने के लिए प्रयास करते हैं:

alter table logs recover partitions; 

यह काम करने लगता है और यह मेरी S3 संरचना के माध्यम से विस्तार में जाकर निर्देशिका के सभी विभिन्न स्तरों जोड़ता है:

hive> show partitions logs; 
OK 
y=2012/m=11/d=06/h=08 
y=2012/m=11/d=06/h=09 
y=2012/m=11/d=06/h=10 
y=2012/m=11/d=06/h=11 
y=2012/m=11/d=06/h=12 
y=2012/m=11/d=06/h=13 
y=2012/m=11/d=06/h=14 
y=2012/m=11/d=06/h=15 
y=2012/m=11/d=06/h=16 
... 

तो ऐसा लगता है कि हाइव सफलतापूर्वक मेरे फ़ाइल लेआउट को देख और समझ सकता है। हालांकि, कोई वास्तविक डेटा कभी लोड नहीं होता है। यदि मैं एक साधारण गिनती करने का प्रयास करता हूं या * का चयन करता हूं, तो मुझे कुछ भी नहीं मिलता है:

hive> select count(*) from logs; 
... 
OK 
0 

hive> select * from logs limit 10; 
OK 

hive> select * from logs where y = '2012' and m = '11' and d = '06' and h='16' limit 10; 
OK 

विचार? क्या मैं विभाजन को पुनर्प्राप्त करने से परे डेटा लोड करने के लिए कुछ अतिरिक्त कमांड खो रहा हूं?

मैं मैन्युअल रूप से कोई स्पष्ट स्थान के साथ एक विभाजन जोड़ते हैं, तो काम करता है कि:

मैं सिर्फ यह करने के लिए एक स्क्रिप्ट लिख सकते हैं, लेकिन यह लगता है जैसे मैं कुछ मौलिक wrt याद कर रहा हूँ 'विभाजन की वसूली '।

अद्यतन # 1

नीचे एक टिप्पणी में जो कश्मीर से एक शानदार और उत्सुक अवलोकन के लिए धन्यवाद, मुझे लगता है कि मामले की संवेदनशीलता मुद्दों यहाँ शामिल हो सकता है।

फ़ाइलें निश्चित रूप से निम्नलिखित पथ कल्पना की तरह संगठित किया गया है, एक बड़े अक्षरों में लिखा एच के साथ (मुझे लगता है कि इस iso8601 स्वरूपण करने के लिए कुछ इशारा हो सकता है):

s3://($BUCKET)/y=2012/m=11/d=09/H=10/ 

मैं एक विभाजन कल्पना करता है के साथ अपने बाहरी तालिका बनाने उचित पूंजीकरण:

partitioned by (y string, m string, d string, H string) 

('एच' पर ध्यान दें)। मैं पुनर्प्राप्ति विभाजन करता हूं, जो निर्देशिकाओं के माध्यम से पुन: कार्य करता है और विभाजन को उचित रूप से ढूंढता प्रतीत होता है, लेकिन किसी भी तरह (अब तक सभी निर्देशक स्थानों में 'एच' का उपयोग करने के बावजूद), ऐसा लगता है कि हाइव इसे कम मामले 'एच' के रूप में सहेजता है :

hive> show partitions logs; 
OK 
y=2012/m=11/d=06/h=08 

('एच' पर ध्यान दें)। तो ऐसा लगता है कि हाइव विभाजन को खोजने में सक्षम है, लेकिन फिर उन्हें लोअरकेस फॉर्म में संग्रहीत करता है ... बाद में जब यह डेटा देखने के लिए जाता है, तो ये पथ खाली होते हैं क्योंकि एस 3 केस संवेदनशील होता है।

मैं अपने डेटा को सभी लोअरकेस निर्देशिका संरचना में स्थानांतरित करने जा रहा हूं और देखता हूं कि यह काम करता है ...

अद्यतन # 2

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

  • S3 पर मेरे लेआउट एक केस-संवेदी विभाजन नाम था (एच =)
  • रनिंग वसूल विभाजन सही ढंग से इन विभाजनों को पता चलता है ...
  • लेकिन फिर वे आंतरिक रूप से लोअरकेस (एच)

'पुनर्प्राप्ति विभाजन' कमांड अमेज़ॅन द्वारा लिखित हाइव का विस्तार है। मुझे दृढ़ता से संदेह है कि इस घटक में बग है। मेरे ज्ञान के लिए मूल हाइव में विभाजन खोज के लिए फ़ाइल रूट की खोज करने की कोई अवधारणा नहीं है ...

+0

यदि कोई और इस पथ को नीचे चला रहा है, तो यहां दो बहुत उपयोगी ब्लॉग पोस्ट हैं: http://pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json/ और https: //sites.google.com/a/khanacademy.org/forge/technical/data_n/running-emr-elastic-mapreduce-on-the-khan-academy-data –

+0

एक बात जो मैं देख रहा हूं वह यह है कि आपका घंटा विभाजन कॉलम आपकी पोस्ट के विभिन्न हिस्सों में अलग-अलग मामले हैं। क्या यह समस्या का हिस्सा हो सकता है? मुझे यकीन नहीं है कि एस 3/हाइव के कौन से हिस्से केस-संवेदी हैं या नहीं हैं। साथ ही, जब आप स्वरूपित लॉग 2 विभाजन (y = '2012', m = '11 ', d = '06', h = '08 ') का वर्णन करते हैं तो आउटपुट क्या होता है? –

+0

जो! धन्यवाद! मुझे लगता है कि तुम कुछ कर रहे हो। मैं निश्चित रूप से व्यवहार देख रहा हूं जो केस-संवेदनशीलता के मुद्दों का लक्षण है। मैं अपने प्रश्न को अधिक जानकारी के साथ अपडेट करने जा रहा हूं। –

उत्तर

10

यह घंटे के क्षेत्र में एक मामला मुद्दा है!