para org library distribuidos descargar datos common hadoop mapreduce

org - install hadoop



Entrada de Hadoop tamaño de división vs tamaño de bloque (7)

Bloque es la representación física de los datos. La división es la representación lógica de los datos presentes en el bloque.

Bloque y tamaño dividido se pueden cambiar en las propiedades.

El mapa lee los datos desde el Bloque hasta las divisiones, es decir, el acto dividido como un intermediario entre el Bloqueo y el Asignador.

Considere dos bloques:

Bloque 1

aa bb cc dd ee ff gg hh ii jj

Bloque 2

ww ee yy uu oo ii oo pp kk ll nn

Ahora el mapa lee el bloque 1 hasta aa a JJ y no sabe cómo leer el bloque 2, es decir, el bloque no sabe cómo procesar un bloque de información diferente. Aquí viene una división que formará una agrupación lógica del bloque 1 y el bloque 2 como un solo bloque, luego formará el desplazamiento (clave) y la línea (valor) utilizando el formato de entrada y el lector de registros y enviará el mapa para procesar el procesamiento posterior.

Si su recurso es limitado y desea limitar la cantidad de mapas, puede aumentar el tamaño de la división. Por ejemplo: si tenemos 640 MB de 10 bloques, es decir, cada bloque de 64 MB y el recurso es limitado, puede mencionar el tamaño dividido en 128 MB, luego se formará una agrupación lógica de 128 MB y solo se ejecutarán 5 mapas con un tamaño de 128 MB.

Si especificamos que el tamaño de la división es falso, el archivo completo formará una división de entrada y se procesará en un mapa, lo que demorará más en procesarse cuando el archivo sea grande.

Estoy revisando la guía definitiva de hadoop, donde se explica claramente acerca de las divisiones de entrada. Va como

Las divisiones de entrada no contienen datos reales, sino que tienen las ubicaciones de almacenamiento para datos en HDFS

y

Por lo general, el tamaño de la división de entrada es el mismo que el tamaño de bloque

1) digamos que un bloque de 64 MB está en el nodo A y se replica en otros 2 nodos (B, C), y el tamaño de la división de entrada para el programa de reducción de mapas es de 64 MB. ¿Esta división solo tendrá una ubicación para el nodo A? ¿O tendrá ubicaciones para los tres nodos A, b, C?

2) ¿ Dado que los datos son locales para los tres nodos, cómo el marco decide (selecciona) una tarea de mapa para ejecutarse en un nodo en particular?

3) ¿Cómo se maneja si el tamaño de la división de entrada es mayor o menor que el tamaño de bloque?


El tamaño del bloque HDFS es un número exacto, pero el tamaño de la división de entrada se basa en nuestra lógica de datos, que puede ser un poco diferente con el número configurado


La fortaleza del marco de Hadoop es su localidad de datos. Por lo tanto, cada vez que un cliente solicita los datos de hdfs, el marco siempre verifica la localidad, de lo contrario, busca poca utilización de E / S.


Las divisiones de entrada son una división lógica de sus registros, mientras que los bloques HDFS son una división física de los datos de entrada. Es extremadamente eficiente cuando son iguales, pero en la práctica nunca está perfectamente alineado. Los registros pueden cruzar los límites de los bloques. Hadoop garantiza el procesamiento de todos los registros. Una máquina que procesa una división en particular puede obtener un fragmento de un registro de un bloque que no sea su bloque "principal" y que pueda residir de forma remota. El costo de comunicación para obtener un fragmento de registro es intrascendente porque ocurre relativamente raramente.


Las divisiones de entrada son unidades de datos lógicos que se alimentan a cada asignador. Los datos se dividen en registros válidos. Las divisiones de entrada contienen direcciones de bloques y bytes de compensación.

Digamos, usted tiene un archivo de texto que se extiende en 4 bloques.

Expediente:

a B C D
e F G H
ijkl
m N O P

Bloques

block1: abcde
bloque2: fghij
bloque 3: klmno
bloque 4: p

Splits:

Split1: abcdefh
Split2: ijklmnop

Observe que las divisiones están en línea con los límites (registros) del archivo. Ahora, cada división se alimenta a un asignador.

Si el tamaño dividido de la entrada es menor que el tamaño del bloque, terminará usando más no.of mappers viceversa.

Espero que ayude.


Para 1) y 2): no estoy seguro al 100%, pero si la tarea no se puede completar, por el motivo que sea, incluido si hay algún error en la división de entrada, se termina y se inicia otra en su lugar: cada uno maptask obtiene exactamente una división con la información del archivo (puede saber rápidamente si este es el caso mediante la depuración en un clúster local para ver qué información se guarda en el objeto de división de entrada: me parece recordar que solo es la ubicación).

a 3): si el formato del archivo se puede dividir, Hadoop intentará cortar el archivo a trozos de tamaño "inputSplit"; si no, entonces es una tarea por archivo, independientemente del tamaño del archivo. Si cambia el valor de la división de entrada mínima, puede evitar que se generen demasiadas tareas de asignación si cada uno de sus archivos de entrada se divide en el tamaño de bloque, pero solo puede combinar entradas si hace magia con La clase combinadora (creo que así se llama).


  • La respuesta de @ user1668782 es una gran explicación para la pregunta e intentaré dar una descripción gráfica de la misma.

  • Supongamos que tenemos un archivo de 400 MB con 4 registros ( por ejemplo, un archivo csv de 400 MB y tiene 4 filas, 100 MB cada una)

  • Si el Tamaño de bloque HDFS está configurado como 128 MB , los 4 registros no se distribuirán entre los bloques de manera uniforme. Se verá así.

  • El bloque 1 contiene el primer registro completo y una porción de 28MB del segundo registro.
  • Si se debe ejecutar un mapeador en el Bloque 1 , el mapeador no puede procesar ya que no tendrá el segundo registro completo.
  • Este es el problema exacto que resuelve la división de entrada . La entrada se divide respetando los límites de los registros lógicos.

  • Supongamos que el tamaño de la división de entrada es de 200 MB

  • Por lo tanto, la división de entrada 1 debe tener tanto el registro 1 como el registro 2. Y la división de entrada 2 no comenzará con el registro 2, ya que el registro 2 se ha asignado a la división de entrada 1. La división de entrada 2 comenzará con el registro 3.

  • Por esta razón, una división de entrada es solo una parte lógica de los datos. Apunta a ubicaciones de inicio y final con bloques.

Espero que esto ayude.