반응형
[ Data Source ]
└ CSV / JSON / Excel / API
↓
[ Ingestion ]
└ Apache NiFi (or Python ETL)
↓
[ Object Storage ]
└ MinIO (S3 Compatible)
↓
[ Table Format ]
└ Apache Iceberg
↓
[ Query / Processing ]
└ Trino (or Presto)
↓
[ BI / API ]
└ Superset / FastAPI
2. 필수 오픈소스 구성 요소 및 역할
계층오픈소스역할
| Storage | MinIO | S3 호환 Object Storage |
| Table | Apache Iceberg | ACID, Snapshot 기반 Data Lake 테이블 |
| SQL Engine | Trino | 분산 SQL Query Engine |
| Metadata | Hive Metastore | 테이블 메타데이터 관리 |
| ETL | Python / NiFi | 데이터 수집·정제 |
| API | FastAPI | 서비스 API |
| BI | Apache Superset | 데이터 시각화 |
✅ 모두 Windows + Docker 환경에서 실행 가능
3. 사전 준비 (Windows)
3.1 필수 설치
- Windows 10/11 Pro
- WSL2 활성화
- Docker Desktop (WSL2 backend)
- Git
- Python 3.10+
4. 단계별 구축 가이드
STEP 1. Docker 기반 기본 인프라 구성
docker-compose.yml (핵심)
version: "3.8"
services:
minio:
image: minio/minio
container_name: minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: admin123
command: server /data --console-address ":9001"
metastore:
image: apache/hive:3.1.3
container_name: hive-metastore
environment:
SERVICE_NAME: metastore
ports:
- "9083:9083"
trino:
image: trinodb/trino
container_name: trino
ports:
- "8080:8080"
STEP 2. MinIO 버킷 생성
- 접속: http://localhost:9001
- Bucket 생성
- raw
- iceberg
STEP 3. Iceberg + Trino 연동
Trino Catalog 설정 (iceberg.properties)
connector.name=iceberg
iceberg.catalog.type=hive
hive.metastore.uri=thrift://hive-metastore:9083
fs.s3a.endpoint=http://minio:9000
fs.s3a.access.key=admin
fs.s3a.secret.key=admin123
fs.s3a.path.style.access=true
STEP 4. 데이터 적재 (Python ETL)
import pandas as pd
import boto3
s3 = boto3.client(
"s3",
endpoint_url="http://localhost:9000",
aws_access_key_id="admin",
aws_secret_access_key="admin123"
)
df = pd.read_csv("sample.csv")
df.to_parquet("sample.parquet")
s3.upload_file(
"sample.parquet",
"raw",
"sample.parquet"
)
STEP 5. Iceberg 테이블 생성
CREATE SCHEMA iceberg.demo;
CREATE TABLE iceberg.demo.orders (
order_id BIGINT,
amount DOUBLE,
created_at TIMESTAMP
)
WITH (
format = 'PARQUET',
location = 's3a://iceberg/orders'
);
STEP 6. API 서비스 연동 (FastAPI)
from fastapi import FastAPI
import trino
app = FastAPI()
conn = trino.dbapi.connect(
host="localhost",
port=8080,
user="admin",
catalog="iceberg",
schema="demo"
)
@app.get("/orders")
def get_orders():
cur = conn.cursor()
cur.execute("SELECT * FROM orders LIMIT 10")
return cur.fetchall()
5. 로컬 환경에서 가능한 서비스 시나리오
- 사내 데이터 분석 PoC
- 공공 데이터 통합 분석 서비스
- 제조/물류 이력 분석
- 로그·이벤트 기반 통계 서비스
- AI 학습용 데이터 레이크 전처리
반응형
'교육' 카테고리의 다른 글
| node v14.17.0 설치 URL (0) | 2026.01.19 |
|---|---|
| MinIO + Apache Iceberg + Trino 기반 Data Lake 구축 종합 가이드 (0) | 2026.01.15 |
| 초기 로더 CSS 파일 가이드 (0) | 2026.01.15 |
| Worker Configuration Type Definition 파일 가이드 (0) | 2026.01.15 |
| Cloudflare Workers Wrangler 설정 파일 가이드 (0) | 2026.01.15 |