Desafio DataOps

Implementação completa MongoDB & Python - Local e Remota

Visão Geral do Projeto

Objetivo: Implementar um pipeline de dados completo usando Python e MongoDB, com suporte para instalação local e conexão remota ao servidor 192.168.22.111.

Status do Desafio

Progresso: 6/6 etapas completas

1
DataFrames Criados

Estruturas de dados pandas com informações de carros e montadoras implementadas

2
MongoDB Conectado

Conexão local e remota configurada com tratamento de erros robusto

3
Collections Salvas

Dados persistidos nas collections 'carros' e 'montadoras' do MongoDB

4
Agregação Criada

Pipeline MongoDB desenvolvido para relacionar collections

5
Agrupamento por País

Resultado final organizado por país de origem das montadoras

6
Exportação JSON

Collections e resultado da agregação exportados para arquivos JSON

Soluções Implementadas

Multi-plataforma

Scripts otimizados para Windows e Linux com documentação específica

Interface Amigável

Feedback visual colorido e logs detalhados durante a execução

Setup Automático

Configuração automática do ambiente MongoDB e collections

Servidor 192.168.22.111

Configuração prática para conexão com servidor remoto específico

Autenticação Segura

Suporte completo a credenciais, SSL/TLS e validação de conexão

Configuração Flexível

Gerenciamento via arquivo .env ou configuração direta no código

Ambiente Isolado

MongoDB e Mongo Express executando em containers Docker

Deploy Rápido

Ambiente completo funcionando com um único comando

Desenvolvimento

Configuração ideal para testes e desenvolvimento local

Estrutura dos Dados

DataFrame Carros

Carro Cor Montadora
OnixPrataChevrolet
PoloBrancoVolkswagen
SanderoPrataRenault
FiestaVermelhoFord
CityPretoHonda

DataFrame Montadoras

Montadora País
ChevroletEUA
VolkswagenAlemanha
RenaultFrança
FordEUA
HondaJapão
Relacionamento: As collections são relacionadas através do campo montadora para criar a agregação final agrupada por país.

Implementação Python

import pandas as pd

# DataFrame Carros
carros_data = {
    'carro': ['Onix', 'Polo', 'Sandero', 'Fiesta', 'City'],
    'cor': ['Prata', 'Branco', 'Prata', 'Vermelho', 'Preto'],
    'montadora': ['Chevrolet', 'Volkswagen', 'Renault', 'Ford', 'Honda']
}
df_carros = pd.DataFrame(carros_data)

# DataFrame Montadoras  
montadoras_data = {
    'montadora': ['Chevrolet', 'Volkswagen', 'Renault', 'Ford', 'Honda'],
    'pais': ['EUA', 'Alemanha', 'França', 'EUA', 'Japão']
}
df_montadoras = pd.DataFrame(montadoras_data)

Instalação Local

Configuração Windows

1
Instalar MongoDB

Opção A - Chocolatey:

choco install mongodb

Opção B - Download Manual:

Baixar em: MongoDB Community Server

2
Configurar Ambiente Python
cd Case-Engenheiro-dados
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
3
Iniciar Serviço MongoDB
net start MongoDB
4
Executar Script
python scripts/main_local.py

Configuração Linux

1
Instalar MongoDB
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y mongodb-org

# Iniciar serviço
sudo systemctl start mongod
sudo systemctl enable mongod
2
Configurar Python
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
3
Executar
python scripts/main_local.py

Ambiente Docker

Vantagem: Não requer instalação local do MongoDB
1
Subir Containers
docker-compose -f docker/docker-compose.yml up -d
2
Executar Script
python scripts/main_local.py
Interface Web: Mongo Express disponível em http://localhost:8081

Conexão Remota

Configuração para servidor: 192.168.22.111

Configuração do Servidor

1
MongoDB no Servidor
# Editar configuração
sudo nano /etc/mongod.conf

# Permitir conexões externas
net:
  port: 27017
  bindIp: 0.0.0.0

# Reiniciar serviço
sudo systemctl restart mongod
2
Configurar Firewall
# Ubuntu
sudo ufw allow 27017/tcp

# CentOS
sudo firewall-cmd --permanent --add-port=27017/tcp
sudo firewall-cmd --reload

Configuração do Cliente

1
Arquivo .env
MONGO_HOST=192.168.22.111
MONGO_PORT=27017
MONGO_DATABASE=dataops_challenge
MONGO_USERNAME=usuario
MONGO_PASSWORD=senha
2
Executar Script Remoto
python scripts/main_remote.py

Execução dos Scripts

Script Local

python scripts/main_local.py

Funcionalidades do script local:

  • Conecta ao MongoDB local (localhost:27017)
  • Cria database 'dataops_challenge' automaticamente
  • Insere dados dos DataFrames nas collections
  • Executa pipeline de agregação MongoDB
  • Exporta resultados para arquivos JSON
  • Fornece logs detalhados de cada operação

Script Remoto

python scripts/main_remote.py

Funcionalidades adicionais do script remoto:

  • Validação completa de credenciais
  • Teste de conectividade de rede
  • Relatório de status do servidor
  • Suporte a conexões SSL/TLS
  • Tratamento robusto de erros de rede

Arquivos Gerados

carros.json

Collection completa de carros exportada do MongoDB

montadoras.json

Collection de montadoras com dados de países

aggregation_result.json

Resultado final da agregação por país

Resultados da Agregação

Pipeline MongoDB: Relaciona carros com montadoras e agrupa o resultado por país de origem

Pipeline de Agregação

db.carros.aggregate([
  {
    $lookup: {
      from: "montadoras",
      localField: "montadora", 
      foreignField: "montadora",
      as: "montadora_info"
    }
  },
  {
    $unwind: "$montadora_info"
  },
  {
    $group: {
      _id: "$montadora_info.pais",
      carros: {
        $push: {
          carro: "$carro",
          cor: "$cor",
          montadora: "$montadora"
        }
      }
    }
  },
  {
    $sort: { _id: 1 }
  }
]);

Resultado Final por País

País Quantidade Carros
Alemanha 1 Polo (Volkswagen)
EUA 2 Onix (Chevrolet), Fiesta (Ford)
França 1 Sandero (Renault)
Japão 1 City (Honda)
Análise: Os Estados Unidos lideram com 2 carros de montadoras diferentes (Chevrolet e Ford)

Resolução de Problemas

Problemas com MongoDB

Erro comum: "MongoDB service failed to start"

Solução Windows:

# Verificar logs
Get-Content "C:\data\log\mongodb.log" -Tail 20

# Reiniciar serviço
net stop MongoDB
net start MongoDB

Solução Linux:

# Verificar status
sudo systemctl status mongod

# Reiniciar serviço
sudo systemctl restart mongod

# Visualizar logs
sudo journalctl -u mongod -f

Problemas com Python

Erro comum: "No module named 'pandas'"
# Ativar ambiente virtual
# Windows
.venv\Scripts\Activate.ps1

# Linux/Mac  
source .venv/bin/activate

# Instalar dependências
pip install -r requirements.txt
Teste rápido: python -c "import pandas; print('Pandas funcionando!')"

Problemas de Conectividade

Erro comum: "Connection timeout" (servidor remoto)

Testar conectividade:

# Ping para o servidor
ping 192.168.22.111

# Testar porta específica
telnet 192.168.22.111 27017

# Verificar firewall local
sudo ufw status
Dica: Use MongoDB Compass para testar a conexão de forma visual