そのほか
2024/12/27
與田 龍人

DockerでローカルにIceberg環境を構築する方法

近年、Apache Icebergは大規模なデータを効率的に管理するためのオープンソースのテーブルフォーマットとして注目されています。特にAWS環境ではS3とAthenaの組み合わせで利用されることが多いですが、今回はローカル環境で手軽に試せるようにDockerを使用してIceberg + Spark環境を構築してみます。

はじめに

近年、Apache Icebergは大規模なデータを効率的に管理するためのオープンソースのテーブルフォーマットとして注目されています。特にAWS環境ではS3とAthenaの組み合わせで利用されることが多いですが、今回はローカル環境で手軽に試せるようにDockerを使用してIceberg + Spark環境を構築してみます。


全体のイメージ



1. 環境構築

まず、Docker Composeを利用してIceberg + Spark環境を構築します。


docker-compose.ymlの作成


以下の内容でdocker-compose.ymlを作成してください。 内容は公式ドキュメントをそのまま利用させていただきます。 https://iceberg.apache.org/spark-quickstart/#docker-compose



version: "3"

services:
spark-iceberg:
image: tabulario/spark-iceberg
container_name: spark-iceberg
build: spark/
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:
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:
image: minio/minio
container_name: minio
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=password
- MINIO_DOMAIN=minio
networks:
iceberg_net:
aliases:
- warehouse.minio
ports:
- 9001:9001
- 9000:9000
command: ["server", "/data", "--console-address", ":9001"]
mc:
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:
docker-compose.yml
version: "3"

services:
spark-iceberg:
image: tabulario/spark-iceberg
container_name: spark-iceberg
networks:
iceberg_net:
depends_on:
- minio
volumes:
- ./warehouse:/home/iceberg/warehouse
environment:
- AWS_ACCESS_KEY_ID=admin
- AWS_SECRET_ACCESS_KEY=password
- AWS_REGION=us-east-1
ports:
- 10000:10000

minio:
image: minio/minio
container_name: minio
networks:
iceberg_net:
volumes:
- ./data:/data
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=password
command: ["server", "/data", "--console-address", ":9001"]
ports:
- 9000:9000
- 9001:9001

networks:
iceberg_net:


 


必要なディレクトリの作成


以下のコマンドで必要なディレクトリを作成します。




mkdir data notebooks warehouse
chmod 755 data notebooks warehouse


 


Dockerコンテナの起動


以下のコマンドでDocker Composeを使用してコンテナを起動します。




docker-compose up


2.Sparkセッションの起動と基本操作

コンテナが起動したら、Sparkセッションを開始していきます。以下のURLからnotebook環境に入ります。


http://localhost:8888/tree?



Iceberg – Getting Started.ipynbをクリックして、チュートリアル環境に入ります



チュートリアルに沿ってテーブルを作成します。



次に、MinIOのダッシュボードでテーブルのデータファイルが作成されているか確認します。ブラウザで以下にアクセスしてください:


http://localhost:9001/


ユーザー名:admin パスワード:password




MinIOにログインすると、warehouseフォルダ内に作成されたデータとメタデータが確認できます。



最後に

今回はDockerを使用してローカル環境にApache Icebergをセットアップし、基本的な操作を体験しました。Icebergは大規模なデータ管理において非常に有用なツールですので、引き続きクラウド環境やさらに複雑な分析に挑戦してみてください。


New call-to-action