hadoop - cuántos mapeadores y reductores se crearán para una tabla dividida en colmena
hive mapreduce (1)
Siempre estoy confundido sobre cuántos mapeadores y reductores se crearán para una tarea particular en la colmena. por ejemplo, si el tamaño del bloque = 128 mb y hay 365 archivos cada uno se asigna a una fecha en un año (tamaño del archivo = 1 mb cada uno). Hay una partición basada en la columna de fecha. En este caso, ¿cuántos mapeadores y reductores se ejecutarán durante la carga de datos?
Mapeadores:
El número de mapeadores depende de varios factores, como la forma en que se distribuyen los datos entre los nodos, el formato de entrada, el motor de ejecución y los parámetros de configuración. Ver también aquí: https://cwiki.apache.org/confluence/display/TEZ/How+initial+task+parallelism+works
MR usa CombineInputFormat, mientras que Tez usa divisiones agrupadas.
Tez:
set tez.grouping.min-size=16777216; -- 16 MB min split
set tez.grouping.max-size=1073741824; -- 1 GB max split
Mapa reducido:
set mapreduce.input.fileinputformat.split.minsize=16777216; -- 16 MB
set mapreduce.input.fileinputformat.split.minsize=1073741824; -- 1 GB
Además, los mapeadores se ejecutan en los nodos de datos donde se encuentran los datos, por eso controlar manualmente el número de mapeadores no es una tarea fácil, no siempre es posible combinar la entrada.
Reductores: controlar el número de reductores es mucho más fácil. El número de reductores determinado de acuerdo con
mapreduce.job.reduces
: el número predeterminado de tareas de reducción por trabajo.
Por lo general, se establece en un primer cercano al número de hosts disponibles.
Ignorado cuando mapred.job.tracker es "local".
Hadoop establece esto en 1 de manera predeterminada, mientras que Hive usa -1 como su valor predeterminado.
Al establecer esta propiedad en -1, Hive determinará automáticamente cuál debería ser el número de reductores.
hive.exec.reducers.bytes.per.reducer
: el valor predeterminado en Hive 0.14.0 y versiones anteriores es 1 GB.
También
hive.exec.reducers.max
: número máximo de reductores que se utilizarán.
Si
mapreduce.job.reduces
es negativo, Hive lo usará como el número máximo de reductores al determinar automáticamente el número de reductores.
Entonces, si desea aumentar el paralelismo de los reductores, aumente
hive.exec.reducers.max
y disminuya
hive.exec.reducers.bytes.per.reducer