Prepare arquivos para um trabalho em lote

Big DataBeginner
Pratique Agora

Introdução

Sua empresa varejista agora recebe arquivos de duas lojas em duas datas. O programa de contagem processará os arquivos que você fornecer; ele não consegue adivinhar qual dia você pretendia usar nem reconhecer que um arquivo antigo de resultado deve ser excluído da entrada. Assim, um programa correto pode produzir uma resposta de negócio errada quando a seleção da entrada está errada.

Você aprendeu a preservar, copiar, arquivar e exportar arquivos individuais. Aqui, passará de um arquivo para uma entrada em lote, um conjunto de arquivos selecionado de forma consciente. Você manterá as datas separadas, comparará contagens e conteúdos dos arquivos e salvará um manifesto: uma lista dos arquivos exatos do HDFS selecionados para uma execução.

O HDFS armazena o conteúdo dos arquivos sem entender colunas de varejo, datas ou cabeçalhos CSV. Você observará esse limite antes de organizar a entrada. Este laboratório prepara seus próprios arquivos locais e um exemplo de resultado anterior de forma independente; ele não depende do estado de laboratórios anteriores. Use o Terminal.

Separe o texto armazenado de seu significado

Nesta etapa, você inspecionará os arquivos locais recebidos e observará que enviar um CSV preserva seu cabeçalho como texto comum.

Comece no espaço de trabalho local:

cd /home/labex/project

Liste os arquivos recebidos na primeira data. Uma data no nome de um diretório é uma convenção útil, não um tipo de dado imposto pelo HDFS:

ls /home/labex/project/data/2026-10-14

Você deverá ver store-east.txt e store-west.txt. Leia-os nessa ordem com o cat local:

cat /home/labex/project/data/2026-10-14/store-east.txt /home/labex/project/data/2026-10-14/store-west.txt

Texto esperado:

notebook pen
notebook
folder pen

Aqui, cada palavra é um rótulo de produto registrado. Esses arquivos são adequados para o fluxo de contagem de palavras que você aprenderá mais adiante. Outro sistema forneceu um formato diferente. Leia a pequena amostra CSV:

cat /home/labex/project/data/orders-preview.csv

Texto esperado:

product,quantity
notebook,2
pen,1

O CSV usa vírgulas para separar campos. Sua primeira linha é um cabeçalho, que nomeia as colunas; as outras duas linhas são registros de negócio. O HDFS não remove automaticamente essa primeira linha nem interpreta quantity como um número inteiro.

Mantenha essa amostra separada do lote de rótulos de produtos. Crie um diretório no HDFS para ela:

hdfs dfs -mkdir -p /user/labex/batch-inputs/preview

Envie o CSV:

hdfs dfs -put /home/labex/project/data/orders-preview.csv /user/labex/batch-inputs/preview/orders.csv

Leia-o de volta:

hdfs dfs -cat /user/labex/batch-inputs/preview/orders.csv

As três linhas permanecem, incluindo o cabeçalho. Ignorar um cabeçalho ou converter um número é uma decisão de processamento. Misturar este arquivo à entrada de rótulos mudaria o significado do cálculo, mesmo que todos os arquivos fossem legíveis.

Organize os arquivos recebidos por data

Nesta etapa, você dará a cada data um diretório separado de entrada bruta e enviará os dois arquivos das lojas correspondentes.

Use uma estrutura de diretórios que deixe visível a distinção entre entradas e saídas:

batch-inputs/
  raw/2026-10-14/       arquivos de produtos do primeiro dia
  raw/2026-10-15/       arquivos de produtos do dia seguinte
  preview/             exemplo de formato CSV
  results/previous-run/  saída preparada de uma execução anterior

O resultado anterior é apenas um dado de exemplo para aprender a selecionar entradas. Ele não deve fazer parte do novo lote bruto. Crie os dois diretórios diários:

hdfs dfs -mkdir -p /user/labex/batch-inputs/raw/2026-10-14 /user/labex/batch-inputs/raw/2026-10-15

O padrão *.txt do shell corresponde a nomes locais que terminam em .txt. No próximo comando, o shell expande o padrão local sem aspas para os dois caminhos de origem antes de executar o cliente HDFS. O último argumento é um diretório existente no HDFS:

