Blocos de dados do Hadoop Distributed File System (HDFS)
Quando você armazenar um arquivo no HDFS, o sistema divide-os em um conjunto de blocos individuais e armazena esses blocos em vários nós escravos no cluster Hadoop. Isso é uma coisa perfeitamente normal para fazer, como todos os sistemas de arquivos quebrar arquivos em blocos antes de armazená-los no disco.
HDFS não tem idéia (e não se importa) que está armazenado dentro do arquivo, assim que os arquivos RAW não são divididos de acordo com regras que nós, humanos, iria entender. Os seres humanos, por exemplo, gostaria divisas de registros - as linhas que mostram onde um registro começa e termina - a ser respeitado.
HDFS é muitas vezes felizmente sem saber que o registro final em um bloco pode ser apenas um registro parcial, com o resto do seu conteúdo desviados para o seguinte bloco. HDFS só quer ter certeza de que os arquivos são divididos em blocos de tamanho uniforme que correspondem ao tamanho do bloco pré-definido para a instância Hadoop (a menos que um valor personalizado foi inserido para o arquivo que está sendo armazenada). Na figura anterior, que o tamanho do bloco é de 128 MB.
Nem todos os arquivos que você precisa para armazenar é um múltiplo exato do tamanho do bloco do seu sistema, de modo que o bloco de dados final para um arquivo usa apenas tanto espaço quanto for 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 trabalham. Mas o que é diferente sobre o HDFS é a escala. Um tamanho de bloco típico que você veria em um sistema de arquivos no Linux é 4KB, enquanto um tamanho de bloco típico no Hadoop é 128MB. Este valor é configurável, e pode ser personalizado, tanto como um novo padrão do sistema e um valor personalizado para arquivos individuais.
Hadoop foi projetado para armazenar dados em escala petabyte, onde quaisquer limitações potenciais para dimensionamento são minimizados. O tamanho alta bloco é uma consequência directa desta necessidade de armazenar dados em uma escala maciça.
Primeiro de tudo, cada bloco de dados armazenados no HDFS tem a sua própria metadados e precisa ser monitorado por um servidor central para que os aplicativos que precisam acessar um arquivo específico pode ser direcionado para onde todos os blocos do arquivo estão armazenados. Se o tamanho do bloco estavam na faixa kilobyte, mesmo volumes modestos de dados na escala de terabyte iria sobrecarregar o servidor de metadados com muitos blocos para acompanhar.
Em segundo lugar, HDFS é concebido para permitir produção elevada de modo a que o processamento paralelo destas grandes conjuntos de dados acontece tão rapidamente quanto possível. A chave para a escalabilidade do Hadoop no lado de processamento de dados é, e sempre será, paralelismo - a capacidade para processar os blocos individuais destes ficheiros de grandes dimensões em paralelo.
Para ativar o processamento eficiente, um equilíbrio deve ser atingido. Por um lado, o tamanho do bloco precisa ser grande o suficiente para justificar os recursos dedicados a uma unidade individual de processamento de dados (por exemplo, um mapa ou reduzir tarefa). Por outro lado, o tamanho do bloco pode não ser tão grande que o sistema está à espera de um tempo muito longo para uma última unidade de processamento de dados para terminar os trabalhos.
Estas duas considerações dependem, obviamente, os tipos de trabalho que está sendo feito sobre os blocos de dados.