11

RISOLTO: Vedere l'aggiornamento n. 2 di seguito per la 'soluzione' a questo problema.Caricamento di dati con Hive, S3, EMR e Recover Partitions

~~~~~~~

In s3, ho un po 'di log file * .gz memorizzati in una struttura di directory annidata come:

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

Sto tentando di caricare questi in Hive sulla Elastic Map Reduce (EMR), utilizzando una specifica partizione di multi-livello come:

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

creazione delle opere di tabella. Ho quindi tentare di recuperare tutte le partizioni esistenti:

alter table logs recover partitions; 

Questo sembra funzionare e lo fa drill-down attraverso la mia struttura s3 e aggiungi tutti i vari livelli di directory:

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 
... 

così sembra che Hive può vedere e interpretare correttamente il mio layout di file. Tuttavia, nessun dato reale viene mai caricato. Se provo a fare un conteggio semplice o selezionare *, non ottengo nulla:

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 

Pensieri? Mi manca qualche comando aggiuntivo per caricare i dati oltre il recupero delle partizioni?

Se posso aggiungere manualmente una partizione con una posizione esplicita, allora che funziona:

posso solo scrivere uno script per fare questo, ma ci si sente come mi manca qualcosa WRT fondamentale 'recuperare partizioni '.

UPDATE # 1

Grazie ad un'osservazione brillante e acuto da Joe K in un commento qui sotto, penso che le questioni caso di sensibilità potrebbero essere coinvolti qui.

I file sono sicuramente organizzate le seguenti specifiche percorso, con una maiuscola H (Penso che questo potrebbe essere qualche cenno alla formattazione ISO8601):

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

Creo il mio tabella esterna con una specifica partizione che fa la corretta capitalizzazione:

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

(notare la "H"). Io faccio un recupero partizioni, che sembra recurse attraverso le directory e trovare le partizioni in modo appropriato, ma in qualche modo (nonostante l'utilizzo di 'H' in tutti i posti istruttivi finora), sembra infatti che Hive lo salva come una minuscola 'h' :

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

(notare la "h"). Quindi sembra che Hive sia in grado di scoprire le partizioni, ma poi le memorizza in una forma minuscola ... Più tardi, quando cerca i dati, questi percorsi sono (ovviamente) vuoti perché S3 fa distinzione tra maiuscole e minuscole.

Ho intenzione di spostare i miei dati in una struttura di directory tutto minuscolo e vedere se funziona ...

UPDATE # 2

Anzi, mi hanno confermato che la maiuscola 'H' come un nome di partizione (nel layout del file s3) è stato il problema qui. Per quanto posso dire, questo è ciò che stava accadendo:

  • mio layout su S3 aveva un nome di partizione tra maiuscole e minuscole (H =)
  • Esecuzione di recuperare partizioni scopre correttamente queste partizioni ...
  • Ma poi vengono archiviati internamente in minuscolo (h)

Il comando "recupera partizioni" è un'estensione di Hive creata da Amazon. Sospetto fortemente che l'errore sia in questo componente. Per quanto ne so, Hive non ha il concetto di esplorare una radice di file per la scoperta delle partizioni ...

+0

Nel caso in cui qualcun altro si avventuri su questo percorso, ecco due post del blog molto utili: http://pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json/ e https: //sites.google.com/a/khanacademy.org/forge/technical/data_n/running-emr-elastic-mapreduce-on-the-khan-academy-data –

+0

Una cosa che sto notando è che la colonna delle partizioni dell'ora ha diversi casi in diverse parti del tuo post. Questo potrebbe essere parte del problema? Non sono sicuro di quali parti di S3/Hive siano o meno sensibili al maiuscolo/minuscolo. Inoltre, qual è l'output quando si esegue la descrizione della partizione logs2 formattata (y = '2012', m = '11 ', d = '06', h = '08 ') '? –

+0

Joe! Grazie! Penso che tu stia partecipando a qualcosa. In questo momento sto vedendo un comportamento sintomatico di problemi di maiuscole e minuscole. Ho intenzione di aggiornare la mia domanda con maggiori informazioni. –

risposta

10

È un problema nel campo delle ore!

Problemi correlati