hdfs dfs -put /home/labex/project/data/2026-10-14/*.txt /user/labex/batch-inputs/raw/2026-10-14/

Agora altere apenas a data nos dois locais para enviar os arquivos recebidos no segundo dia:

hdfs dfs -put /home/labex/project/data/2026-10-15/*.txt /user/labex/batch-inputs/raw/2026-10-15/

Se os arquivos de destino já existirem, inspecione-os antes de decidir sobrescrever qualquer coisa. Preservar uma entrada bruta é mais útil do que excluí-la apenas para fazer um comando de envio executar novamente.

Confira cada lote com -count, aprendido no laboratório sobre ciclo de vida:

hdfs dfs -count /user/labex/batch-inputs/raw/2026-10-14 /user/labex/batch-inputs/raw/2026-10-15

Cada data deverá conter um diretório e dois arquivos. As colunas de tamanho do conteúdo não precisam ser iguais: as datas contêm registros diferentes. A contagem de arquivos, sozinha, não prova que você selecionou a data certa; portanto, liste também a primeira data:

hdfs dfs -ls /user/labex/batch-inputs/raw/2026-10-14

Ambas as entradas deverão mostrar os nomes esperados das lojas abaixo de 2026-10-14. Poucos arquivos pequenos tornam este exercício fácil de ler. Em uma escala muito maior, muitos arquivos minúsculos impõem sobrecarga de metadados ao HDFS; isso não significa que todo arquivo pequeno deva sempre ser combinado com outros.

Selecione e confira um lote

Nesta etapa, você preparará um manifesto exato dos arquivos de 14 de outubro e comparará seu texto de entrada com os arquivos locais esperados.

Antes de executar um comando, preveja qual diretório deve entrar no manifesto: toda a árvore batch-inputs, toda a árvore raw ou apenas raw/2026-10-14? O diretório específico da data corresponde ao dia solicitado e exclui a data seguinte, a amostra CSV e os resultados antigos.

A opção -ls -C do HDFS imprime caminhos sem as colunas detalhadas da listagem. Use-a na data selecionada:

hdfs dfs -ls -C /user/labex/batch-inputs/raw/2026-10-14

Os dois caminhos deverão terminar em store-east.txt e store-west.txt. Para facilitar a comparação da lista salva, um pipeline do shell, escrito como |, passa a saída do primeiro comando para um segundo comando. sort ordena as linhas; > salva o resultado localmente:

hdfs dfs -ls -C /user/labex/batch-inputs/raw/2026-10-14 | sort > /home/labex/project/output/input-manifest.txt

Leia seu manifesto:

cat /home/labex/project/output/input-manifest.txt

Caminhos esperados:

/user/labex/batch-inputs/raw/2026-10-14/store-east.txt
/user/labex/batch-inputs/raw/2026-10-14/store-west.txt

Você também pode usar um padrão no lado do HDFS. Aspas simples preservam *.txt para que o cliente HDFS, em vez do seu shell local, encontre os caminhos remotos correspondentes:

hdfs dfs -cat '/user/labex/batch-inputs/raw/2026-10-14/*.txt' > /home/labex/project/output/selected-input.txt

Para esses nomes de arquivo, o HDFS lê o arquivo east antes do arquivo west. Salve o texto local correspondente nessa mesma ordem explícita:

cat /home/labex/project/data/2026-10-14/store-east.txt /home/labex/project/data/2026-10-14/store-west.txt > /home/labex/project/output/expected-input.txt

Compare os dois:

diff /home/labex/project/output/expected-input.txt /home/labex/project/output/selected-input.txt

Nenhuma diferença deverá aparecer. Como outra conferência, wc -l conta as linhas terminadas por uma quebra de linha em cada arquivo:

wc -l /home/labex/project/output/selected-input.txt

O resultado deverá começar com 3. São três linhas de texto contendo cinco rótulos de produtos, não três pedidos. O significado de um registro vem do formato do arquivo e da tarefa, não do HDFS. Juntos, seu manifesto, o conteúdo dos arquivos e a contagem de linhas tornam explícita a escolha da entrada.

Resumo

Você separou uma amostra CSV dos arquivos simples de rótulos de produtos, manteve as entradas brutas de cada data em seu próprio diretório e selecionou um lote usando um manifesto. Conferiu tanto os nomes quanto os conteúdos dos arquivos, em vez de confiar apenas em um envio ou em uma contagem de arquivos.

No próximo desafio, você organizará novos arquivos recebidos usando as habilidades de gerenciamento de arquivos e seleção de entradas que já praticou.