O Hadoop Distributed File System (HDFS) é um sistema de arquivos que gerencia grandes conjuntos de dados que podem ser executados em hardware comum. O HDFS é o sistema de armazenamento de dados mais popular para Hadoop e pode ser usado para escalar um único cluster Apache Hadoop para centenas e até milhares de nós. Como gerencia big data de maneira eficiente com alta taxa de transferência, o HDFS pode ser usado como um pipeline de dados e é ideal para compatibilidade com análise de dados complexa.
O HDFS é construído em um framework de código aberto e é um dos principais componentes do Apache Hadoop, sendo os outros o MapReduce e o YARN. O HDFS não deve ser confundido ou substituído pelo Apache HBase, que é um sistema de gerenciamento de bancos de dados não relacional, orientado por colunas, que fica sobre o HDFS e pode proporcionar melhor compatibilidade com necessidades de dados em tempo real com seu mecanismo de processamento in-memory.
Como uma instância de HDFS pode consistir em milhares de servidores, a falha de pelo menos um servidor é sempre uma possibilidade. O HDFS foi projetado para detectar falhas e se recuperar automaticamente de forma rápida. A data replication com várias cópias em muitos nós ajuda a proteger contra a perda de dados. O HDFS mantém pelo menos uma cópia em um rack diferente de todas as outras cópias. Esse armazenamento de dados em um grande cluster distribuído entre os nós aumenta a confiabilidade. Além disso, o HDFS pode tirar instantâneos do armazenamento para salvar informações pontuais (PIT).
O HDFS é mais voltado para o processamento em lotes em vez do uso interativo, por isso o design enfatiza altas taxas de transferência de dados, o que acomoda o acesso em streaming a conjuntos de dados.
O HDFS acomoda aplicações que utilizam conjuntos de dados com tamanho geralmente de gigabytes a terabytes. O HDFS oferece uma alta largura de banda de dados agregada e pode escalar para centenas de nós em um único cluster, ajudando a impulsionar sistemas de computação de alto desempenho (HPC) . Os data lakes são frequentemente armazenados no HDFS. Os data warehouses também utilizavam o HDFS, embora agora com menos frequência, devido à percepção de complexidade de sua operação.
Como os dados são armazenados virtualmente, os custos de armazenamento de metadados do sistema de arquivos e do namespace do sistema de arquivos podem ser reduzidos.
Para facilitar a adoção, o HDFS foi projetado para ser portátil em várias plataformas de hardware e compatível com diversos sistemas operacionais subjacentes, incluindo Linux, macOS e Windows. Além disso, os data lakes do Hadoop podem ser compatíveis com bancos de dados não estruturados, semiestruturados e estruturados, oferecendo máxima flexibilidade. Embora o Hadoop seja codificado em Java, outras linguagens, incluindo C++, Perl, Python e Ruby, permitem seu uso em ciência de dados.
O HDFS utiliza uma arquitetura de clusters para ajudar a oferecer alta taxa de transferência. Para reduzir o tráfego na rede, o sistema de arquivos Hadoop armazena dados nos DataNodes onde as computações ocorrem, em vez de migrar os dados para outro local para processamento.
Com recursos de escalabilidade horizontal e vertical, o HDFS pode ser rapidamente ajustado para atender às necessidades de dados de uma organização. Um cluster pode incluir centenas ou milhares de nós.
O HDFS tem uma arquitetura de diretor/trabalhador.
Tanto o NameNode quanto o DataNode são softwares desenvolvidos para rodar em uma ampla variedade de sistemas operacionais (SO), geralmente o GNU/Linux. A linguagem Java foi utilizada na construção do HDFS, o que significa que qualquer máquina que suporte Java pode também utilizar o software NameNode ou DataNode.
As implementações geralmente terão uma única máquina dedicada que executa o software NameNode. Qualquer outra máquina no cluster executa uma instância única do software DataNode. Se necessário, mas raramente utilizado, é possível configurar mais de um DataNode em uma única máquina.
Quando os dados são inseridos no HDFS, eles são divididos em blocos e distribuídos para diferentes nós em um cluster. Com os dados armazenados em vários DataNodes, os blocos podem ser replicados em outros nós para permitir o processamento paralelo. O sistema de arquivos distribuído (DFS) inclui comandos para acessar, recuperar, migrar e visualizar dados rapidamente. Com réplicas de blocos de dados em vários DataNodes, uma cópia pode ser removida sem risco de corrupção das outras cópias. O tamanho de bloco padrão do HDFS é de 128 MB (Hadoop 2.x), que alguns consideram grande, mas esse tamanho de bloco é feito para minimizar tempos de busca e reduzir a quantidade de metadados necessária.
Para minimizar riscos e acelerar o processamento, quando um DataNode para de sinalizar o NameNode, esse DataNode é removido do cluster, e as operações continuam sem ele. Se esse DataNode voltar a funcionar, ele é alocado a um novo cluster.
O HDFS oferece acesso flexível a arquivos de dados por meio de várias interfaces: uma API Java nativa é fornecida com o HDFS, enquanto um wrapper em linguagem C está disponível para a API Java, além de um navegador HTTP, que pode ser usado para navegar pelos arquivos de uma instância do HDFS.
O HDFS é organizado com uma hierarquia de arquivos tradicional, onde o usuário pode criar diretórios que contêm vários arquivos. A hierarquia do namespace do sistema de arquivos é semelhante a sistemas de arquivos tradicionais, onde o usuário cria e remove arquivos, migra-os entre diretórios e pode renomeá-los.
O namespace do sistema de arquivos é mantido pelo NameNode, que registra quaisquer mudanças no namespace do sistema de arquivos. O número total de réplicas a serem salvas para qualquer aplicação pode ser especificado aqui. Esse número é o fator de replicação para aquele arquivo. O fator de replicação pode ser definido quando o arquivo é criado e modificado posteriormente, conforme necessário.
Para fornecer armazenamento confiável, o HDFS armazena grandes arquivos em vários locais dentro de um grande cluster, com cada arquivo em uma sequência de blocos. Cada bloco é armazenado em um arquivo do mesmo tamanho, exceto o bloco final, que é preenchido conforme os dados são adicionados.
Para proteção adicional, os arquivos HDFS são gravados uma única vez por apenas um escritor de cada vez. Para ajudar a garantir que todos os dados estejam sendo replicados conforme as instruções. O NameNode recebe um heartbeat (um relatório de status periódico) e um blockreport (com o ID do bloco, o selo de geração e o tamanho de cada réplica de bloco) de cada DataNode conectado ao cluster. O recebimento de um heartbeat indica que o DataNode está funcionando corretamente.
O NameNode seleciona o ID do rack para cada DataNode usando um processo chamado Hadoop Rack Awareness, para ajudar a evitar a perda de dados caso um rack inteiro falhe. Isso também permite o uso de largura de banda de vários racks ao ler dados.
Considere um arquivo que contém números de telefone de um país inteiro. Os números de pessoas com sobrenomes que começam com A podem ser armazenados no servidor 1, B no servidor 2 e assim por diante. Com o Hadoop, partes desse diretório telefônico seriam armazenadas em um único cluster, e para reconstruir o diretório completo, uma aplicação precisaria dos blocos de todos os servidores no cluster.
Para garantir alta disponibilidade caso um servidor falhe, o HDFS replica essas partes menores em mais dois servidores por padrão. (Essa redundância pode ser aumentada ou diminuída por arquivo ou para todo o ambiente. Por exemplo, um cluster Hadoop de desenvolvimento normalmente não precisa de redundância de dados.)
Essa redundância também permite que o cluster do Hadoop divida o trabalho em partes menores e execute esses trabalhos em todos os servidores do cluster para melhor escalabilidade. Finalmente, uma organização ganha o benefício da localidade dos dados, o que é crítico ao trabalhar com grandes conjuntos de dados.
O HDFS também pode habilitar a inteligência artificial (IA) e o aprendizado de máquina (ML) ao crescer de forma eficaz. Primeiro, para armazenar dados em quantidades grandes o suficiente para treinar modelos de ML, e depois para acessar esses enormes conjuntos de dados.
Qualquer organização que capture, armazene e use grandes conjuntos de dados (até petabytes) pode considerar o uso do HDFS. Alguns casos de uso baseados no setor mostram como o HDFS pode ser implementado.
A origem do Hadoop, segundo os cofundadores Mike Cafarella e Doug Cutting, foi um artigo sobre o Google File System, publicado em 2003. Um segundo artigo seguiu, "MapReduce: Simplified Data Processing on Large Clusters". O desenvolvimento de um mecanismo de busca inicial chamado Apache Nutch foi iniciado, mas depois o trabalho se transferiu com Doug Cutting para o Yahoo em 2006.
O nome Hadoop foi inspirado em um elefante de brinquedo pertencente ao filho de Cutting. (Daí o logotipo.) O código inicial do Hadoop foi amplamente baseado no Nutch, mas superou suas limitações de escalabilidade e continha as primeiras versões do HDFS e do MapReduce.
O pacote de programas no ecossistema Hadoop continua crescendo. Além do HDFS, há também:HBase (um banco de dados NoSQL), Mahout, Spark MLLib (bibliotecas de algoritmos para aprendizado de máquina), MapReduce (processamento de dados baseado em programação), Oozie (agendador de tarefas), PIG e HIVE (serviços de processamento de dados baseados em consulta), Solar e Lucena (para pesquisa e indexação), Spark (processamento de dados, in-memory), YARN (Yet Another Resource Negotiator) e Zookeeper (coordenação de clusters).
O software de código aberto dentro do ecossistema Hadoop agora é gerido pela Apache Software Foundation1, uma comunidade mundial de desenvolvedores de software e contribuintes de software.
Crie uma estratégia de dados que elimine silos de dados, reduza a complexidade e melhore a qualidade de dados para proporcionar experiências excepcionais para clientes e funcionários.
O watsonx.data permite escalar a análise de dados e a IA com todos os seus dados, onde quer que estejam, por meio de um armazenamento de dados aberto, híbrido e governado.
Libere o valor dos dados empresariais com a IBM Consulting, construindo uma organização baseada em insights que ofereça vantagens para os negócios.