lakeFS Documentation

LakeFS - Data version control for your data lake | Git for data

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy lakeFS on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name lakefs --restart always treeverse/lakefs:latest
Configured Services & Ports
โš™๏ธ lakefs
image: build locally
โš™๏ธ postgres
image: build locally
โš™๏ธ esti
image: build locally
docker-compose.yml
yaml (docker-compose.yml)
version: "3"
services:
  lakefs:
    extends:
      file: ${OSS_ESTI_OPS_PATH:-esti/ops}/docker-compose-common.yaml
      service: lakefs
    depends_on:
      - "postgres"
    volumes:
      - lakefs-app:/app:ro
    environment:
      - LAKEFS_BLOCKSTORE_GS_CREDENTIALS_JSON
      - LAKEFS_DATABASE_TYPE=postgres
      - LAKEFS_DATABASE_POSTGRES_CONNECTION_STRING=postgres://lakefs:lakefs@postgres/postgres?sslmode=disable
      - LAKEFS_BLOCKSTORE_S3_CREDENTIALS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
      - LAKEFS_BLOCKSTORE_S3_CREDENTIALS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
      - LAKEFS_BLOCKSTORE_TYPE=${LAKEFS_BLOCKSTORE_TYPE:-local}
      - LAKEFS_BLOCKSTORE_LOCAL_PATH=/home/lakefs
      - LAKEFS_BLOCKSTORE_LOCAL_IMPORT_ENABLED=true
      - LAKEFS_BLOCKSTORE_LOCAL_ALLOWED_EXTERNAL_PREFIXES=/tmp
      - AZURE_CLIENT_ID
      - AZURE_CLIENT_SECRET
      - AZURE_TENANT_ID
    entrypoint: ["/app/wait-for", "postgres:5432", "--", "/app/lakefs", "run"]

  postgres:
    extends:
      file: ${OSS_ESTI_OPS_PATH:-esti/ops}/docker-compose-common.yaml
      service: postgres

  esti:
    extends:
      file: ${OSS_ESTI_OPS_PATH:-esti/ops}/docker-compose-common.yaml
      service: esti
    environment:
      - ESTI_DATABASE_CONNECTION_STRING=postgres://lakefs:lakefs@postgres/postgres?sslmode=disable
    volumes:
      - lakefs-code:/lakefs
      - lakefs-app:/app:ro

volumes:
  lakefs-code:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ${LAKEFS_ROOT:-.}
  lakefs-app:

File: README.md

lakeFS is Data Version Control (Git for Data)

lakeFS is an open-source tool that transforms your object storage into a Git-like repository. It enables you to manage your data lake the way you manage your code.

With lakeFS you can build repeatable, atomic, and versioned data lake operations - from complex ETL jobs to data science and analytics.

lakeFS supports AWS S3, Azure Blob Storage, and Google Cloud Storage as its underlying storage service. It is API compatible with S3 and works seamlessly with all modern data frameworks such as Spark, Hive, AWS Athena, DuckDB, and Presto.

For more information, see the documentation.

Getting Started

You can spin up a standalone sandbox instance of lakeFS:

bash
pip install lakefs
python -m lakefs.quickstart

Once you've got lakeFS running, open http://127.0.0.1:8000/ in your web browser.

Getting Started with Docker

Alternatively, you can run lakeFS a server using Docker:

bash
docker run --pull always \
		   --name lakefs \
		   -p 8000:8000 \
		   treeverse/lakefs:latest \
		   run --quickstart

Quickstart

๐Ÿ‘‰๐Ÿป For a hands-on walk through of the core functionality in lakeFS head over to the quickstart to jump right in!

Make sure to also have a look at the lakeFS samples. These are a rich resource of examples of end-to-end applications that you can build with lakeFS.

Why Do I Need lakeFS?

ETL Testing with Isolated Dev/Test Environment

When working with a data lake, itโ€™s useful to have replicas of your production environment. These replicas allow you to test these ETLs and understand changes to your data without impacting downstream data consumers.

