Introdução
A empresa varejista recebeu um arquivo de produtos. Uma pessoa da equipe precisa de uma cópia para revisão, outra precisa de uma versão arquivada, e você precisa baixar o arquivo revisado para inspecioná-lo. Se essas ações substituírem ou excluírem o original por acidente, a equipe perderá sua entrada confiável.
O ciclo de vida de um arquivo é o conjunto de ações pelas quais ele passa: chegada, uso, arquivamento, exportação e eventual remoção. O HDFS oferece operações para cada ação, mas seus efeitos diferem. Enviar e baixar copiam entre sistemas de arquivos; copiar e mover dentro do HDFS permanecem no HDFS.
Você organizará diretórios separados para dados brutos, arquivos retidos e trabalho temporário, preservará o arquivo bruto, exportará uma cópia arquivada e removerá apenas uma cópia descartável. Você já conhece caminhos do HDFS e comandos de envio e leitura; este laboratório acrescenta o gerenciamento cuidadoso de arquivos. O ambiente e os dados são independentes dos laboratórios anteriores. Use o Terminal durante todo o laboratório.
Preserve uma entrada bruta
Nesta etapa, você enviará a entrada da empresa varejista para um diretório reservado aos arquivos originais.
Um arquivo bruto é uma entrada mantida em sua forma original. Um diretório scratch separado guarda trabalho temporário, e um diretório archive guarda uma cópia retida. Os nomes dos diretórios não impõem essas regras automaticamente; eles tornam suas intenções visíveis.
Comece no espaço de trabalho local:
cd /home/labex/project
Leia a entrada antes de armazená-la:
cat /home/labex/project/data/products.txt
Ela contém:
notebook pen notebook
folder pen
notebook folder
Use -mkdir -p com três caminhos de diretório. O HDFS cria cada diretório informado e os diretórios-pai ausentes:
hdfs dfs -mkdir -p /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive /user/labex/file-lifecycle/scratch
Envie a entrada local para o diretório de dados brutos:
hdfs dfs -put /home/labex/project/data/products.txt /user/labex/file-lifecycle/raw/products.txt
Um envio bem-sucedido normalmente não imprime nada. Se você o repetir, um erro de destino existente protegerá o arquivo armazenado contra uma sobrescrita acidental. Inspecione a entrada armazenada em vez de excluí-la para silenciar o erro:
hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt
O texto deverá corresponder ao original local. O original também permanece no sistema de arquivos local: -put copia sua origem local, em vez de movê-la. Seu trabalho posterior usará cópias para manter esta entrada bruta intacta.
Copie e arquive dentro do HDFS
Nesta etapa, você criará uma cópia para revisão e moverá essa cópia para o arquivo, sem mover a entrada bruta.
A operação -cp copia uma origem do HDFS para um destino no HDFS. Diferentemente de -put, ambos os caminhos abaixo se referem ao HDFS:
hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/review.txt
Inspecione a cópia de revisão:
hdfs dfs -cat /user/labex/file-lifecycle/scratch/review.txt
Você deverá ver os mesmos rótulos de produtos. Um nome diferente ainda representa os mesmos dados, não um novo lote de vendas.
Quando uma cópia de revisão estiver pronta para ser retida, mova-a com -mv. Mover dentro deste sistema de arquivos altera seu caminho; não mantém o caminho de origem no lugar. Antes de executar o comando, preveja qual arquivo desaparecerá e qual permanecerá:
hdfs dfs -mv /user/labex/file-lifecycle/scratch/review.txt /user/labex/file-lifecycle/archive/products-reviewed.txt
Liste scratch e archive juntos. -ls aceita vários caminhos:
hdfs dfs -ls /user/labex/file-lifecycle/scratch /user/labex/file-lifecycle/archive
A entrada arquivada deverá terminar em /archive/products-reviewed.txt; não deverá haver uma entrada review.txt em scratch. Confirme que o arquivo bruto não foi afetado:
hdfs dfs -cat /user/labex/file-lifecycle/raw/products.txt
Suas três linhas ainda devem ser iguais. Se você voltar a esta etapa depois de concluí-la, inspecione a cópia arquivada existente em vez de executar novamente o par de operações de cópia e movimentação: -mv já removeu a origem de scratch ao movê-la, e uma cópia arquivada existente não deve ser sobrescrita sem cuidado.
Exporte e meça seus arquivos
Nesta etapa, você baixará o arquivo retido e inspecionará as contagens de arquivos e o uso do armazenamento.
A operação -get copia uma origem do HDFS para um destino local. O primeiro caminho abaixo está no HDFS; o segundo é local:
hdfs dfs -get /user/labex/file-lifecycle/archive/products-reviewed.txt /home/labex/project/output/products-exported.txt
O prompt deverá reaparecer sem saída. Se o download já tiver sido concluído, inspecione o destino local; baixar novamente para um arquivo existente pode informar que ele já existe. Use o diff local para conferir o conteúdo, como no primeiro laboratório:
diff /home/labex/project/data/products.txt /home/labex/project/output/products-exported.txt
Nenhuma diferença deverá aparecer. Esta é uma cópia exportada: tanto a cópia arquivada no HDFS quanto o original local permanecem.
Para medir o conteúdo dos diretórios, -count imprime a quantidade de diretórios, a quantidade de arquivos, o tamanho do conteúdo em bytes e o caminho. Ele inclui o próprio diretório especificado na contagem de diretórios:
hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive
Cada linha deverá descrever um diretório contendo um arquivo. Ambas as linhas deverão ter o mesmo tamanho de conteúdo, pois os bytes arquivados correspondem aos bytes brutos. Salve as linhas reais:
hdfs dfs -count /user/labex/file-lifecycle/raw /user/labex/file-lifecycle/archive > /home/labex/project/output/file-counts.txt
A operação -du resume os tamanhos dos arquivos. -h escolhe unidades legíveis para pessoas quando útil:
hdfs dfs -du -h /user/labex/file-lifecycle/raw
As colunas mostram o tamanho do conteúdo, o espaço consumido com réplicas e o caminho. Este ambiente usa fator de replicação 1, portanto as duas colunas de tamanho devem ser iguais para este arquivo. Você explorará blocos e replicação em um laboratório posterior; uma segunda coluna maior em outro ambiente não significa necessariamente registros de negócio adicionais.
Antes de continuar, explique os limites para si: -cp permaneceu dentro do HDFS, -mv alterou um caminho do HDFS e -get criou uma cópia local.
Remova apenas uma cópia descartável
Nesta etapa, você inspecionará a política de exclusão e removerá um arquivo temporário conhecido, mantendo a entrada e a cópia arquivada.
A exclusão é um tipo diferente de operação: quando um arquivo deixa de ser necessário, seu caminho pode ser removido. O HDFS pode ter uma política de retenção na Lixeira (Trash), mas a recuperação não é garantida só porque você usou o HDFS. Primeiro, leia o intervalo de retenção da Lixeira configurado, em minutos:
hdfs getconf -confKey fs.trash.interval
O ambiente preparado usa 0, o que significa que a retenção na Lixeira está desativada. Trate uma exclusão aqui como remoção imediata. Um valor positivo em outro ambiente habilita um intervalo de retenção, mas não substitui a preservação de entradas confiáveis.
Crie uma cópia cuja única finalidade seja praticar a remoção:
hdfs dfs -cp /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/scratch/disposable.txt
Antes de excluir qualquer coisa, liste o destino exato:
hdfs dfs -ls /user/labex/file-lifecycle/scratch/disposable.txt
Confira se o caminho termina em scratch/disposable.txt, e não em raw/products.txt nem na cópia arquivada. A operação -rm remove o arquivo especificado. Você não precisa de exclusão recursiva nem de curinga:
hdfs dfs -rm /user/labex/file-lifecycle/scratch/disposable.txt
O comando informa que o arquivo nomeado foi excluído. Repeti-lo informaria que o arquivo não existe; isso é motivo para inspecionar o estado, em vez de ampliar o destino da exclusão. Liste scratch para confirmar que não restam arquivos temporários:
hdfs dfs -ls /user/labex/file-lifecycle/scratch
Um diretório vazio não produz entradas de arquivo. Por fim, inspecione os dois arquivos que devem permanecer:
hdfs dfs -ls /user/labex/file-lifecycle/raw/products.txt /user/labex/file-lifecycle/archive/products-reviewed.txt
Ambos os caminhos deverão ser listados. Você concluiu um ciclo de vida sem sacrificar o original: enviou, copiou, arquivou, exportou, mediu e removeu apenas trabalho temporário.
Resumo
Você manteve os dados brutos intactos enquanto criava uma cópia para revisão, movia essa cópia para um arquivo e a exportava para o sistema de arquivos local. Interpretou contagens de arquivos e tamanhos de armazenamento, inspecionou a configuração da Lixeira e removeu apenas um arquivo descartável nomeado.
A seguir, você aplicará esses hábitos a lotes diários contendo vários arquivos. Saber quais arquivos pertencem a um lote importa tanto quanto saber como enviá-los.



