Los bloques de datos en el sistema de archivos distribuidos Hadoop (HDFS)
Al almacenar un archivo en HDFS, el sistema se descompone en un conjunto de bloques individuales y almacena estos bloques en varios nodos esclavos del clúster Hadoop. Esto es una cosa totalmente normal a hacer, ya que todos los sistemas de archivos dividen los archivos en bloques antes de almacenarlos en el disco.
HDFS tiene ni idea (y no le importa) lo que está almacenada en el archivo, por lo que los archivos RAW no se dividen de acuerdo con las normas que los seres humanos podrían entender. Los seres humanos, por ejemplo, querrían límites récord - las líneas que muestran donde un registro comienza y termina - sean respetados.
HDFS es a menudo felizmente ignorante de que el registro final en un bloque puede ser sólo un registro parcial, con el resto de su contenido fuera desviada al siguiente bloque. HDFS sólo quiere asegurarse de que los archivos se dividen en bloques de igual tamaño que coinciden con el tamaño de bloque predefinido para la instancia Hadoop (a menos que un valor personalizado se inscribió para el archivo que se almacena). En la figura anterior, que el tamaño del bloque es de 128 MB.
No todos los archivos que necesita para guardar es un múltiplo exacto del tamaño de bloque de su sistema, por lo que el bloque de datos final para un archivo sólo utiliza todo el espacio que se necesita. En el caso de la figura anterior, el bloque final de los datos es de 1 MB.
El concepto de almacenamiento de un archivo como una colección de bloques es totalmente coherente con la forma en sistemas de archivos trabajan normalmente. Pero, ¿qué hay de diferente en HDFS es la escala. Un tamaño de bloque típico que te gustaría ver en un sistema de archivos en Linux es de 4 KB, mientras que un tamaño de bloque típico de Hadoop es de 128 MB. Este valor es configurable, y se puede personalizar, ya que tanto un nuevo defecto del sistema y un valor personalizado para archivos individuales.
Hadoop fue diseñado para almacenar datos en la escala de petabytes, donde se minimizan las posibles limitaciones a escalar. El tamaño bloqueo alto es una consecuencia directa de esta necesidad de almacenar datos en una escala masiva.
En primer lugar, cada bloque de datos almacenado en HDFS tiene su propio metadatos y necesita ser rastreado por un servidor central para que las aplicaciones que necesitan acceder a un archivo específico pueden ser dirigidas a cualquier lugar donde se almacenan todos los bloques del archivo. Si el tamaño del bloque estaban en el rango de kilobytes, incluso modestos volúmenes de datos en la escala terabyte se abruman el servidor de metadatos con demasiados bloques para realizar un seguimiento.
En segundo lugar, HDFS está diseñado para permitir un alto rendimiento de modo que el procesamiento en paralelo de estos grandes conjuntos de datos ocurre tan rápidamente como sea posible. La clave para la escalabilidad de Hadoop en el lado de proceso de datos es, y siempre será, paralelismo - la capacidad de procesar los bloques individuales de estos archivos de gran tamaño en paralelo.
Para habilitar el procesamiento eficiente, un equilibrio debe ser golpeado. Por un lado, el tamaño de bloque debe ser lo suficientemente grande como para justificar los recursos dedicados a una unidad individual de procesamiento de datos (por ejemplo, un mapa o reducir la tarea). Por otro lado, el tamaño de bloque no puede ser tan grande que el sistema está esperando un tiempo muy largo para una última unidad de procesamiento de datos para terminar su trabajo.
Estas dos consideraciones obviamente dependen de los tipos de trabajo que se realizan en los bloques de datos.