HDFS

Open Source Tradicional Sistemas de Arquivos

Sistema de arquivos distribuído do Apache Hadoop projetado para armazenar grandes volumes de dados em clusters de commodity hardware.

O que é HDFS?

O HDFS (Hadoop Distributed File System) é o sistema de arquivos distribuído do Apache Hadoop, projetado para armazenar grandes volumes de dados de forma confiável em clusters de commodity hardware. É otimizado para throughput alto e funciona melhor com arquivos grandes, sendo tolerante a falhas de hardware.

História

O HDFS foi inspirado no Google File System (GFS) e foi desenvolvido como parte do projeto Apache Hadoop em 2006. Foi criado por Doug Cutting e Mike Cafarella para suportar o processamento distribuído de grandes datasets. Desde então, tornou-se o padrão de facto para armazenamento distribuído no ecossistema Hadoop.

Arquitetura

O HDFS segue uma arquitetura master/slave com um NameNode (master) que gerencia os metadados do sistema de arquivos e múltiplos DataNodes (slaves) que armazenam os dados reais. Os arquivos são divididos em blocos (padrão 128MB) e replicados em múltiplos DataNodes para garantir tolerância a falhas.

Vantagens

  • Tolerância a falhas através de replicação automática
  • Escalabilidade horizontal - adicione mais nós conforme necessário
  • Alto throughput para leitura sequencial de grandes arquivos
  • Funciona bem com commodity hardware
  • Integração nativa com o ecossistema Hadoop
  • Suporte a arquivos muito grandes (petabytes)

Desvantagens

  • Não otimizado para arquivos pequenos
  • Latência alta para acesso aleatório
  • NameNode é ponto único de falha (até Hadoop 2.x)
  • Não suporta modificações de arquivos (apenas append)
  • Overhead de Java pode impactar performance

Principais Recursos

Replicação Automática

Replica automaticamente blocos de dados em múltiplos DataNodes para garantir durabilidade.

Detecção de Falhas

Monitora constantemente a saúde dos DataNodes e recupera automaticamente de falhas.

Balanceamento de Carga

Distribui dados uniformemente pelo cluster para otimizar utilização de storage.

Snapshots

Permite criar snapshots point-in-time do sistema de arquivos para backup e recovery.

Especificações Técnicas

Tamanho de Bloco Padrão: 128 MB
Fator de Replicação Padrão: 3
Tamanho Máximo de Arquivo: Limitado apenas pelo espaço disponível
Número Máximo de Arquivos: Limitado pela memória do NameNode
Protocolos Suportados: HTTP, RPC, WebHDFS

Casos de Uso

Data Lakes

Armazenamento central para grandes volumes de dados estruturados e não estruturados.

Exemplo: Empresas armazenam logs, dados de sensores e arquivos de mídia para análise posterior.
Processamento Batch

Base de armazenamento para jobs MapReduce e Spark que processam grandes datasets.

Exemplo: ETL de dados de vendas diárias para relatórios mensais.
Backup e Arquivamento

Armazenamento de longo prazo para dados históricos e backups de sistemas críticos.

Exemplo: Bancos armazenam transações históricas para compliance regulatório.

Quando Usar HDFS

✅ Recomendado para:
  • Armazenamento de arquivos grandes (>100MB)
  • Workloads de leitura sequencial
  • Processamento batch com MapReduce/Spark
  • Cenários onde tolerância a falhas é crítica
  • Clusters com commodity hardware
⚠️ Considere alternativas se:
  • Você precisa de baixa latência para acesso aleatório
  • Trabalha principalmente com arquivos pequenos
  • Precisa de modificações frequentes de arquivos
  • Requer compatibilidade POSIX completa
  • Tem requisitos de real-time processing

Exemplos Práticos

Instalação

# Download Hadoop
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzf hadoop-3.3.6.tar.gz
cd hadoop-3.3.6

# Configurar variáveis de ambiente
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
export HADOOP_HOME=/opt/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

Configuração Básica

# core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://namenode:9000</value>
    </property>
</configuration>

# hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/hadoop/data/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/hadoop/data/datanode</value>
    </property>
</configuration>

Exemplo de Uso

# Formatar o NameNode (apenas primeira vez)
hdfs namenode -format

# Iniciar HDFS
start-dfs.sh

# Comandos básicos
hdfs dfs -mkdir /user/data
hdfs dfs -put local-file.txt /user/data/
hdfs dfs -ls /user/data/
hdfs dfs -cat /user/data/local-file.txt
hdfs dfs -get /user/data/local-file.txt downloaded-file.txt

# Verificar saúde do cluster
hdfs dfsadmin -report
hdfs fsck /user/data/ -files -blocks

Tutoriais Relacionados

Configurando um Cluster HDFS
Nível: Intermediário Ver Tutorial
HDFS High Availability com QJM
Nível: Avançado Ver Tutorial

Comparações

Alternativas Similares

Tecnologia Performance Facilidade de Uso Comunidade Licença
HDFS ★★★☆☆ ★★☆☆☆ ★★★★★ Apache 2.0
MinIO ★★★★☆ ★★★★☆ ★★★☆☆ Apache 2.0
Ceph ★★★★☆ ★★☆☆☆ ★★★☆☆ LGPL
Amazon S3 ★★★★★ ★★★★★ ★★★★★ Commercial

Matriz de Decisão

💡 Dica de Escolha:

Escolha HDFS se você já tem um ecossistema Hadoop estabelecido e precisa de armazenamento distribuído para processamento batch. Para novos projetos, considere alternativas mais modernas como MinIO ou soluções cloud-native.

📊 Quick Facts
Versão Atual: 3.3.6
Licença: Apache 2.0
Linguagem: Java
Primeira Release: 2006
Última Atualização: Janeiro 2024
🔄 Tecnologias Relacionadas
🎓 Cursos Relacionados
Hadoop Fundamentals
Iniciante • 20h Ver Curso
HDFS Administration
Intermediário • 30h Ver Curso