Público-alvo: Alunos de graduação em Ciência de Dados
Temática: Infraestrutura para projetos de Big Data
Nível: Intermediário
Ao final desta atividade, você será capaz de:
- Compreender os conceitos fundamentais do paradigma MapReduce
- Implementar funções Map e Reduce em Python
- Containerizar aplicações de Big Data usando Docker
- Processar datasets de forma distribuída
- Aplicar boas práticas de infraestrutura para projetos de dados
- Conhecimento básico de Python
- Familiaridade com linha de comando (terminal/bash)
- Conta no GitHub (gratuita)
- Conta no Docker Hub (gratuita)
- Navegador web moderno
Todos os recursos podem ser acessados online gratuitamente:
- GitHub Codespaces (ambiente de desenvolvimento na nuvem)
- Play with Docker (https://labs.play-with-docker.com/) - Ambiente Docker online
- Dataset: Arquivo de texto com dados para processamento
MapReduce é um modelo de programação para processamento de grandes volumes de dados de forma distribuída e paralela. Foi popularizado pelo Google e é a base de frameworks como Hadoop.
Componentes principais:
- Map (Mapeamento): Transforma dados de entrada em pares chave-valor
- Shuffle & Sort: Agrupa todos os valores associados à mesma chave
- Reduce (Redução): Processa e agrega os valores agrupados
Fluxo de execução:
Input → Split → Map → Shuffle & Sort → Reduce → Output
Entrada:
"hello world"
"hello python"
Fase Map:
("hello", 1)
("world", 1)
("hello", 1)
("python", 1)
Fase Shuffle & Sort:
("hello", [1, 1])
("python", [1])
("world", [1])
Fase Reduce:
("hello", 2)
("python", 1)
("world", 1)
Antes de prosseguir, responda:
- Você compreende a diferença entre Map e Reduce?
- Você consegue explicar o que acontece na fase Shuffle & Sort?
- Você entende por que MapReduce é adequado para Big Data?
Passo 1: Acesse https://github.com e faça login
Passo 2: Faça um fork do repositório do laboratório
- Acesse o repositório original fornecido pelo professor
- Clique no botão "Fork" no canto superior direito
- Selecione sua conta como destino do fork
- Aguarde a criação do fork (alguns segundos)
Passo 3: Clone seu fork usando GitHub Codespaces
- No seu fork, clique no botão verde "Code"
- Selecione a aba "Codespaces"
- Clique em "Create codespace on main"
- Aguarde o ambiente carregar (pode levar 1-2 minutos)
Passo 4: Verifique o ambiente
python3 --version
docker --versionPasso 5: Explore a estrutura do projeto
ls -la mapreduce_app/Você verá:
mapper.py- Script de mapeamentoreducer.py- Script de reduçãomapreduce_runner.py- Orquestrador principalbenchmark.py- Script de análise de desempenhoDockerfile- Configuração do containerdata/- Diretório com datasets de exemplo
Verifique:
- Fork do repositório foi criado com sucesso
- Repositório foi clonado no Codespaces
- Python 3.x está instalado
- Docker está disponível
- Todos os arquivos da aplicação estão presentes
- Você consegue visualizar os scripts Python
O repositório já contém todos os scripts necessários. Vamos entender cada componente:
cd mapreduce_app
ls -laVocê verá a seguinte estrutura:
mapreduce_app/
├── mapper.py # Função Map
├── reducer.py # Função Reduce
├── mapreduce_runner.py # Orquestrador
├── benchmark.py # Análise de desempenho
├── Dockerfile # Imagem Docker
├── .dockerignore # Arquivos ignorados
└── data/ # Datasets
├── input.txt # Dataset de exemplo
└── livro.txt # Dom Casmurro (Projeto Gutenberg)
Visualize o conteúdo do arquivo de entrada:
cat data/input.txtO arquivo contém frases sobre Big Data e tecnologia que serão processadas pelo MapReduce.
Abra e analise o arquivo mapper.py:
cat mapper.pyO que o Mapper faz:
- Lê linhas de texto da entrada padrão (stdin)
- Converte o texto para minúsculas
- Remove pontuação usando expressões regulares
- Emite cada palavra no formato
palavra\t1
Conceitos importantes:
- Usa
sys.stdinpara ler dados - Usa
re.findall()para extrair palavras - Emite pares chave-valor no formato TSV (Tab-Separated Values)
Abra e analise o arquivo reducer.py:
cat reducer.pyO que o Reducer faz:
- Lê pares
palavra\tcontagemda entrada padrão - Usa
defaultdictpara acumular contagens - Emite resultados ordenados alfabeticamente
Conceitos importantes:
- Pressupõe que a entrada já está ordenada (fase Shuffle & Sort)
- Usa estruturas de dados eficientes (
defaultdict) - Tratamento de erros para linhas mal formatadas
Abra e analise o arquivo mapreduce_runner.py:
cat mapreduce_runner.pyO que o Runner faz:
- Orquestra todo o pipeline MapReduce
- Executa os 3 processos em sequência usando
subprocess - Conecta a saída de um processo na entrada do próximo (pipes)
- Exibe estatísticas e top 10 palavras mais frequentes
Conceitos importantes:
- Usa
subprocess.Popen()para criar processos - Implementa pipeline Unix:
cat file | python3 mapper.py | sort | python3 reducer.py - Aceita argumentos de linha de comando (
--input,--output)
Execute o processamento MapReduce:
Execute o processamento MapReduce:
# Torne os scripts executáveis (Linux/Mac/Git Bash)
chmod +x mapper.py reducer.py mapreduce_runner.py
# Execute o runner
python3 mapreduce_runner.pyVisualize os resultados:
cat data/output.txtVerifique:
- Você entendeu o propósito de cada script
- O processamento foi executado com sucesso
- O arquivo
data/output.txtfoi gerado - Você consegue ver a contagem de palavras
- As palavras "data" e "big" aparecem múltiplas vezes
- As estatísticas e top 10 foram exibidas corretamente
O repositório já contém um Dockerfile configurado. Vamos entender seu conteúdo:
cat DockerfileComponentes do Dockerfile:
FROM python:3.11-slim- Imagem base leve do PythonWORKDIR /app- Define o diretório de trabalhoRUN apt-get update...- Instala dependências do sistema (comandosort)COPY- Copia os scripts Python para o containerRUN chmod +x- Torna os scripts executáveisCMD- Comando padrão ao executar o container
O arquivo .dockerignore evita copiar arquivos desnecessários para a imagem:
cat .dockerignoreIsso reduz o tamanho da imagem e melhora a segurança.
docker build -t mapreduce-app:v1.0 .Aguarde a construção (pode levar alguns minutos na primeira vez).
docker images | grep mapreduce-appVerifique:
- Você entendeu a estrutura do Dockerfile
- Build foi concluído sem erros
- Imagem
mapreduce-app:v1.0aparece na listagem - O tamanho da imagem é razoável (< 200MB)
Execute o container montando o volume de dados:
Linux/Mac/Git Bash:
docker run --rm \
-v "$(pwd)/data:/app/data" \
mapreduce-app:v1.0Windows PowerShell:
docker run --rm `
-v "${PWD}/data:/app/data" `
mapreduce-app:v1.0O script benchmark.py já está incluído no repositório. Ele gera automaticamente arquivos de teste de diferentes tamanhos.
Execute o benchmark localmente:
python3 benchmark.pyIsso criará arquivos de teste de 1MB, 5MB e 10MB e medirá o desempenho.
Esta seção é opcional. Se você tiver tempo e interesse, pode explorar o processamento de arquivos maiores.
Execute o processamento de arquivo grande usando argumentos:
Linux/Mac/Git Bash:
docker run --rm \
-v "$(pwd)/data:/app/data" \
mapreduce-app:v1.0 \
python3 mapreduce_runner.py --input data/benchmark_1mb.txt --output data/benchmark_1mb_output.txtWindows PowerShell:
docker run --rm `
-v "${PWD}/data:/app/data" `
mapreduce-app:v1.0 `
python3 mapreduce_runner.py --input data/benchmark_1mb.txt --output data/benchmark_1mb_output.txtSe você realizou esta seção opcional, verifique:
- Container executou sem erros
- Benchmark gerou arquivos de teste
- Você consegue processar arquivos de diferentes tamanhos
- Entendeu como passar argumentos para o container
O arquivo data/livro.txt contém o texto completo do romance "Dom Casmurro" de Machado de Assis, disponível através do Projeto Gutenberg (gutenberg.org). Use MapReduce para analisar:
- As palavras mais frequentes no texto
- Quantas vezes aparecem palavras-chave como "Capitu", "Bentinho", "amor", "ciúme"
- Identificar os termos mais relevantes da obra
Visualize uma amostra do dataset:
head -n 50 data/livro.txtTarefa: Execute o mapreduce_runner.py para processar o livro Dom Casmurro.
python3 mapreduce_runner.py --input data/livro.txt --output data/livro_output.txtAnálise adicional: Após processar, examine as palavras mais frequentes:
# Ver as 20 palavras mais frequentes
sort -t$'\t' -k2 -nr data/livro_output.txt | head -20📸 EVIDÊNCIA OBRIGATÓRIA:
Após completar o exercício, capture uma evidência da execução:
- Screenshot do terminal mostrando a saída do processamento do livro (incluindo o top 10 de palavras)
- Screenshot do arquivo de saída mostrando as palavras mais frequentes
Salve esta evidência, pois você precisará enviá-la na plataforma TEAMS.
Complete o exercício:
- Exercício 1 concluído
- Evidência capturada e salva
Publique sua imagem Docker no Docker Hub para compartilhamento:
# Garanta que não esta logado com nenhuma conta
docker logout
# Login no Docker Hub
docker login
# Tag da imagem com seu usuário do Docker Hub
docker tag mapreduce-app:v1.0 seuusuario/mapreduce-app:v1.0
# Push para o Docker Hub
docker push seuusuario/mapreduce-app:v1.0Verificando a publicação:
- Acesse https://hub.docker.com
- Faça login com sua conta
- Verifique que sua imagem aparece nos seus repositórios
- Compartilhe o link:
docker pull seuusuario/mapreduce-app:v1.0
Finalize o projeto:
- Código commitado no Git
- Imagem publicada no Docker Hub
Autoavaliação:
- Compreendo o paradigma MapReduce profundamente
- Consigo implementar Map e Reduce para diferentes problemas
- Sei containerizar aplicações com Docker
- Entendo os trade-offs de infraestrutura para Big Data
- Posso explicar o código para outra pessoa
- Sei publicar imagens Docker no Docker Hub
Você deve entregar evidências da realização desta atividade prática na plataforma do Microsoft TEAMS.
Prepare as seguintes evidências:
-
Exercício 1 (Análise Literária - Dom Casmurro):
- Screenshot da execução do processamento do livro (incluindo estatísticas e top 10)
- Screenshot do arquivo de saída com as palavras mais frequentes
- Breve análise: quantas vezes a palavra capitú aparece no livro?
-
Publicação no Docker Hub:
- Screenshot da imagem publicada no Docker Hub
- Link público para sua imagem (exemplo:
docker pull seuusuario/mapreduce-app:v1.0)
-
Link do seu Fork no GitHub:
- URL do seu repositório fork com todas as modificações
- Submeta todas as evidências solicitadas na tarefa que foi atribuida a você na Plataforma Teams.
Parabéns! Você completou a atividade prática de MapReduce com Python e Docker.
✅ Conceitos fundamentais de MapReduce
✅ Implementação de pipelines de processamento de dados
✅ Containerização com Docker
✅ Boas práticas de infraestrutura para Big Data
✅ Publicação de imagens no Docker Hub