Introdução
Você está ajudando uma empresa varejista a responder a uma pergunta simples: Quais produtos apareceram com mais frequência nos registros diários das nossas lojas? Antes de contar qualquer coisa, você precisa reunir os arquivos e garantir que seu conteúdo esteja disponível e correto. Este laboratório é seu primeiro passo nessa jornada.
Dos dados do dia a dia ao big data
Uma única loja pode manter seus registros diários em um arquivo pequeno, que você consegue abrir em um notebook. Agora imagine milhares de lojas enviando registros todos os dias, junto com atividades do site e atualizações do depósito. Há mais dados para guardar, novos dados continuam chegando e os arquivos podem ter estruturas diferentes.
Big data descreve cargas de trabalho de dados cujo tamanho, ritmo de chegada ou complexidade dificulta o uso das ferramentas e dos recursos disponíveis. Não existe um número universal de linhas que transforme um arquivo em big data. As perguntas práticas são: você consegue armazenar os dados, processá-los no tempo disponível e continuar trabalhando quando um equipamento falha?
Para um arquivo pequeno de vendas, uma planilha, um banco de dados ou um script Python pode ser suficiente. Conforme as cargas de trabalho crescem, uma abordagem é distribuir o armazenamento e o processamento entre vários computadores conectados. Um grupo de computadores que trabalham juntos é chamado de cluster; dividir o trabalho entre eles é chamado de computação distribuída.
O papel do Hadoop
O Apache Hadoop é um conjunto de ferramentas de código aberto para armazenar e processar dados em um cluster. Dois componentes oferecem uma visão inicial útil:
| Componente | Sua função | A pergunta da empresa varejista |
|---|---|---|
| HDFS — Hadoop Distributed File System, o sistema de arquivos distribuído do Hadoop | Armazenar arquivos em várias máquinas e manter cópias dos dados quando configurado para isso | Onde podemos guardar os arquivos de entrada diários? |
| MapReduce — um framework de processamento em lote | Dividir um trabalho de processamento em tarefas menores e combinar seus resultados | Como podemos contar os rótulos de produtos nesses arquivos? |
Um lote é um conjunto delimitado de dados processados em conjunto, como os arquivos de ontem. Nos próximos laboratórios, você executará um programa de contagem já pronto. Neste laboratório, você trabalhará com o HDFS, a parte de armazenamento: um cálculo só é útil se ler os dados pretendidos.
O Hadoop faz parte de um ecossistema mais amplo de ferramentas de dados. Os próximos cursos apresentam o Hive para consultas SQL sobre arquivos, o Spark para processamento programável de dados e o Kafka para entrega contínua de eventos. Você não precisa dessas ferramentas para começar este laboratório, nem precisa memorizar seus nomes agora.
Sua primeira parte do fluxo de trabalho
O fluxo simplificado da empresa varejista é:
Reunir arquivos de produtos → Armazenar no HDFS → Processar um lote → Conferir as contagens
Você começa aqui
Sua tarefa é enviar um arquivo, lê-lo de volta e conferir se seu conteúdo foi preservado. Pense nisso como conferir um ingrediente antes de usá-lo em uma receita: armazenar corretamente vem antes de fazer um cálculo confiável.
O laboratório fornece Hadoop em uma única máquina, para que você aprenda comandos reais do HDFS sem instalar um cluster. Mesmo neste ambiente, arquivos locais e arquivos do HDFS usam caminhos e comandos de acesso separados. Esta configuração não demonstra armazenamento distribuído entre várias máquinas nem recuperação após a falha de uma máquina; essas ideias ficarão mais claras conforme você explorar o HDFS.
Ao concluir este laboratório, você será capaz de:
- Distinguir um arquivo local de um arquivo armazenado no HDFS.
- Criar um diretório no HDFS e enviar um arquivo.
- Ler um arquivo do HDFS e compará-lo com o original local.
- Enviar os mesmos dados com outro nome de destino.
Use a aba Terminal durante todo o laboratório. Você só precisa de conhecimentos básicos de terminal; não é necessário programar em Java ou Python. Se caminhos e comandos de terminal forem novidade para você, comece pela trilha de aprendizagem de Linux.
Envie seu primeiro arquivo ao HDFS
Nesta etapa, você inspecionará um arquivo local, criará seu próprio diretório no HDFS e enviará o arquivo para ele.
O terminal é onde você digita solicitações. O comando hdfs é um cliente: ele envia essas solicitações ao serviço HDFS em execução, que gerencia os arquivos armazenados. A seguir, você verá comandos locais do Linux e comandos do HDFS; o comando indica qual armazenamento você está usando.
O laboratório já iniciou os serviços do HDFS e preparou um pequeno arquivo de entrada. Clique no Terminal e execute cada comando abaixo, esperando o prompt reaparecer antes de continuar. Copie somente o comando, sem símbolos de prompt.
Use cd para mudar o diretório atual do shell para o diretório local do projeto:
cd /home/labex/project
O caminho começa com /, portanto é um caminho absoluto. A entrada local está no diretório data, abaixo desse local. O comando comum cat do Linux exibe um arquivo local:
cat /home/labex/project/data/products.txt
Conteúdo esperado:
notebook pen notebook
folder pen
notebook folder
Cada palavra é um rótulo de produto, e cada ocorrência representa um item registrado nesta amostra simplificada. Você já consegue contar manualmente cinco ocorrências de notebook e pen juntas: três cadernos e duas canetas. Em muitos arquivos grandes, um programa de processamento em lote poderia fazer essa contagem por você.
Por enquanto, mantenha a pergunta em mente, mas concentre-se em armazenar o texto exatamente como está. Usamos três linhas fáceis de ler para que você reconheça um resultado correto imediatamente; esta amostra, por si só, não precisa do Hadoop.
O HDFS tem sua própria árvore de diretórios. Neste ambiente, hdfs dfs envia comandos de sistema de arquivos ao HDFS. Criar um diretório local com o mkdir do Linux não criaria um diretório no HDFS.
Crie um diretório abaixo do seu diretório pessoal no HDFS, /user/labex. A operação -mkdir cria um diretório; -p também cria os diretórios-pai ausentes e aceita um diretório que já existe:
hdfs dfs -mkdir -p /user/labex/your-first-hadoop-lab
Em geral, uma operação bem-sucedida não produz saída. O prompt reaparece quando a operação termina. Este diretório está no HDFS, embora o caminho use a mesma notação com barras de um caminho local.
A operação -put copia um arquivo de origem local para um destino no HDFS. O primeiro caminho abaixo é local; o segundo está no HDFS:
hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products.txt
Um envio bem-sucedido normalmente não produz saída e mantém o original local no lugar. Se você repetir este comando após um envio bem-sucedido, o HDFS informará que o destino já existe. Continue inspecionando-o; você não precisa apagá-lo nem sobrescrevê-lo.
Use -ls para listar o diretório do HDFS:
hdfs dfs -ls /user/labex/your-first-hadoop-lab
Você deverá ver Found 1 items e uma entrada de arquivo terminando em:
/user/labex/your-first-hadoop-lab/products.txt
A entrada também inclui permissões, proprietário, grupo, tamanho e horário de modificação. Esses detalhes serão explorados mais adiante. Nesta etapa, o caminho de destino confirma que o arquivo está presente no HDFS. A seguir, você conferirá o que ele contém.
Leia de volta e confira o conteúdo
Nesta etapa, você lerá o arquivo do HDFS, salvará seu conteúdo localmente e o comparará com o original.
A empresa varejista acabará contando os rótulos do arquivo armazenado. Se o envio tiver usado o arquivo errado ou perdido uma linha, as contagens posteriores poderão estar erradas mesmo que o programa seja executado com sucesso. A listagem de um diretório prova que um arquivo existe, mas não prova que seu conteúdo esteja correto.
Antes de lê-lo de volta, preveja o que deverá ver: enviar o arquivo deveria mudar algum rótulo de produto ou remover alguma linha? A operação -cat do HDFS lê um arquivo do HDFS e imprime seu conteúdo no terminal:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt
Conteúdo esperado:
notebook pen notebook
folder pen
notebook folder
Compare com o arquivo local que você inspecionou na etapa 1. As palavras e as quebras de linha devem ser iguais. Observe a diferença entre os comandos: cat lê o arquivo local, enquanto hdfs dfs -cat lê o arquivo do HDFS neste ambiente.
Para manter uma cópia local do resultado da leitura, use o operador > do shell. Ele redireciona a saída impressa pelo comando para um arquivo local, criando esse arquivo ou substituindo seu conteúdo existente. O diretório output, já preparado, é destinado aos seus resultados:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt > /home/labex/project/output/products-readback.txt
Desta vez, nenhum texto de produto aparece no terminal, pois ele foi gravado no arquivo local de saída. A origem no HDFS permanece inalterada. Leia o resultado salvo com o comando local cat:
cat /home/labex/project/output/products-readback.txt
Ele deverá mostrar as mesmas três linhas. Agora você tem um original local, um arquivo no HDFS e um arquivo local com o conteúdo lido de volta.
Use diff para comparar o original com o resultado salvo. Quando dois arquivos são idênticos, diff não imprime nada e termina com sucesso:
diff /home/labex/project/data/products.txt /home/labex/project/output/products-readback.txt
O retorno ao prompt sem diferenças confirma que o conteúdo lido de volta corresponde ao original. Se aparecerem diferenças, repita o comando de leitura usando exatamente os caminhos de origem no HDFS e de saída local mostrados acima e compare novamente.
Pratique com um novo nome de destino
Nesta etapa, você mudará uma parte do comando de envio e conferirá se o conteúdo do arquivo muda.
Antes de executar o próximo comando, preveja o resultado: se você mantiver a origem local e mudar apenas o nome do arquivo de destino no HDFS, os rótulos de produtos mudarão? O primeiro arquivo do HDFS ainda existirá?
Envie novamente o arquivo local original, desta vez usando products-copy.txt como nome de destino:
hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products-copy.txt
Como antes, um envio bem-sucedido normalmente não produz saída. Se você já concluiu este envio, uma mensagem de destino existente significa que deve inspecionar o arquivo, em vez de enviá-lo novamente.
Liste o diretório do HDFS para conferir sua previsão:
hdfs dfs -ls /user/labex/your-first-hadoop-lab
Agora você deverá ver Found 2 items, com entradas terminando nestes caminhos:
/user/labex/your-first-hadoop-lab/products-copy.txt
/user/labex/your-first-hadoop-lab/products.txt
Ambos os arquivos continuam presentes porque -put copia a origem local para o destino informado; ele não renomeia o arquivo anterior no HDFS. Este segundo arquivo é uma cópia de prática dos mesmos registros, em vez de um novo dia de vendas. Quando aprender a preparar entradas de lotes, você selecionará os arquivos com cuidado para que cópias duplicadas não sejam contadas duas vezes.
Leia o novo arquivo do HDFS:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt
A saída deverá conter as mesmas três linhas de rótulos de produtos. Mudar o nome de um arquivo não muda seu conteúdo.
Use a mesma técnica de leitura para salvar o novo arquivo localmente:
hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt > /home/labex/project/output/products-copy-readback.txt
Compare o resultado salvo com o original:
diff /home/labex/project/data/products.txt /home/labex/project/output/products-copy-readback.txt
Nenhuma diferença deverá ser impressa. Você conferiu as duas partes da sua previsão: o primeiro arquivo do HDFS permanece, e o segundo contém dados idênticos.
Antes de prosseguir, identifique quais comandos leem arquivos locais e quais leem arquivos do HDFS. No próximo laboratório, você inspecionará a configuração que informa aos comandos do HDFS onde se conectar.
Resumo
Você começou com a necessidade de uma empresa varejista de reunir e contar registros de produtos. Aprendeu por que cargas crescentes de dados podem exigir armazenamento e processamento distribuídos e qual é o papel do Hadoop: o HDFS armazena arquivos, enquanto o MapReduce pode processar um lote.
Você concluiu a parte de armazenamento desse fluxo: enviou um arquivo local de texto de varejo ao HDFS, leu-o de volta e usou diff para confirmar que seu conteúdo foi preservado. Depois, previu e conferiu o efeito de mudar apenas o nome do destino no HDFS.
Você praticou hdfs dfs -mkdir -p, -put, -ls e -cat e distinguiu essas operações do HDFS do cat local e do redirecionamento de saída do shell. A seguir, você explorará como o cliente Hadoop encontra o HDFS e como armazenamento e computação se encaixam.



