2011-12-06 10 views
6

hadoop escribe en un formato SequenceFile en pares 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 múltiples nodos de datos. ¿Se garantiza que cada pareja 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 incompletas, ¿cuál es la solución? marcadores de sincronización?División SequenceFile de forma controlada - Hadoop

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

Respuesta

9

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 lo que preocuparse, y es lo suficientemente simple como para probar y tener confianza. El mecanismo es el mismo que leer un archivo de texto con líneas nuevas: el lector se asegurará de leer los datos del límite para completar un registro si es necesario.

entonces me preguntó:

Así que si tenemos un trabajo mapa analizando sólo el segundo bloque del archivo de registro , no debe transferir cualquier otra parte de la de otros nodos porque esa parte es independiente y significa división completa? ¿Estoy en lo cierto?

ellos respondieron:

Sí. En pocas palabras, sus registros nunca se romperán. No leemos solo en los límites divididos, podemos extendernos más allá de los límites hasta que se encuentre un marcador de sincronización para completar un registro o serie de registros . Los mapeadores posteriores siempre omitirán hasta su primer marcador de sincronización y luego comenzarán a leer para evitar la duplicación. Esto es exactamente cómo funciona la lectura de archivos de texto también - solo aquí, es líneas nuevas.