Vídeo: HDFS - Intro to Hadoop and MapReduce 2024
Quando você armazena um arquivo no HDFS, o sistema o destrói em um conjunto de blocos individuais e armazena esses blocos em vários nós escravos no cluster Hadoop. Esta é uma coisa completamente normal, já que todos os sistemas de arquivos quebram arquivos em blocos antes de armazená-los no disco.
O HDFS não tem ideia (e não se importa) do que está armazenado no arquivo, de modo que os arquivos em bruto não são divididos de acordo com as regras que os humanos entenderiam. Os seres humanos, por exemplo, queriam limites de registro - as linhas que mostram onde um registro começa e termina - para ser respeitado.
O HDFS é muitas vezes felizmente inconsciente de que o registro final em um bloco pode ser apenas um registro parcial, com o resto do seu conteúdo desviado para o seguinte bloco. O HDFS só quer garantir que os arquivos sejam divididos em blocos de tamanho uniforme que correspondam ao tamanho de bloco predefinido para a instância do Hadoop (a menos que um valor personalizado tenha sido inserido para o arquivo que está sendo armazenado). Na figura anterior, esse tamanho de bloco é de 128 MB.
Nem todos os arquivos que você precisa armazenar são um múltiplo exato do tamanho do bloco do seu sistema, de modo que o bloco de dados final para um arquivo usa apenas o espaço necessário. No caso da figura anterior, o bloco final de dados é de 1 MB.
O conceito de armazenar um arquivo como uma coleção de blocos é inteiramente consistente com a forma como os sistemas de arquivos normalmente funcionam. Mas o que é diferente sobre HDFS é a escala. Um tamanho de bloco típico que você veria em um sistema de arquivos no Linux é 4KB, enquanto que um tamanho de bloco típico no Hadoop é 128MB. Esse valor é configurável e pode ser personalizado, como um novo padrão do sistema e um valor personalizado para arquivos individuais.
O Hadoop foi projetado para armazenar dados na escala petabyte, onde as possíveis limitações à redução de escala são minimizadas. O alto tamanho do bloco é uma conseqüência direta dessa necessidade de armazenar dados em grande escala.
Em primeiro lugar, todo bloco de dados armazenado em HDFS possui seus próprios metadados e precisa ser rastreado por um servidor central para que os aplicativos que precisam acessar um arquivo específico possam ser direcionados para onde todos os blocos do arquivo estão armazenados. Se o tamanho do bloco estivesse no intervalo de kilobytes, mesmo os volumes de dados modestos na escala do terabyte iriam sobrecarregar o servidor de metadados com muitos blocos para rastrear.
Em segundo lugar, o HDFS foi projetado para permitir um alto débito para que o processamento paralelo desses grandes conjuntos de dados ocorra o mais rápido possível. A chave para a escalabilidade do Hadoop no lado do processamento de dados é, e sempre será paralelismo - a capacidade de processar os blocos individuais desses grandes arquivos em paralelo.
Para permitir o processamento eficiente, um balanço precisa ser atingido. Por um lado, o tamanho do bloco precisa ser grande o suficiente para garantir os recursos dedicados a uma unidade individual de processamento de dados (por exemplo, um mapa ou uma tarefa de redução). Por outro lado, o tamanho do bloco não pode ser tão grande que o sistema aguarda muito tempo para uma última unidade de processamento de dados terminar seu trabalho.
Essas duas considerações, obviamente, dependem dos tipos de trabalho que está sendo feito nos blocos de dados.