2011-09-19 12 views

Respuesta

6

En general, cualquier tipo de agregación, como min/max/count va a requerir un trabajo de MapReduce. Esto no va a explicar todo para ti, probablemente.

Hive, en el estilo de muchos RDBMS, tiene una palabra clave EXPLAIN que describirá cómo se traduce su consulta Hive en trabajos de MapReduce. Intente ejecutar Explain en sus consultas de ejemplo y vea lo que intenta hacer detrás de escena.

1

seleccionar * from tablename;

Simplemente lee datos brutos de archivos en HDFS, por lo que es mucho más rápido sin MapReduce.

+1

pero para un archivo grande tiene que leer todos los nodos en paralelo. Hive hace eso sin MR? – ernesto

-1

Es una técnica de optimización, la tarea de la propiedad hive.fetch.task.conversion (FETCH) puede minimizar la latencia de la sobrecarga de mapreduce.

Al hacer SELECT, LIMIT, FETCH consultas esta propiedad omite mapreduce y utiliza la tarea FETCH.

Esta propiedad puede tener 3 valores: none, minimal (valor predeterminado) y more.

1

Cada vez que encendamos una consulta como seleccionar * de nombredetabla, Colmena lee el archivo de datos y obtiene los datos enteros sin hacer ningún tipo de agregación (min/max/cuenta, etc.). Llamará a FetchTask en lugar de a mapreduce tarea.

Esta es también una técnica de optimización en Hive. hive.fetch.task.conversion propiedad puede (es decir, tarea FETCH) minimizar la latencia de la sobrecarga de map-reduce.

Esto es como estamos leyendo un archivo hadoop: hadoop fs -gato nombre

Pero si usamos seleccione COLNAMES de nombredetabla, se requiere de un mapa a reducir el trabajo ya que necesita para extraer la 'columna' de cada fila analizándola desde el archivo que carga.

Cuestiones relacionadas