Mapa Reducir en Hadoop

Uno de los tres componentes de Hadoop es Map Reduce. El primer componente de Hadoop, es decir, el sistema de archivos distribuidos de Hadoop (HDFS), es responsable de almacenar el archivo. El segundo componente que es, Map Reduce es el encargado de procesar el archivo.

Supongamos que hay un archivo de Word que contiene algo de texto. Nombraremos este archivo como sample.txt. Tenga en cuenta que usamos Hadoop para manejar archivos grandes, pero para facilitar la explicación aquí, estamos tomando un archivo de texto como ejemplo. Entonces, supongamos que este sample.txt archivo contiene pocas líneas como texto. El contenido del archivo es el siguiente:

Hello I am GeeksforGeeks
How can I help you
How can I assist you
Are you an engineer
Are you looking for coding
Are you looking for interview questions
what are you doing these days
what are your strengths

Por lo tanto, las 8 líneas anteriores son el contenido del archivo. Supongamos que al almacenar este archivo en Hadoop, HDFS dividió este archivo en cuatro partes y nombró a cada parte como first.txt, second.txt, third.txty fourth.txt. Entonces, puede ver fácilmente que el archivo anterior se dividirá en cuatro partes iguales y cada parte contendrá 2 líneas. Las dos primeras líneas estarán en el archivo first.txt, las dos siguientes en second.txt, las dos siguientes en third.txty las dos últimas líneas se almacenarán en fourth.txt. Todos estos archivos se almacenarán en Nodes de datos y el Node de nombre contendrá los metadatos sobre ellos. Todo esto es tarea de HDFS.

Ahora, suponga que un usuario quiere procesar este archivo. Esto es lo que Map-Reduce entra en escena. Supongamos que este usuario desea ejecutar una consulta en este ejemplo.txt. Entonces, en lugar de traer sample.txtla computadora local, enviaremos esta consulta sobre los datos. Para realizar un seguimiento de nuestra solicitud, utilizamos Job Tracker (un servicio maestro). Job Tracker atrapa nuestra solicitud y realiza un seguimiento de la misma.

Ahora suponga que el usuario quiere ejecutar su consulta sample.txty quiere la salida en result.outputel archivo. Deje que el nombre del archivo que contiene la consulta sea query.jar. Entonces, el usuario escribirá una consulta como:

J$hadoop jar query.jar DriverCode sample.txt result.output
  1. query.jar : archivo de consulta que debe procesarse en el archivo de entrada.
  2. muestra.txt : archivo de entrada.
  3. result.output : directorio en el que se recibirá la salida del procesamiento.

Entonces, ahora Job Tracker atrapa esta solicitud y le pide a Name Node que ejecute esta solicitud en sample.txt. Luego, Name Node proporciona los metadatos al Job Tracker. Job Tracker ahora sabe que sample.txtestá almacenado en first.txt, second.txt, third.txty fourth.txt. Como estos cuatro archivos tienen tres copias almacenadas en HDFS, Job Tracker se comunica con Task Tracker (un servicio esclavo) de cada uno de estos archivos, pero se comunica con solo una copia de cada archivo que reside más cerca de él.

Nota: Aplicar el código deseado en local , y first.txtes second.txtun proceso. Este proceso se llama Map .third.txtfourth.txt

En la terminología de Hadoop, el archivo principal sample.txtse denomina archivo de entrada y sus cuatro subarchivos se denominan divisiones de entrada. Entonces, en Hadoop, la cantidad de mapeadores para un archivo de entrada es igual a la cantidad de divisiones de entrada de este archivo de entrada . En el caso anterior, el archivo de entrada sample.txttiene cuatro divisiones de entrada, por lo que se ejecutarán cuatro mapeadores para procesarlo. La responsabilidad de manejar estos mapeadores es de Job Tracker.

Tenga en cuenta que los rastreadores de tareas son servicios esclavos del rastreador de trabajos. Por lo tanto, en caso de que alguna de las máquinas locales se averíe, el procesamiento de esa parte del archivo se detendrá y detendrá el proceso completo. Por lo tanto, cada rastreador de tareas envía latidos y su número de espacios a Job Tracker cada 3 segundos. Esto se llama el estado de los rastreadores de tareas.. En caso de que cualquier rastreador de tareas se caiga, Job Tracker espera 10 latidos, es decir, 30 segundos, e incluso después de eso, si no obtiene ningún estado, asume que el rastreador de tareas está inactivo o extremadamente ocupado. . Entonces se comunica con el rastreador de tareas de otra copia del mismo archivo y le indica que procese el código deseado sobre él. Del mismo modo, Job Tracker utiliza la información de la ranura para realizar un seguimiento de cuántas tareas está atendiendo actualmente el rastreador de tareas y cuántas tareas más se le pueden asignar. De esta manera, Job Tracker realiza un seguimiento de nuestra solicitud.
Ahora, suponga que el sistema ha generado una salida para first.txt, second.txt, third.txtyfourth.txt. Pero este no es el resultado deseado por el usuario. Para producir la salida deseada, todas estas salidas individuales deben fusionarse o reducirse a una sola salida. Esta reducción de múltiples salidas a una sola también es un proceso realizado por REDUCER . En Hadoop, como hay muchos reductores, se genera esa gran cantidad de archivos de salida. De forma predeterminada, siempre hay un reductor por clúster.

Nota: Map y Reduce son dos procesos diferentes del segundo componente de Hadoop, es decir, Map Reduce. Estas también se denominan fases de Map Reduce . Así podemos decir que Map Reduce tiene dos fases. La Fase 1 es Mapa y la Fase 2 es Reducir.

