2011-09-19 18 views

risposta

6

In generale, qualsiasi tipo di aggregazione, come min/max/count richiederà un lavoro MapReduce. Questo non ti spiegherà tutto, probabilmente.

Hive, nello stile di molti RDBMS, ha una parola chiave EXPLAIN che descriverà come la query Hive viene tradotta in lavori MapReduce. Prova a eseguire spiegare su entrambe le query di esempio e vedere cosa sta cercando di fare dietro le quinte.

1

selezionare * da tablename;

Legge solo i dati grezzi dai file in HDFS, quindi è molto più veloce senza MapReduce.

+1

ma per un file di grandi dimensioni deve essere letto da tutti i nodi in parallelo. Hive lo fa senza MR? – ernesto

-1

È una tecnica di ottimizzazione, l'attività(FETCH) può ridurre al minimo la latenza del sovraccarico di mapreduce.

Quando si esegue SELECT, LIMIT, FETCH esegue una query su questa proprietà ignora mapreduce e utilizza l'attività FETCH.

Questa proprietà può avere 3 valori - none, minimal (impostazione predefinita) e more.

1

Ogni volta che spariamo una query come select * from tablename, Hive legge il file di dati e recupera tutti i dati senza fare alcuna aggregazione (min/max/count, ecc). Chiamerà uno FetchTask anziché un mapreduce attività.

Questa è anche una tecnica di ottimizzazione in Hive. hive.fetch.task.conversion proprietà possibile (ad esempio, attività FETCH) ridurre al minimo la latenza di sovraccarico della mappa.

Questo è come stiamo leggendo un file Hadoop: Hadoop fs -cat nome

Ma se usiamo selezionare colNames da tablename, richiede una mappa-reduce lavoro come ha bisogno di estrarre la "colonna" di ogni riga analizzandola dal file che carica.

Problemi correlati