使用minio 做为lakefs 的数据存储
lakefs 提供了专门的存储adapter,所以支持各类还是比较方便的,官方已经内置了不少存储适配
以下是简单的集成minio
环境准备
- docker-compose文件
注意集成了dremio,dremio 添加了jprofiler扩展
version: '3'
services:
lakefs:
image: dalongrong/lakefs:dev-2022-02-09
ports:
- "8000:8000"
depends_on:
- "postgres"
environment:
- LAKEFS_AUTH_ENCRYPT_SECRET_KEY=${LAKEFS_AUTH_ENCRYPT_SECRET_KEY:-some random secret string}
- LAKEFS_DATABASE_CONNECTION_STRING=${LAKEFS_DATABASE_CONNECTION_STRING:-postgres://lakefs:lakefs@postgres/postgres?sslmode=disable}
- LAKEFS_BLOCKSTORE_TYPE=${LAKEFS_BLOCKSTORE_TYPE:-s3}
- LAKEFS_BLOCKSTORE_LOCAL_PATH=${LAKEFS_BLOCKSTORE_LOCAL_PATH:-/home/lakefs}
- LAKEFS_GATEWAYS_S3_DOMAIN_NAME=${LAKEFS_GATEWAYS_S3_DOMAIN_NAME:-s3.local.lakefs.io:8000}
- LAKEFS_BLOCKSTORE_S3_CREDENTIALS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-minio}
- LAKEFS_BLOCKSTORE_S3_CREDENTIALS_ACCESS_SECRET_KEY=${AWS_SECRET_ACCESS_KEY:-minio123}
- LAKEFS_LOGGING_LEVEL=${LAKEFS_LOGGING_LEVEL:-INFO}
- LAKEFS_STATS_ENABLED
- LAKEFS_BLOCKSTORE_S3_ENDPOINT=http://s3:9000
- LAKEFS_BLOCKSTORE_S3_FORCE_PATH_STYLE=true
- LAKEFS_COMMITTED_LOCAL_CACHE_DIR=${LAKEFS_COMMITTED_LOCAL_CACHE_DIR:-/home/lakefs/.local_tier}
entrypoint:
[
"/app/wait-for",
"postgres:5432",
"--",
"/app/lakefs",
"run"
]
postgres:
image: "postgres:${PG_VERSION:-11}"
command: "-c log_min_messages=FATAL"
ports:
- "5432:5432"
environment:
POSTGRES_USER: lakefs
POSTGRES_PASSWORD: lakefs
logging:
driver: none
dremio:
build: ./
ports:
- "9047:9047"
- "31010:31010"
s3:
image: minio/minio
environment:
- "MINIO_ACCESS_KEY=minio"
- "MINIO_SECRET_KEY=minio123"
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
dremio dockerfile
FROM dremio/dremio-oss:20.1.0
USER root
COPY dremio-env /opt/dremio/conf/dremio-env
COPY jprofiler_linux_12_0_4.deb /opt/jprofiler_linux_12_0_4.deb
RUN dpkg -i /opt/jprofiler_linux_12_0_4.deb
USER dremio
启动
启动比较简单docker-compose 就行了,但是需要配置lakefs 以及dremio(比较简单)
lakefs http://localhost:8000/setup
dremio http://localhost:9047
使用
目前lakefs 对于s3 的处理是需要先创建好bucket的,然后才能创建repo
- s3 bucket
- lakefs repo
- dremio 查询
说明
lakefs 设计上的问题,对于分支未提交的文件在s3中是可以看到的,这样对于基于流程管理的比较方便,我们会基于特定分支创建新的分支,然后进行管理
但是有时未提交文件直接可见可能不会很好(容易造成数据的不一致,已经赃数据),lakefs 的数据存储是比较有意思的,使用了sstable,比较高效,目
前一个问题是官方的部署需要依赖一个pg,官方也在逐步去除pg
一个s3数据存储的效果
以上使用了自己构建的一个版本的lakefs,当时主要是为了支持http (minio) 同时还添加了一个配置,但是后边发现官方是直接支持的,所以使用的时候可以直接走官方镜像
参考资料
https://docs.lakefs.io/understand/architecture.html
https://docs.lakefs.io/understand/data-model.html