Hadoop escribe en un SequenceFile en formato de par clave-valor (registro). Considere que tenemos un gran archivo de registro ilimitado. Hadoop dividirá el archivo según el tamaño del bloque y lo guardará en varios nodos de datos. ¿Está garantizado que cada par clave-valor residirá en un solo bloque? ¿O podemos tener un caso para que la clave esté en un bloque en el nodo 1 y el valor (o partes de él) en el segundo bloque en el nodo 2? Si podemos tener divisiones completas sin sentido, ¿cuál es la solución? marcadores de sincronización?

Otra pregunta es: ¿Hadoop escribe automáticamente marcadores de sincronización o deberíamos escribirlo manualmente?

7
Majid Azimi 6 dic. 2011 a las 23:32

1 respuesta

La mejor respuesta

Hice esta pregunta en la lista de correo de hadoop. Ellos respondieron:

Los marcadores de sincronización ya están escritos en archivos de secuencia, son parte del formato. Esto no es nada de qué preocuparse, y es lo suficientemente simple para probar y tener confianza. El mecanismo es el mismo que leer un archivo de texto con nuevas líneas: el lector se asegurará de leer los datos de los límites para completar un registro si es necesario.

Luego le pregunté:

Entonces, si tenemos un trabajo de mapa que analiza solo el segundo bloque del archivo de registro, ¿no debería transferir ninguna otra parte de eso desde otros nodos porque esa parte es independiente y significa división completa? Estoy en lo cierto?

Ellas respondieron:

Si. En pocas palabras, sus récords nunca se romperán. No leemos solo en los límites divididos, podemos extendernos más allá de los límites hasta que se encuentra un marcador de sincronización para completar un registro o una serie de registros. Los mapeadores posteriores siempre saltan hasta su primer marcador de sincronización y luego comienzan a leer, para evitar la duplicación. Así es exactamente como funciona la lectura de archivos de texto, solo que aquí, son nuevas líneas.

10
Majid Azimi 7 dic. 2011 a las 01:11