Funcionamiento de Map Reduce

Ahora, regresemos a nuestro sample.txtarchivo con el mismo contenido. Nuevamente, se divide en cuatro divisiones de entrada, a saber, first.txt, second.txt, third.txty fourth.txt. Ahora, supongamos que queremos contar el número de cada palabra en el archivo. Ese es el contenido del archivo:

Hello I am GeeksforGeeks
How can I help you
How can I assist you
Are you an engineer
Are you looking for coding
Are you looking for interview questions
what are you doing these days
what are your strengths

Luego, la salida del código ‘recuento de palabras’ será como:

Hello - 1
I - 1
am - 1
geeksforgeeks - 1
How - 2 (How is written two times in the entire file) 
Similarly
Are - 3
are - 2
….and so on

Por lo tanto, para obtener este resultado, el usuario deberá enviar su consulta sobre los datos. Supongamos que la consulta ‘recuento de palabras’ está en el archivo wordcount.jar. Entonces, la consulta se verá así:

J$hadoop jar wordcount.jar DriverCode sample.txt result.output
Tipos de formato de archivo en Hadoop

Ahora, como sabemos que hay cuatro divisiones de entrada, se ejecutarán cuatro mapeadores. Uno en cada división de entrada. Pero, Mappers no se ejecutan directamente en las divisiones de entrada. Es porque las divisiones de entrada contienen texto pero los mapeadores no entienden el texto. Los mapeadores solo entienden pares (clave, valor). Por lo tanto, el texto en las divisiones de entrada primero debe convertirse en pares (clave, valor). Esto se logra mediante Record Readers . Por lo tanto, también podemos decir que hay tantos números de divisiones de entrada como muchos lectores de registros.

En la terminología de Hadoop, cada línea de un texto se denomina «registro» . La forma en que el lector de registros convierte este texto en un par (clave, valor) depende del formato del archivo. En Hadoop, hay cuatro formatos de un archivo. Estos formatos son clases predefinidas en Hadoop.

Cuatro tipos de formatos son:

  1. Formato de entrada de texto
  2. Formato de entrada de texto de valor clave
  3. Formato de entrada de archivo de secuencia
  4. SequenceFileAsTextInputFormat

Por defecto, un archivo está en TextInputFormat. El lector de registros lee un registro (línea) a la vez. Mientras lee, no tiene en cuenta el formato del archivo. Pero convierte cada registro en un par (clave, valor) dependiendo de su formato. Por el momento, supongamos que la primera división de entrada first.txtestá en TextInputFormat. Ahora, el lector de registros que trabaja en esta división de entrada convierte el registro en forma de (compensación de bytes, línea completa) . Por ejemplo first.txttiene el contenido:

Hello I am GeeksforGeeks
How can I help you

Entonces, la salida del lector de registros tiene dos pares (ya que hay dos registros en el archivo). El primer par se ve como (0, Hola, soy geeksforgeeks) y el segundo par se ve como (26, ¿Cómo puedo ayudarte?) . Tenga en cuenta que el segundo par tiene el desplazamiento de bytes de 26 porque hay 25 caracteres en la primera línea y el operador de nueva línea (\n) también se considera un carácter. Por lo tanto, después del lector de registros hay tantos números de registros, esos muchos números de pares (clave, valor) están allí. Ahora, el mapeador se ejecutará una vez para cada uno de estos pares. De manera similar, otros mapeadores también se están ejecutando para pares (clave, valor) de diferentes divisiones de entrada. Así, de esta forma, Hadoop divide una tarea grande en tareas más pequeñas y las ejecuta en ejecución paralela.

Barajar y clasificar

Ahora, el mapeador proporciona una salida correspondiente a cada par (clave, valor) proporcionado por el lector de registros. Tomemos la primera división de entrada de first.txt. Los dos pares generados para este archivo por el lector de registros son (0, Hola, soy GeeksforGeeks) y (26, ¿Cómo puedo ayudarlo). Ahora mapper toma uno de estos pares a la vez y produce resultados como (Hola, 1), (I, 1), (soy, 1) y (GeeksforGeeks, 1) para el primer par y (How, 1), (can , 1), (yo, 1), (ayuda, 1) y (tú, 1) para el segundo par. Del mismo modo, tenemos salidas de todos los mapeadores. Tenga en cuenta que estos datos contienen claves duplicadas como (I, 1) y más (cómo, 1), etc. Estas claves duplicadas también deben cuidarse. Estos datos también se denominan datos intermedios.. Antes de pasar estos datos intermedios al reductor, primero pasan por dos etapas más, llamadas Barajar y Ordenar .

  1. Fase de barajado: esta fase combina todos los valores asociados a una clave idéntica. Por ejemplo, (Are, 1) aparece tres veces en el archivo de entrada. Entonces, después de la fase de barajado, la salida será como (Are, [1,1,1]).
  2. Fase de clasificación: una vez que se realiza el barajado, la salida se envía a la fase de clasificación donde todos los pares (clave, valor) se clasifican automáticamente. En Hadoop, la clasificación es un proceso automático debido a la presencia de una interfaz incorporada llamada WritableComparableInterface .

Después de completar la fase de barajado y clasificación, la salida resultante se envía al reductor. Ahora, si hay n pares (clave, valor) después de la fase de barajado y clasificación, entonces el reductor se ejecuta n veces y, por lo tanto, produce el resultado final en el que se encuentra la salida final procesada. En el caso anterior, la salida resultante después del procesamiento del reductor se almacenará en el directorio result.output como se especifica en el código de consulta escrito para procesar la consulta sobre los datos.

Publicación traducida automáticamente

Artículo escrito por vivek5252 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *