java hadoop hive hbase hadoop2

java - Aumentar el número de mapeadores Hive en Hadoop 2



hbase hadoop2 (3)

Creé una tabla HBase de Hive y estoy intentando hacer una agregación simple en ella. Esta es mi consulta Hive:

from my_hbase_table select col1, count(1) group by col1;

El mapa reduce el trabajo genera solo 2 mapeadores y me gustaría aumentar eso. Con un trabajo simple de reducción de mapas, configuraría el hilo y la memoria del mapeador para aumentar el número de mapeadores. Intenté lo siguiente en Hive pero no funcionó:

set yarn.nodemanager.resource.cpu-vcores=16; set yarn.nodemanager.resource.memory-mb=32768; set mapreduce.map.cpu.vcores=1; set mapreduce.map.memory.mb=2048;

NOTA:

  • Mi clúster de prueba tiene solo 2 nodos
  • La tabla HBase tiene más de 5 millones de registros
  • Los registros de Hive muestran HiveInputFormat y varias divisiones = 2

Reduzca el tamaño de la división de entrada desde el valor predeterminado. Los mapeadores se incrementarán.

SET mapreduce.input.fileinputformat.split.maxsize;


La división de la tabla HBase debería hacer que tu trabajo use más mapeadores automáticamente.

Como tiene 2 divisiones, un correlacionador lee cada división. Aumentar no de splits.


Dividir el archivo menos que el valor predeterminado no es una solución eficiente. Spiting se usa básicamente durante el tratamiento de grandes conjuntos de datos. El valor predeterminado es en sí mismo un tamaño pequeño, por lo que no vale la pena dividirlo de nuevo.

Yo recomendaría seguir la configuración antes de su consulta. Puede aplicarla en función de sus datos de entrada.

set hive.merge.mapfiles=false; set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; set mapred.map.tasks = XX;

Si desea asignar el número de reductor también, puede utilizar la configuración siguiente

set mapred.reduce.tasks = XX;

Tenga en cuenta que en Hadoop 2 (YARN), mapred.map.tasks y mapred.reduce.tasks están en desuso y se reemplazan por otras variables:

mapred.map.tasks --> mapreduce.job.maps mapred.reduce.tasks --> mapreduce.job.reduces

Por favor, consulte a continuación el enlace útil relacionado con este

http://answers.mapr.com/questions/5336/limit-mappers-and-reducers-for-specific-job.html

¿No puede aumentar las tareas de Hive Mapper?

Cómo se asignan los mapeadores

El número de correlacionadores se determina por el número de divisiones determinado por el formato de entrada utilizado en el trabajo de MapReduce. En un InputFormat típico, es directamente proporcional a la cantidad de archivos y tamaños de archivos.

supongamos que su configuración de bloques HDFS está configurada para 64MB (tamaño predeterminado) y usted tiene archivos con un tamaño de 100MB, ocupará 2 bloques y luego 2 asignador se asignarán en función de los bloques.

pero supongamos que si tiene 2 archivos con un tamaño de 30 MB (cada archivo), cada archivo ocupará un bloque y el asignador se asignará en función de eso.

Cuando trabaja con una gran cantidad de archivos pequeños, Hive usa CombineHiveInputFormat de forma predeterminada. En términos de MapReduce, finalmente se traduce en el uso de CombineFileInputFormat que crea divisiones virtuales sobre varios archivos, agrupados por nodo común, rack cuando sea posible. El tamaño de la división combinada está determinado por

mapred.max.split.size or mapreduce.input.fileinputformat.split.maxsize ( in yarn/MR2);

Entonces, si quiere tener menos divisiones (menos asignador), necesita establecer este parámetro más alto.

Este enlace puede ser útil para entender más sobre él.

¿Cuál es el tamaño predeterminado que leerá cada asignador Hadoop?

También el número de correlacionadores y reductores depende siempre del mapeador disponible y las ranuras reductoras de su clúster.