2013-05-26 6 views
45

Ho recentemente iniziato a esaminare query di grandi serie di dati CSV che si trovano su HDFS utilizzando Hive e Impala. Come mi aspettavo, ho ottenuto tempi di risposta migliori con Impala rispetto a Hive per le query che ho utilizzato fino ad ora.In che modo Impala fornisce una risposta alle query più rapida rispetto all'alveare

Mi chiedo se ci sono alcuni tipi di query/casi d'uso che hanno ancora bisogno di Hive e dove Impala non è una buona scelta.

In che modo Impala fornisce una risposta alle query più rapida rispetto a Hive per gli stessi dati su HDFS?

risposta

92

Si dovrebbe vedere Impala come "SQL su HDFS", mentre Hive è più "SQL su Hadoop".

In altre parole, Impala non usa affatto nemmeno Hadoop. Semplicemente ha i daemon in esecuzione su tutti i nodi che memorizzano nella cache alcuni dati presenti in HDFS, in modo che questi daemon possano restituire rapidamente i dati senza dover passare attraverso un intero lavoro Map/Reduce.

La ragione di questo è che c'è un certo overhead coinvolto nella gestione di un Map/Reduce lavoro, in modo cortocircuitando Map/Reduce del tutto è possibile ottenere alcuni abbastanza grande guadagno in fase di esecuzione.

Ciò detto, Impala non sostituisce Hive, è utile per casi di utilizzo molto diversi. Impala non fornisce tolleranza di errore rispetto a Hive, quindi se c'è un problema durante la tua query, allora è sparito. Sicuramente per il tipo di lavoro ETL in cui il fallimento di un lavoro sarebbe costoso, consiglierei Hive, ma Impala può essere eccezionale per piccole query ad-hoc, ad esempio per scienziati di dati o analisti aziendali che vogliono solo dare un'occhiata e analizzare alcuni dati senza costruire lavori solidi. Inoltre, dalla mia esperienza personale, Impala non è ancora molto maturo, e ho visto alcuni crash a volte quando la quantità di dati è più grande della memoria disponibile.

+0

Grazie Charles per questa spiegazione. "Impala non fornisce tolleranza di errore rispetto a Hive", significa che se un nodo va mentre la query viene elaborata, fallisce. Avevi in ​​mente qualche altro scenario (s). – techuser

+3

@Integrator Da un'intervista a maggio 2013, uno dei product manager di Cloudera ha confermato che nella sua attuale implementazione, se un nodo fallisce a metà query, la query si interrompe e l'utente deve riemettere quella query (http: //www.datanami.com/datanami/2013-05-01/cloudera_releases_impala_into_the_wild.html) –

+0

Grazie per la risposta. – techuser

28

IMHO, SQL su HDFS e SQL su Hadoop sono gli stessi. Dopotutto Hadoop è HDFS + MapReduce. Quindi quando diciamo SQL su HDFS, si capisce che è SQL su Hadoop.

Tornando alla domanda vera e propria, Impala fornisce una risposta più rapida in quanto utilizza MPP (elaborazione in modo massivo parallelo) a differenza di Hive che utilizza MapReduce sotto il cofano, che comporta alcuni overhead iniziali (come specificato da Charles sir). L'elaborazione in parallelo massiccio è un tipo di elaborazione che utilizza molte CPU separate in esecuzione in parallelo per eseguire un singolo programma in cui ogni CPU ha la propria memoria dedicata. Il fatto stesso che Impala, essendo basata su MPP, non coinvolga le spese generali di un lavoro di MapReduce vale a dire. L'impostazione e la creazione del lavoro, l'assegnazione dello slot, la creazione di divisioni, la generazione di mappe, ecc., Lo rendono incredibilmente veloce.

Ma ciò non significa che Impala sia la soluzione a tutti i tuoi problemi. Essendo ad alta memoria (MPP), non è adatto per attività che richiedono operazioni di dati pesanti come join ecc., Poiché non è possibile inserire tutto nella memoria. Questo è dove Hive è una misura migliore.

Quindi, se avete bisogno di tempo reale, query ad-hoc su un sottoinsieme dei vostri dati vanno per Impala. E se hai l'elaborazione in batch, hai bisogno dei tuoi Big Data per Hive.

HTH

+11

"SQL su HDFS e SQL su Hadoop sono gli stessi": beh, non proprio, dal momento che (come dici tu) "SQL on hadoop" = "SQL su hdfs usando m/r" cioè "SQL su hdfs" ignora m/r completamente. – davek

+1

Impala, Presto e gli altri nuovi motori di query veloci utilizzano dati in HDFS, ma * non * sono basati su MapReduce. Lo aggirano completamente. – btubbs

+1

Non ho mai detto che impala sia SQL su HDFS usando MR. Nella mia risposta è chiaramente specificato che usa l'MPP. – Tariq

6

ci sono alcune caratteristiche chiave di impala che si fa in fretta.

  1. Non usa mappa/ridurre che sono molto costosi a forcella in JVMs separati.Funziona separatamente Impala Daemon che divide la query e le esegue in parallelo e unisce il set di risultati alla fine.

  2. Fa quasi tutto il suo funzionamento in memoria.

  3. Utilizza hdfs per la sua archiviazione che è veloce per file di grandi dimensioni. È cache il più possibile da query ai risultati ai dati.

  4. Supporta nuovo formato di file come il parquet, che è il file colonnare in formato. Quindi, se si utilizza questo formato, sarà più veloce per le query in cui si accede solo a poche colonne la maggior parte del tempo.

+0

Ma in che modo il formato di file parquet aiuta a interrogare le query RDBMS ... Sto esplorando Impala, quindi solo curiosità. Condividi se hai una documentazione chiara. Grazie al parquet –

+0

è lo stoccaggio colonnare e utilizzando parquet si ottengono tutti i vantaggi che si possono ottenere nel database colonnare. È molto più veloce quando si utilizzano poche colonne di tutte loro nelle tabelle nella maggior parte delle query. –

+0

Ora Hive supporta anche il parquet, quindi il tuo quarto punto non è più una differenza tra Impala e Hive. –

Problemi correlati