1. DataHub란?
DataHub는 LinkedIn에서 개발한 오픈소스 메타데이터 플랫폼으로, 현대 데이터 스택의 핵심인 데이터 발견(discovery), 거버넌스(governance), 라인티지(lineage)를 통합적으로 지원합니다. 데이터 엔지니어와 데이터 사이언티스트가 데이터 자산을 효율적으로 관리하고, AI/ML 워크플로우에서 메타데이터를 활용할 수 있도록 설계되었습니다.
주요 특징으로는 Python 기반의 강력한 인제스션 프레임워크, GraphQL API, React 기반 UI가 있으며, 대규모 엔터프라이즈 환경에서 검증되었습니다. Kubernetes, Docker로 쉽게 배포 가능합니다.
3대 핵심 능력
📊 Unified Metadata Platform
다양한 소스(Apache Atlas, Amundsen, DBT 등)에서 메타데이터를 중앙화. Dataset, User, Pipeline 등 엔티티를 그래프 모델로 관리하여 관계성을 직관적으로 탐색.
🔍 Search & Discovery
Elasticsearch 통합으로 풀텍스트 검색, 태그, 용도(usage) 기반 추천. AI/ML 모델의 데이터 소스 추적에 최적화.
🛡️ Governance & Lineage
데이터 라인티지 시각화, 정책 기반 거버넌스, 감사 로그. PII/민감 데이터 태깅으로 컴플라이언스 지원.
DataHub는 2020년 오픈소스화 이후 Acryl Data가 유지보수 중이며, 2024년 기준 10K+ GitHub 스타를 기록. 데이터 메쉬 아키텍처에 필수 도구.
2. 왜 써야 하는가?
기존 데이터 카탈로그 도구(Amundsen, Atlas 등)는 부분적 기능만 제공하지만, DataHub는 통합 플랫폼으로 비용과 운영 복잡도를 줄입니다. 특히 Python 생태계와의 호환성이 뛰어나 데이터 엔지니어의 생산성을 극대화합니다.
| 기능 | DataHub | Amundsen | Atlas | Collibra |
|---|---|---|---|---|
| 오픈소스 | ✅ (완전) | ✅ | ✅ (Hadoop 중심) | ❌ (상용) |
| 라인티지 | ✅ (시각화+API) | ❌ | ✅ (부분) | ✅ (고가) |
| 인제스션 | ✅ (100+ 커넥터) | ✅ (제한) | ✅ (Hadoop) | ✅ (커스텀) |
| 스케일 | ✅ (Kubernetes) | ⚠️ | ✅ | ✅ (클라우드) |
| Python SDK | ✅ (공식) | ❌ | ❌ | ❌ |
ROI: DataHub 도입 시 데이터 검색 시간 70% 단축 (LinkedIn 사례). AI 엔지니어는 모델 입력 데이터의 출처를 즉시 확인 가능.
3. 핵심 개념
DataHub의 세계관은 Entity-Aspects-Relationships로 구성됩니다. Entity(예: Dataset)는 Aspects(속성: schema, tags 등)로 확장되며, Relationships로 연결됩니다.
주요 엔티티
- Dataset: 테이블/뷰/파일. platform(예: BigQuery), name, schema.
- Dashboard: Looker/Superset 등. 차트 라인티지 지원.
- ML Model: SageMaker 등 모델 카탈로그.
- Domain: 데이터 도메인 기반 거버넌스.
아키텍처 개요
인제스션 → Kafka → GMS → 스토어. UI는 GMS의 GraphQL 엔드포인트 호출.
4. 퀵스타트
로컬에서 5분 만에 시작. Docker Compose 사용.
1. 설치
git clone https://github.com/datahub-project/datahub
cd datahub
docker compose up -d
2. DataHub CLI 설치
pip install 'acryl-datahub[datahub-rest]'
3. 첫 인제스션 (PostgreSQL 예제)
config.yaml 작성:
source:
type: postgres
config:
host_port: localhost:5432
database: postgres
username: postgres
password: datahub
sink:
type: datahub-rest
config:
server: http://localhost:8080
datahub ingest -c config.yaml
4. Python SDK 예제 (라인티지 추가)
from datahub.emitter.mcp import MetadataChangeProposalWrapper
from datahub.metadata.schema_classes import (
DatasetLineageClass,
UpstreamLineageClass,
)
# 예제: Dataset A -> B 라인티지
lineage = DatasetLineageClass(
upstreams=[UpstreamLineageClass(
dataset="urn:li:dataset:(urn:li:dataPlatform:postgres,test_db.tableA,PROD)"
)]
)
mcp = MetadataChangeProposalWrapper(entityUrn="urn:li:dataset:(urn:li:dataPlatform:postgres,test_db.tableB,PROD)", aspect=lineage)
# GMS로 emit
UI 접속: http://localhost:9002. 로그인 없이 탐색 가능.
5. 핵심 설정 레퍼런스
docker-compose.yml 및 ingestion config 주요 옵션.
| 설정 키 | 설명 | 기본값 | 예제 |
|---|---|---|---|
| metadata-store.host | MySQL 호스트 | localhost:19324 | mysql.datahub.com:3306 |
| elasticsearch.hosts | 검색 인덱스 | http://localhost:9200 | https://es-cluster:9200 |
| ingestion.batch.size | 배치 크기 | 1000 | 5000 |
| playbook.config.retentionDays | 사용량 보존 | 30 | 90 |
| security.enableRbac | RBAC 활성 | false | true |
6. 실무 팁 & 트러블슈팅
팁
- K8s 배포 시 Helm 차트 사용:
helm repo add datahub https://datahubproject.github.io/helm-chart/ - Airflow/Dagster 통합: 공식 인제스터로 자동 라인티지 수집.
- 커스텀 Aspect: Python으로 확장 가능.
자주 발생 문제: Elasticsearch 연결 실패
해결: docker logs datahub-elasticsearch 확인 후, network_mode: host 설정. 메모리 부족 시 -Xmx 조정.
Ingest 실패 (401 Unauthorized)
CLI 버전 mismatch: pip install --upgrade acryl-datahub. Server URL에 /api 확인.
성능 최적화: GMS 클러스터링, Kafka 파티션 증가. 대규모(1M+ 엔티티) 시 MySQL 샤딩.
7. 참고 자료
- 공식 문서 - Quickstart & Recipes
- Metadata Model
- GitHub Repo - 100+ Ingestion Sources
- Ingestion Guide - Python SDK
- Acryl Data (상용 지원)