Running ETL and transformation jobs directly in production without proper ETL Testing is a guaranteed way to have data issues flow into dashboards, ML models, and other consumers sooner or later. The most common approach to avoid making changes directly in production is to create and maintain multiple data environments and perform ETL testing on them. Dev environment to develop the data pipelines and test environment where pipeline changes are tested before pushing it to production. With lakeFS you can create branches, and get a copy of the full production data, without copying anything. This enables a faster and easier process of ETL testing.

Reproducibility

Data changes frequently. This makes the task of keeping track of its exact state over time difficult. Oftentimes, people maintain only one state of their dataโ€“โ€“its current state.

This has a negative impact on the work, as it becomes hard to:

  • Debug a data issue.
  • Validate machine learning training accuracy (re-running a model over different data gives different results).
    Comply with data audits.

In comparison, lakeFS exposes a Git-like interface to data that allows keeping track of more than just the current state of data. This makes reproducing its state at any point in time straightforward.

Write-Audit-Publish

Data pipelines feed processed data from data lakes to downstream consumers like business dashboards and machine learning models. As more and more organizations rely on data to enable business critical decisions, data reliability and trust are of paramount concern. Thus, itโ€™s important to ensure that production data adheres to the data governance policies of businesses. These data governance requirements can be as simple as a file format validation, schema check, or an exhaustive PII(Personally Identifiable Information) data removal from all of organizationโ€™s data.

Thus, to ensure the quality and reliability at each stage of the data lifecycle, data quality gates need to be implemented. That is, we need to run quality and correctness tests on the data, and only if data governance requirements are met can the data can be published to production for business use.

Everytime there is an update to production data, the best practice would be to run tests and then publish (deploy) the data to production. With lakeFS you can create hooks that make sure that only data that passed these tests will become part of production.

Rollback

A rollback operation is used to to fix critical data errors immediately.

What is a critical data error? Think of a situation where erroneous or misformatted data causes a signficant issue with an important service or function. In such situations, the first thing to do is stop the bleeding.

Rolling back returns data to a state in the past, before the error was present. You might not be showing all the latest data after a rollback, but at least you arenโ€™t showing incorrect data or raising errors. Since lakeFS provides versions of the data without making copies of the data, you can time travel between versions and roll back to the version of the data before the error was presented.

Community

Stay up to date and get lakeFS support via:

  • Share your lakeFS experience and get support on our Slack.
  • Follow us and join the conversation on Twitter.
  • Learn from video tutorials on our YouTube channel.
  • Read more on data versioning and other data lake best practices in our blog.
  • Feel free to contact us about anything else.

More information

Licensing

lakeFS is completely free and open-source and licensed under the Apache 2.0 License.

Treeverse considers that any sharing of source code with an AI agent, and any output an AI agent generates based on our source code, without the appropriate notices or attribution requirements, violates the terms of the Apache 2.0 license to which this source code is subject.
We also do not consider AI provider guardrails as sufficient to prevent copyright infringement. Treeverse reserves all of its rights to pursue legal action against any party that inputs LakeFS code into an AI agent.

Who Uses lakeFS?

lakeFS is used by numerous companies, including those below. If you use lakeFS and would like to be included here please open a PR.

  • AirAsia
  • APEX Global
  • AppsFlyer
  • Auburn University
  • BAE Systems
  • Bureau of Labor Statistics
  • Cambridge Consultants
  • Connor, Clark & Lunn Financial Group
  • Context Labs Bv
  • Daimler Truck
  • Enigma
  • EPCOR
  • Ford Motor Company
  • Generali
  • Giesecke+Devrient
  • greehill
  • Karius
  • Luxonis
  • Mixpeek
  • Netflix
  • Paige
  • PETRONAS
  • Pollinate
  • Proton Technologies AG
  • ProtonMail
  • Renaissance Computing Institute
  • RHEA Group
  • RMS
  • Sensum
  • Similarweb
  • State Street Global Advisors
  • Terramera
  • Tredence
  • Volvo Cars
  • Webiks
  • Windward
  • Woven by Toyota

File: clients/hadoopfs/README.md

lakeFS Hadoop FileSystem

An implementation of org.apache.hadoop.fs.FileSystem, the lakeFS Hadoop Filesystem allows to run Spark jobs on lakeFS with data operations performed directly on the underlying storage.
It uses the lakeFS server for metadata operations only.

