Iceberg 학습 환경 세팅(with. docker-compose)

김재민·2025년 9월 27일

iceberg-hands-on

목록 보기
1/2

Background

  • MinIO(aka. S3) 와 REST Catalog 을 이용하여 로컬 환경에서 Iceberg 를 스터디할 수 있는 docker-compose 내용을 기록한다.

Docker Compose

version: "3"

services:
  spark-iceberg: # PySpark 기반 컨테이너로 실행한다.
    image: tabulario/spark-iceberg
    container_name: spark-iceberg
    networks:
      iceberg_net:
    depends_on:
      - rest
      - minio
    volumes:
      - ./warehouse:/home/iceberg/warehouse
      - ./notebooks:/home/iceberg/notebooks/notebooks
    environment:
      - AWS_ACCESS_KEY_ID=admin
      - AWS_SECRET_ACCESS_KEY=password
      - AWS_REGION=us-east-1
    ports:
      - 8888:8888
      - 8080:8080
      - 10000:10000
      - 10001:10001
  rest: # Iceberg 사용 시 Hive Metastore 와 비슷한 REST Catalog 서버를 이용한다.
    image: apache/iceberg-rest-fixture
    container_name: iceberg-rest
    networks:
      iceberg_net:
    ports:
      - 8181:8181
    environment:
      - AWS_ACCESS_KEY_ID=admin
      - AWS_SECRET_ACCESS_KEY=password
      - AWS_REGION=us-east-1
      - CATALOG_WAREHOUSE=s3://warehouse/
      - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO
      - CATALOG_S3_ENDPOINT=http://minio:9000
  minio: # S3 와 비슷한 MinIO 환경에서 파일시스템을 관리한다.
    image: minio/minio
    container_name: minio
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=password
      - MINIO_DOMAIN=minio
    networks:
      iceberg_net:
        aliases:
          - warehouse.minio
    volumes: # 나는 로컬 환경에 저장되는 avro, parquet 파일을 직접 열람하고 싶어서 볼륨 마운트 했으나 굳이 볼륨 마운트 하지 않아도 된다.
      - ./warehouse:/data
    ports:
      - 9001:9001
      - 9000:9000
    command: ["server", "/data", "--console-address", ":9001"]
  mc: # MinIO CLI 로 MinIO 에 내부적으로 소통할 때 사용한다.
    depends_on:
      - minio
    image: minio/mc
    container_name: mc
    networks:
      iceberg_net:
    environment:
      - AWS_ACCESS_KEY_ID=admin
      - AWS_SECRET_ACCESS_KEY=password
      - AWS_REGION=us-east-1
    entrypoint: |
      /bin/sh -c "
      until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done;
      /usr/bin/mc rm -r --force minio/warehouse;
      /usr/bin/mc mb minio/warehouse;
      /usr/bin/mc policy set public minio/warehouse;
      tail -f /dev/null
      "
networks:
  iceberg_net:

MinIO

MinIO 에서 아래 이미지와 같이 WebUI 를 제공한다.
docker-compose.yaml 에 설정해둔 localhost:9001/ 주소에서 아래와 같이 Bucket 과 경로별 FS 을 확인할 수 있다.

profile
안녕하세요. 데이터 엔지니어 김재민 입니다.

0개의 댓글