[hadoop] Hive no puede establecer manualmente el número de reductores



1 Answers

El número de reductores depende también del tamaño del archivo de entrada

Por defecto es 1GB (1000000000 bytes). Puede cambiar eso estableciendo la propiedad hive.exec.reducers.bytes.per.reducer:

  1. ya sea cambiando hive-site.xml

    <property>
       <name>hive.exec.reducers.bytes.per.reducer</name>
       <value>1000000</value>
    </property>
    
  2. o usando el conjunto

    $ hive -e "set hive.exec.reducers.bytes.per.reducer=1000000"

Question

Tengo la siguiente consulta de colmena:

select count(distinct id) as total from mytable;

que genera automáticamente:
1408 Mapeadores
1 Reductor

Necesito configurar manualmente el número de reductores y he intentado lo siguiente:

set mapred.reduce.tasks=50 
set hive.exec.reducers.max=50

pero ninguno de estos ajustes parece ser respetado. La consulta tarda una eternidad en ejecutarse. ¿Hay alguna manera de configurar manualmente los reductores o quizás reescribir la consulta para que pueda generar más reductores? ¡Gracias!




Mapper depende totalmente del número de archivos, es decir, del tamaño del archivo, podemos llamarlo como divisiones de entrada. Dividir está notando, pero la división lógica de datos. Ejemplo: mi tamaño de archivo es de 150 MB y mi bloque predeterminado de HDFS es de 128 MB. Creará dos divisiones significa dos bloques. Dos Mapper serán asignados para este trabajo.

Imp Nota: Supongamos que he especificado que el tamaño de división es de 50 MB, entonces comenzará 3 Mapper, porque depende totalmente del número de división.

Imp Nota: si espera 10TB de datos de entrada y tiene un tamaño de bloques de 128MB , terminará con 82,000 mapas , a menos que Configuration.set (MRJobConfig.NUM_MAPS, int) (que solo proporciona una pista al marco) se use para establecerlo aún más alto.

Nota: si no hemos especificado el tamaño de división, tomará el tamaño de bloque hdfs predeterminado como tamaño dividido.

Reducer tiene 3 fases principales: mezclar, clasificar y reducir .

Comando:

1] Establecer tarea de mapa: -D mapred.map.tasks = 4
2] Establecer tarea de reducción: -D mapred.reduce.tasks = 2




Related