Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
147 lines (122 loc) · 4.16 KB
/
Copy pathMakefile
File metadata and controls
147 lines (122 loc) · 4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
.PHONY: install test lint format clean docker-build docker-run airflow-init airflow-up airflow-down dbt-deps dbt-run dbt-test spark-up spark-down spark-submit spark-shell spark-status help resource-check
PYTHON := python3
PIP := pip3
help:
@echo "Data Engineering Pipeline - 16GB RAM Optimized"
@echo ""
@echo "Setup:"
@echo " install Install dependencies"
@echo " install-dev Install dev + airflow + dbt + spark deps"
@echo ""
@echo "Development:"
@echo " test Run tests"
@echo " lint Run linters"
@echo " format Format code"
@echo " clean Clean build artifacts"
@echo ""
@echo "Docker Services:"
@echo " up Start ALL services (uses ~12GB RAM)"
@echo " down Stop all services"
@echo " spark-up Start Spark only (uses ~8GB RAM)"
@echo " spark-down Stop Spark"
@echo " airflow-up Start Airflow only (uses ~4GB RAM)"
@echo " airflow-down Stop Airflow"
@echo ""
@echo "Spark Jobs:"
@echo " spark-submit Submit a Spark job"
@echo " spark-shell Open PySpark shell"
@echo " spark-status Show Spark UI URL"
@echo ""
@echo "dbt:"
@echo " dbt-deps Install dbt packages"
@echo " dbt-run Run dbt models"
@echo " dbt-test Run dbt tests"
@echo " dbt-docs Generate and serve docs"
@echo ""
@echo "Monitoring:"
@echo " resource-check Show Docker resource usage"
install:
$(PIP) install -e .
install-dev:
$(PIP) install -e ".[dev,airflow,dbt,spark]"
pre-commit install
test:
pytest
lint:
ruff check src tests
mypy src
black --check src tests
format:
black src tests
ruff check --fix src tests
clean:
rm -rf build/ dist/ *.egg-info/ .pytest_cache/ .mypy_cache/ htmlcov/ .coverage
find . -type d -name __pycache__ -exec rm -rf {} +
find . -type f -name "*.pyc" -delete
-docker volume rm data_engineering_project_spark_tmp 2>/dev/null || true
resource-check:
@echo "=== Docker Resource Usage ==="
@docker system df
@echo ""
@echo "=== Container Memory ==="
@docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}" 2>/dev/null || echo "No containers running"
airflow-init:
docker-compose up airflow-init
airflow-up:
docker-compose up -d postgres redis airflow-webserver airflow-scheduler airflow-worker airflow-triggerer
@echo "Airflow UI: http://localhost:8090 (airflow/airflow)"
airflow-down:
docker-compose stop airflow-webserver airflow-scheduler airflow-worker airflow-triggerer
spark-up:
docker-compose up -d spark-master spark-worker
@echo "Spark UI: http://localhost:8082"
@echo "Spark Master: spark://localhost:7077"
spark-down:
docker-compose stop spark-master spark-worker
spark-submit:
@echo "Usage: make spark-submit JOB=spark/jobs/process_sales.py"
docker-compose exec spark-master spark-submit \
--master spark://spark-master:7077 \
--executor-memory 4g \
--driver-memory 4g \
$(JOB)
spark-shell:
docker-compose exec spark-master pyspark --master spark://spark-master:7077
spark-status:
@echo "Spark UI: http://localhost:8082"
@docker-compose ps spark-master spark-worker
dbt-deps:
dbt deps --project-dir dbt --profiles-dir dbt
dbt-run:
dbt run --project-dir dbt --profiles-dir dbt
dbt-test:
dbt test --project-dir dbt --profiles-dir dbt
dbt-docs:
dbt docs generate --project-dir dbt --profiles-dir dbt
dbt docs serve --project-dir dbt --profiles-dir dbt
# Start everything - requires 16GB RAM
up:
@echo "Starting full stack..."
@echo "Recommended: 16GB RAM, 100GB+ SSD"
@echo ""
docker-compose up -d postgres redis spark-master spark-worker
@echo "Waiting for infrastructure..."
sleep 10
docker-compose up -d airflow-init
@echo "Waiting for Airflow init..."
sleep 15
docker-compose up -d airflow-webserver airflow-scheduler airflow-worker airflow-triggerer
@echo ""
@echo "All services started!"
@echo "Airflow UI: http://localhost:8090"
@echo "Spark UI: http://localhost:8082"
@echo "pgAdmin: http://localhost:5050"
@echo ""
@echo "Run 'make resource-check' to monitor usage"
down:
docker-compose down
# Quick start for local Python development (no Docker)
run-spark-local:
python -m spark.jobs.process_sales
run-spark-sf:
python -m spark.jobs.snowflake_to_postgres