6–9 Week Program: Big Data, Lakehouse, Spark, Kafka, Airflow, Trino, Data Governance
Repo này chứa toàn bộ hạ tầng cần thiết để học viên tự chạy các lab trong khóa học.
| Component | Recommendation |
|---|---|
| CPU | ≥ 4 vCPU |
| RAM | ≥ 16 GB |
| Disk | ≥ 50 GB |
| OS | macOS / Windows WSL2 / Linux |
| Tools | Docker Desktop, Git, Python 3.10 |
git clone https://github.com/your-org/de-bootcamp.git
cd de-bootcampCompose file: Mặc định dùng docker-compose.yml (Postgres, MinIO, Hive Metastore, Trino; một network de-bootcamp_default).
Tuỳ chọn: docker-compose.fixed.yml và docker-compose.clean.yml là bản dùng profiles và network de-net; chỉ dùng khi cần chạy từng nhóm dịch vụ (core / lakehouse / spark / streaming / airflow / bi) riêng.
docker compose --profile core up -ddocker compose --profile lakehouse --profile spark up -ddocker compose --profile streaming up -ddocker compose --profile airflow up -ddocker compose up -ddocker run --rm \
--network de-bootcamp_default \
-e HADOOP_CLIENT_OPTS="-Djavax.jdo.option.ConnectionURL=jdbc:postgresql://hive-metastore-db:5432/metastore -Djavax.jdo.option.ConnectionDriverName=org.postgresql.Driver -Djavax.jdo.option.ConnectionUserName=hive -Djavax.jdo.option.ConnectionPassword=hive" \
--entrypoint /opt/hive/bin/schematool \
apache/hive:3.1.3 \
-dbType postgres \
-initSchema
docker compose downpsql postgresql://de_user:de_pass@localhost:5432/de_dbhttp://localhost:9001
User: minioadmin
Pass: minioadmin
User: admin
http://localhost:8080
http://localhost:8082
User: airflow
Pass: airflow
http://localhost:3000
psql postgresql://de_user:de_pass@localhost:5432/de_db -f sql/01_create_oltp_schema.sqlpsql postgresql://de_user:de_pass@localhost:5432/de_db -f sql/02_seed_sample_data.sqlMở Trino CLI hoặc web UI → chạy: Mở bằng CLI:
docker exec -it de_trino trino
SHOW CATALOGS;
SHOW SCHEMAS FROM hive;
CREATE SCHEMA hive.lakehouse
WITH (location='s3a://lakehouse/');Trong Airflow UI, bật DAG:
postgres_to_minio_etl
Sau đó kiểm tra file xuất hiện trong MinIO:
- bucket: lakehouse
- path: bronze/orders/orders_extract.csv
Airflow DAG:
spark_bronze_to_silver_gold
Job thực hiện:
- Đọc CSV từ MinIO
- Làm sạch dữ liệu
- Ghi Silver (Parquet) phân vùng theo ngày
- Tính Gold metrics (daily revenue, total orders…)
lakehouse/
├─ raw/
├─ bronze/
│ └─ orders/
├─ silver/
│ └─ orders_clean/
└─ gold/
└─ orders_daily_metrics/
Test Debezium:
INSERT INTO app.orders (customer_id, order_date, status)
VALUES (1, CURRENT_DATE, 'created');connect-debezium.app.orders
Dữ liệu CDC sẽ được stream sang MinIO hoặc Spark Streaming.
docker compose down -v
docker system prune -af
docker compose up -ddocker exec -it de_airflow ls /opt/airflow/dags-localdocker compose restart trinoNếu cần hỗ trợ trong lúc học, học viên có thể mở issue trong repo hoặc hỏi trực tiếp trong lớp.
Sau khi chạy:
psql postgresql://de_user:de_pass@localhost:5432/de_db -f sql/01_create_oltp_schema.sql
psql postgresql://de_user:de_pass@localhost:5432/de_db -f sql/02_seed_sample_data.sqlSau khi bật core + lakehouse:
docker compose --profile core --profile lakehouse up -dMở Trino UI tại:
http://localhost:8080
Chạy các lệnh kiểm tra:
SHOW CATALOGS;
SHOW SCHEMAS FROM hive;
CREATE SCHEMA IF NOT EXISTS hive.lakehouse
WITH (location='s3a://lakehouse/');
SHOW TABLES FROM hive.lakehouse;Nếu bạn đã load file CSV vào MinIO (bronze), tạo bảng external để đọc:
CREATE TABLE hive.lakehouse.orders_bronze (
order_id integer,
customer_id integer,
order_date date,
total_amount double
)
WITH (
external_location='s3a://lakehouse/bronze/orders/',
format='CSV',
skip_header_line_count = 1
);
SELECT * FROM hive.lakehouse.orders_bronze LIMIT 10;Bật lakehouse + spark:
docker compose --profile lakehouse --profile spark up -dChạy Spark job trực tiếp qua spark-submit:
docker exec -it de_spark_master \
spark-submit \
--master spark://spark-master:7077 \
/opt/airflow/spark_jobs/bronze_to_silver_gold.py \
s3a://lakehouse/bronze/orders/orders_extract.csv \
s3a://lakehouse/silver/orders_clean/ \
s3a://lakehouse/gold/orders_daily_metrics/ \
http://minio:9000 \
minioadmin \
minioadminSau khi job chạy xong, kiểm tra bằng Trino:
SELECT * FROM hive.lakehouse.orders_silver LIMIT 10;
SELECT * FROM hive.lakehouse.orders_daily_metrics LIMIT 10;Bật Kafka + Zookeeper:
docker compose --profile streaming up -dTruy cập container Kafka:
docker exec -it de_kafka bashTạo topic:
kafka-topics --create \
--bootstrap-server kafka:9092 \
--replication-factor 1 \
--partitions 1 \
--topic test-topicList topic:
kafka-topics --list --bootstrap-server kafka:9092Producer test:
kafka-console-producer --broker-list kafka:9092 --topic test-topic
>hello
>this is a testConsumer:
kafka-console-consumer --bootstrap-server kafka:9092 \
--topic test-topic \
--from-beginningTrong terminal:
curl http://localhost:8083/connectorsKiểm tra trạng thái connector (ví dụ: debezium-postgres-orders):
curl http://localhost:8083/connectors/debezium-postgres-orders/statusInsert thử dữ liệu vào Postgres:
INSERT INTO app.orders(customer_id, order_date, status)
VALUES (1, CURRENT_DATE, 'created');Consumer CDC topic (tùy connector config):
kafka-console-consumer \
--bootstrap-server kafka:9092 \
--topic dbserver1.app.orders \
--from-beginningList DAGs:
docker exec -it de_airflow airflow dags listShow DAG graph:
docker exec -it de_airflow airflow dags show postgres_to_minio_etlTrigger DAG:
docker exec -it de_airflow airflow dags trigger postgres_to_minio_etlXem lịch sử chạy:
docker exec -it de_airflow airflow dags list-runs postgres_to_minio_etlKiểm tra logs:
docker exec -it de_airflow airflow tasks logs postgres_to_minio_etl extract_from_postgresTruy cập vào:
http://localhost:3000
Thêm database mới:
- Type: Postgres
- Host: postgres
- Port: 5432
- DB name: de_db
- User: de_user
- Password: de_pass
Tạo câu hỏi (Question):
SELECT order_date, total_amount
FROM app.orders
ORDER BY order_date DESC;Nếu query chạy OK → kết nối thành công.