1. Introdução aos Small Files
Um arquivo pequeno quando é significativamente menor do que o tamanho de bloco padrão do HDFS, no nosso caso 128 MB. Deve-se notar que é esperado e inevitável ter alguns arquivos pequenos no HDFS. Esses são arquivos como jars de biblioteca, arquivos de configuração XML, arquivos de teste temporários e assim por diante. Mas quando small files se tornam uma parte significativa dos conjuntos de dados, surgem os problemas.
As camadas de armazenamento e aplicativo do Hadoop não foram projetadas para funcionar de maneira eficiente com um grande número de arquivos pequenos. Antes de chegarmos às implicações disso, vamos revisar como o HDFS armazena arquivos.
No HDFS, dados e metadados são entidades separadas. Os arquivos são divididos em blocos que são armazenados e replicados nos sistemas de arquivos locais dos DataNodes em todo ocluster. A árvore de namespace HDFS e os metadados associados são mantidos como objetos na memória do NameNode (e com backup em disco), cada um ocupando aproximadamente 150 bytes.
2. Metodologia
Para exemplificar e entender um pouco melhor, segue o modelo retirado do site official da cloudera sobre um case de problema de pequenos arquivos.
192 arquivos de 1 MB. Esses arquivos são então replicados em todo o cluster. A memória total exigida pelo Namenode para armazenar os metadados desses arquivos= 150 x (192 + (192 x 3)) = 115200 bytes.
Portanto, podemos ver que precisamos de mais de 100x de memória no heap Namenode para armazenar os vários arquivos pequenos.
3. Experimentos e Resultados com Small Files
Foi identificado pela equipe de sustentação do Santander, uma grande quantidade de small files no cluster do banco, e com isso diversas siglas do banco foram bloqueadas, ficaram proibidas de fazer qualquer tipo de ingestão no datalake,Nós da equipe de governança começamos a tratar os small files com um script que chamamos de legado, ele trata arquivos do tipo parquet. Seguindo alguns requisitos do banco e requisitos técnicos, começamos a auxiliar as siglas no tratamento do problema e o resultado foi muito bom, fizemos algumas melhorias no script para tratar outros tipos de arquivos. Foi muito eficaz por um tempo, porém ao passar de alguns meses tivemos o problema novamente, já que esse script trata apenas o que já está salvo no datalake, e como não tem uma rotina para ficar rodando esse script pra todas as siglas frequentemente. Porque é um job eventual que por ser pesado só é rodado em caso de necessidade. Tendo isso em mente, decidimos criar um componente, uma biblioteca em python onde é encapsulado em classes as funções necessárias para poder tratar os small files no momento da ingestão.
4. Conclusões
O componente está se tornando uma ferramenta de uso obrigatório para todas as siglas do banco para acabar de vez com esse problema do small files. Ele foi bem aceito por todos e a equipe de sustentação do Santander já está se preparando para poder dar o devido suporte aos usuários.
Gostou do artigo? Continue navegando nos conteúdos do Semantix Lab e aprenda muito mais!