Publishing

Follow the HadoopFS release checklist

Building and Testing

The project uses Maven.
Prerequisite: Java 8 must be installed for building and testing.


File: clients/java/docs/AbortPresignMultipartUpload.md

AbortPresignMultipartUpload

Properties

Name Type Description Notes
physicalAddress String

File: clients/java/docs/AccessKeyCredentials.md

AccessKeyCredentials

Properties

Name Type Description Notes
accessKeyId String access key ID to set for user for use in integration testing.
secretAccessKey String secret access key to set for user for use in integration testing.

File: clients/java/docs/ACL.md

ACL

Properties

Name Type Description Notes
permission String Permission level to give this ACL. "Read", "Write", "Super" and "Admin" are all supported.

File: clients/java/docs/ActionRunList.md

ActionRunList

Properties

Name Type Description Notes
pagination Pagination
results List<ActionRun>

File: clients/java/docs/ActionsApi.md

ActionsApi

All URIs are relative to /api/v1

Method HTTP request Description
getRun GET /repositories/{repository}/actions/runs/{run_id} get a run
getRunHookOutput GET /repositories/{repository}/actions/runs/{run_id}/hooks/{hook_run_id}/output get run hook output
listRepositoryRuns GET /repositories/{repository}/actions/runs list runs
listRunHooks GET /repositories/{repository}/actions/runs/{run_id}/hooks list run hooks

**getRun**

ActionRun getRun(repository, runId).execute();

get a run

Example

text
/* Detailed source-code truncated for AI context efficiency. */

Parameters

Name Type Description Notes
repository String
runId String

Return type

ActionRun

Authorization

basic_auth, cookie_auth, oidc_auth, saml_auth, jwt_token

HTTP request headers

  • Content-Type: Not defined
  • Accept: application/json

HTTP response details

Status code Description Response headers
200 action run result -
400 Bad Request -
401 Unauthorized -
404 Resource Not Found -
429 too many requests -
0 Internal Server Error -

**getRunHookOutput**

File getRunHookOutput(repository, runId, hookRunId).execute();

get run hook output

Example

text
/* Detailed source-code truncated for AI context efficiency. */

Parameters

Name Type Description Notes
repository String
runId String
hookRunId String

Return type

File

Authorization

basic_auth, cookie_auth, oidc_auth, saml_auth, jwt_token

HTTP request headers

  • Content-Type: Not defined
  • Accept: application/octet-stream, application/json

HTTP response details

Status code Description Response headers
200 run hook output -
400 Bad Request -
401 Unauthorized -
404 Resource Not Found -
429 too many requests -
0 Internal Server Error -

**listRepositoryRuns**

ActionRunList listRepositoryRuns(repository).after(after).amount(amount).branch(branch).commit(commit).execute();

list runs

Example

text
/* Detailed source-code truncated for AI context efficiency. */

Parameters

Name Type Description Notes
repository String
after String return items after this value [optional]
amount Integer how many items to return [optional] [default to 100]
branch String [optional]
commit String [optional]

Return type

ActionRunList

Authorization

basic_auth, cookie_auth, oidc_auth, saml_auth, jwt_token

HTTP request headers

  • Content-Type: Not defined
  • Accept: application/json

HTTP response details

Status code Description Response headers
200 list action runs -
400 Bad Request -
401 Unauthorized -
404 Resource Not Found -
429 too many requests -
0 Internal Server Error -

**listRunHooks**

HookRunList listRunHooks(repository, runId).after(after).amount(amount).execute();

list run hooks

Example

text
/* Detailed source-code truncated for AI context efficiency. */

Parameters

Name Type Description Notes
repository String
runId String
after String return items after this value [optional]
amount Integer how many items to return [optional] [default to 100]

Return type

HookRunList

Authorization

basic_auth, cookie_auth, oidc_auth, saml_auth, jwt_token

HTTP request headers

  • Content-Type: Not defined
  • Accept: application/json

HTTP response details

Status code Description Response headers
200 list specific run hooks -
400 Bad Request -
401 Unauthorized -
404 Resource Not Found -
429 too many requests -
0 Internal Server Error -