¿Cómo hacer que Hive ejecute los trabajos de MapReduce simultáneamente?
Pregunta
Soy nuevo en Hive y he encontrado un problema,
Tengo una mesa en colmena como esta:
create table td(id int, time string, ip string, v1 bigint, v2 int, v3 int,
v4 int, v5 bigint, v6 int) PARTITIONED BY(dt STRING)
ROW FORMAT DELIMITED FIELDS
TERMINATED BY ',' lines TERMINATED BY '\n' ;
Y ejecuto un SQL como:
from td
INSERT OVERWRITE DIRECTORY '/tmp/total.out' select count(v1)
INSERT OVERWRITE DIRECTORY '/tmp/totaldistinct.out' select count(distinct v1)
INSERT OVERWRITE DIRECTORY '/tmp/distinctuin.out' select distinct v1
INSERT OVERWRITE DIRECTORY '/tmp/v4.out' select v4 , count(v1), count(distinct v1) group by v4
INSERT OVERWRITE DIRECTORY '/tmp/v3v4.out' select v3, v4 , count(v1), count(distinct v1) group by v3, v4
INSERT OVERWRITE DIRECTORY '/tmp/v426.out' select count(v1), count(distinct v1) where v4=2 or v4=6
INSERT OVERWRITE DIRECTORY '/tmp/v3v426.out' select v3, count(v1), count(distinct v1) where v4=2 or v4=6 group by v3
INSERT OVERWRITE DIRECTORY '/tmp/v415.out' select count(v1), count(distinct v1) where v4=1 or v4=5
INSERT OVERWRITE DIRECTORY '/tmp/v3v415.out' select v3, count(v1), count(distinct v1) where v4=1 or v4=5 group by v3
Funciona, y el resultado de la salida es lo que quiero.
Pero hay un problema, Hive genera 9 trabajos de MapReduce y ejecuta estos trabajos uno por uno.
Ejecuto explicar en esta consulta y recibí el siguiente mensaje:
STAGE DEPENDENCIES:
Stage-9 is a root stage
Stage-0 depends on stages: Stage-9
Stage-10 depends on stages: Stage-9
Stage-1 depends on stages: Stage-10
Stage-11 depends on stages: Stage-9
Stage-2 depends on stages: Stage-11
Stage-12 depends on stages: Stage-9
Stage-3 depends on stages: Stage-12
Stage-13 depends on stages: Stage-9
Stage-4 depends on stages: Stage-13
Stage-14 depends on stages: Stage-9
Stage-5 depends on stages: Stage-14
Stage-15 depends on stages: Stage-9
Stage-6 depends on stages: Stage-15
Stage-16 depends on stages: Stage-9
Stage-7 depends on stages: Stage-16
Stage-17 depends on stages: Stage-9
Stage-8 depends on stages: Stage-17
Parece que la etapa 9-17 corresponde al trabajo de MapReduce 0-8
Pero del mensaje de explicación anterior, la etapa 10-17 solo depende de la etapa 9,
Entonces tengo una pregunta, ¿por qué Job 1-8 no puede ejecutarse simultáneamente?
¿O cómo puedo hacer que el trabajo 1-8 se ejecute simultáneamente?
¡Muchas gracias por su ayuda!
Solución
En Hive-Default.xml, hay una propiedad llamada "Hive.exec.Parallel" que podría habilitar el trabajo de ejecución en paralelo. El valor predeterminado es "falso". Puede cambiarlo a "verdadero" para adquirir esta habilidad. Puede usar otra propiedad "Hive.exec.parallel.thread.number" para controlar cuántos trabajos como máximo se pueden ejecutar en paralelo.
Para más detalles: https://issues.apache.org/jira/browse/hive-549