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 |