Interagindo com o HDFS usando três métodos distintos em máquinas cliente

Três abordagens para operar no HDFS

1. Uso da Linha de Comando (Shell)

As ferramentas de linha de comando do HDFS, acessadas via hdfs dfs ou hadoop fs, permitem executar operações rapidamente. A sintaxe segue convenções do Linux.

Exemplos de comandos frequentes:

  • Listar conteúdo de diretório: hdfs dfs -ls /user
  • Enviar arquivo: hdfs dfs -put localfile /caminho/hdfs
  • Baixar arquivo: hdfs dfs -get /caminho/hdfs localfile
  • Criar diretório: hdfs dfs -mkdir /novodir
  • Excluir arquivo: hdfs dfs -rm /caminho/arquivo
1.1 Gerenciamento dos processos do HDFS

Scripts facilitam o controle da inicialização e parada do cluster.


# Iniciar/Parar todo o cluster
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/stop-dfs.sh

# Controlar processos individuais
$HADOOP_HOME/sbin/hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)
1.2 Comandos para o sistema de arquivos

Duas alternativas equivalentes são fornecidas pelo Hadoop:


# Comando antigo
hadoop fs [opções genéricas]

# Comando novo (recomendado)
hdfs dfs [opções genéricas]
1.3 Criar diretórios e verificar

hdfs dfs -mkdir -p /demo_hdfs/entrada
hdfs dfs -ls /
1.4 Enviar arquivo local para o HDFS

Assumindo um arquivo dados.txt com conteúdo local.


hdfs dfs -put dados.txt /demo_hdfs/entrada
hdfs dfs -cat /demo_hdfs/entrada/dados.txt
1.5 Anexar dados a um arquivo existente

echo "novos dados" > complemento.txt
hdfs dfs -appendToFile complemento.txt /demo_hdfs/entrada/dados.txt
1.6 Copiar e renomear arquivo

hdfs dfs -cp /demo_hdfs/entrada/dados.txt /demo_hdfs/entrada/dados_copia.txt
1.7 Mover e renomear arquivo

Utilize hdfs dfs -mv para deslocar ou renomear.

1.8 Baixar arquivo do HDFS

mkdir -p saida_local
hdfs dfs -get /demo_hdfs/entrada/dados.txt saida_local/
ls saida_local/
1.9 Excluir arquivos e diretórios

# Excluir arquivo
hdfs dfs -rm /demo_hdfs/entrada/arquivo_antigo.txt

# Excluir diretório recursivamente
hdfs dfs -rm -r /demo_hdfs
hdfs dfs -ls /

2. Interface Web (Porta 9870)

A interface gráfica do NameNode, acessada em http://<host_namenode>:9870, é ideal para monitoramento e operações básicas. Requer abertura de porta no firewall.

Funcionalidades principais incluem:

  • Overview: Visão geral da saúde e capacidade do cluster.
  • DataNodes: Status de cada nó de armazenamento.
  • Utilities: Navegador de arquivos (Browse the file system), logs e configurações.

Operações simples como upload por arrastar/soltar ou exclusão via menu de contexto estão disponíveis.

3. Programação via Java API

3.1 Visão Geral

Através da biblioteca hadoop-client, é possível manipular o HDFS programaticamente. IDEs como IntelliJ ou Eclipse facilitam o desenvolvimento.

3.2 Pré-requisitos
  • Cluster HDFS operacional e acessível.
  • Em ambientes com firewall, garantir acesso às portas relevantes (ex: 8020 para RPC, 9870 para Web UI).
  • Para ambientes seguros com Kerberos, a autenticação deve ser realizada via UserGroupInformation.
3.3 Exemplo de código básico

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;

public class ExemploHDFS {
    public static void main(String[] args) throws Exception {
        Configuration config = new Configuration();
        // Configurar URI do NameNode se necessário
        // config.set("fs.defaultFS", "hdfs://meu-namenode:8020");
        
        FileSystem fs = FileSystem.get(config);
        
        // Definir caminhos
        Path diretorio = new Path("/meu_diretorio");
        Path arquivo = new Path(diretorio, "arquivo.txt");
        
        try {
            // Criar diretório
            if (!fs.exists(diretorio)) {
                fs.mkdirs(diretorio);
            }
            
            // Escrever dados
            try (FSDataOutputStream saida = fs.create(arquivo)) {
                saida.writeBytes("Escrevendo dados via API Java");
            }
            
            // Ler e exibir dados
            try (FSDataInputStream entrada = fs.open(arquivo)) {
                String conteudo = entrada.readUTF();
                System.out.println("Conteúdo: " + conteudo);
            }
            
        } finally {
            fs.close();
        }
    }
}
3.4 Classes importantes
  • FileSystem: Ponto de entrada principal para operações no HDFS.
  • Path: Representa um caminho dentro do sistema de arquivos.
  • FSDataInputStream / FSDataOutputStream: Streams para leitura e escrita.

Comparativo entre os métodos

Aspecto Linha de Comando Interface Web Java API
Principle uso Administração, scripts Monitoramento, visão geral Integração em aplicações
Potencial de automação Médio (via scripts) Baixo Alto
Curva de aprendizado Baixa Muito baixa Alta
Controle de acesso Depende da config. do cluster Similar à linha de comando Implementado no código

Tags: HDFS hadoop linha de comando Java API Sistema de Arquivos Distribuído

Publicado em 7-22 13:37