データレイクをGitライクに使いたい!lakeFSを使ってみた
はじめに
lakeFSは、ざっくり言うとデータレイクをGitのようなリポジトリぽく取り扱うソフトウェア/サービスです。Gitライクなので、ブランチの作成、バージョン管理、ロールバックなどをCLIまたはGUIにて実行できます。
現在、クラウドストレージをデータレイクとして使う場合にはAWS S3/Google Cloud Storage/Azure Blob Storageなど複数の選択肢があるかと思いますが、lakeFSをインターフェースとして入れることで、実際のストレージがどこにあるかを意識することなくデータレイクを取り扱えるため、マルチクラウドなデータ分析基盤においてより力を発揮します。
lakeFSにはローカル環境に導入するオープンソース版と、SaaSとして提供されるlakeFS Cloudがあります。
今回はオープンソース版でクイックスタートをやってみます。環境はMacBook Pro(macOS Big Sur)です。
やってみた
クイックスタート環境のセットアップ
前提条件としてDockerがインストールされていることとします。
% docker --version Docker version 20.10.17, build 100c701
以下コマンドを実行することで、実行環境に必要なDockerコンテナが一式起動します。データベースもコンテナ内に持つので、終了後全てのデータは破棄されます。
% curl https://compose.lakefs.io | docker-compose -f - up
Webブラウザでhttp://127.0.0.1:8000/setupにアクセスすると以下画面が表示されます。管理者となるユーザー名を設定します。
以下画面が表示されます。まず[Download Configuration]をクリックし、lakectlに必要なConfigurationファイルをダウンロードします。ダウンロードしたファイル(.lakectl.yaml)はホームディレクトリ直下に配置します。次にAccess Key IDとSecret Access Keyをメモし、[Go To Login]をクリックします。
ログイン画面が表示されるので、Access Key IDとSecret Access Keyを入力し、[Login]をクリックします。
ログインされます。
リポジトリを作ってみる
[Create Repository]をクリックします。
[Create A New Repository]画面が表示されますので、Repository ID、Storage Namespace(local://を付与します)を入力します。Default Branchはmainのままとします。[Create Repository]をクリックします。
リポジトリが作成されます。
リポジトリにオブジェクトを登録してみる
GUIから簡単にオブジェクトのアップロードが出来るのですが、lakeFSはS3互換のAPIが使えるため、AWS CLIを使用して操作できます。面白いので今回はそれでやってみます。
まずAWS CLIの設定から行います。
% aws configure --profile local AWS Access Key ID [None]: XXXXXXXXX AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Default region name [None]: Default output format [None]:
lakeFSクイックスタート環境のリポジトリの確認を行います。
% aws --endpoint-url=http://localhost:8000 --profile local s3 ls 2022-07-06 16:33:04 quickstart
PC上の「smokeymonkey.txt」というファイルをアップロードします。
% aws --endpoint-url=http://localhost:8000 --profile local s3 cp ./smokeymonkey.txt s3://quickstart/main/ upload: ./smokeymonkey.txt to s3://quickstart/main/smokeymonkey.txt
アップロードされていることを確認します。
% aws --endpoint-url=http://localhost:8000 --profile local s3 ls quickstart/main/ 2022-07-06 16:40:11 10 smokeymonkey.txt
当然GUIでも確認できます。
lakectlコマンドをインストールする
コマンドラインでlakeFSを操作するために、lakectlコマンドをインストールします。最新のリリースから、自環境に合わせてダウンロードします。今回はlakeFS_0.68.0_Darwin_x86_64.tar.gzをダウンロードしました。
ダウンロードしたファイルを展開します。
% tar xvzf lakeFS_0.68.0_Darwin_x86_64.tar.gz x CHANGELOG.md x LICENSE x README.md x lakefs x lakectl
展開されたファイルのうちlakectlを、/usr/local/binに移動します。
% mv lakectl /usr/local/bin % ls -alF /usr/local/bin/lakectl -rwxr-xr-x@ 1 sasaki.daisuke staff 44360704 6 21 18:59 /usr/local/bin/lakectl* % which lakectl /usr/local/bin/lakectl
lakectlの初期設定を行います。事前に.lakectl.yamlを配置しているため、特に設定の必要がないはずなので、確認のみです。
% lakectl config Config file /Users/smokeymonkey/.lakectl.yaml will be used ✔ Access key ID: XXXXXXXXXX Secret access key: **************************************** Server endpoint URL: http://127.0.0.1:8000/api/v1
なお、この「開発元を検証できないため開けません。」が表示された場合は...
Macの[セキュリティとプライバシー]から[このまま許可]をクリックします。
lakectlコマンドを使ってみる
まずはリポジトリのブランチを確認します。この時点ではmainのみです。
% lakectl branch list lakefs://quickstart +--------+------------------------------------------------------------------+ | BRANCH | COMMIT ID | +--------+------------------------------------------------------------------+ | main | 9acf87df77c11e2b5f2e87d09627e4399619253c1f45f29f3186ad6925eb8d89 | +--------+------------------------------------------------------------------+
先程ファイルを1つアップロードしているので、mianブランチをコミットします。
% lakectl commit lakefs://quickstart/main -m 'added my first file!' Branch: lakefs://quickstart/main Commit for branch "main" completed. ID: 4b2255fc3d7e7ad4481dd2049b340650ee526171162e2b3639ec6c8c8cb9ea8c Message: added my first file! Timestamp: 2022-07-06 17:00:19 +0900 JST Parents: 9acf87df77c11e2b5f2e87d09627e4399619253c1f45f29f3186ad6925eb8d89
ログを確認します。コミットされたログがあります。
% lakectl log lakefs://quickstart/main ID: 4b2255fc3d7e7ad4481dd2049b340650ee526171162e2b3639ec6c8c8cb9ea8c Author: smokeymonkey Date: 2022-07-06 17:00:19 +0900 JST added my first file! ID: 9acf87df77c11e2b5f2e87d09627e4399619253c1f45f29f3186ad6925eb8d89 Date: 2022-07-06 16:33:04 +0900 JST Repository created
new-branchという名前の新しいブランチを作成します。
% lakectl branch create lakefs://quickstart/new-branch -s lakefs://quickstart/main Source ref: lakefs://quickstart/main created branch 'new-branch' 4b2255fc3d7e7ad4481dd2049b340650ee526171162e2b3639ec6c8c8cb9ea8c % lakectl branch list lakefs://quickstart +------------+------------------------------------------------------------------+ | BRANCH | COMMIT ID | +------------+------------------------------------------------------------------+ | main | 4b2255fc3d7e7ad4481dd2049b340650ee526171162e2b3639ec6c8c8cb9ea8c | | new-branch | 4b2255fc3d7e7ad4481dd2049b340650ee526171162e2b3639ec6c8c8cb9ea8c | +------------+------------------------------------------------------------------+
new-branchにもう1つファイルをアップロードしてみます。
% aws --endpoint-url=http://localhost:8000 --profile local s3 cp ./smokeymonkey-new.txt s3://quickstart/new-branch/ upload: ./smokeymonkey-new.txt to s3://quickstart/new-branch/smokeymonkey-new.txt % aws --endpoint-url=http://localhost:8000 --profile local s3 ls quickstart/new-branch/ 2022-07-06 17:08:12 10 smokeymonkey-new.txt 2022-07-06 16:40:11 10 smokeymonkey.txt
new-branchをコミットします。
% lakectl commit lakefs://quickstart/new-branch -m 'added nw file' Branch: lakefs://quickstart/new-branch Commit for branch "new-branch" completed. ID: 3fa915b69ac999299dbd5b235cce8a4e9eb0c91c2254b89c67532e9aceae748f Message: added nw file Timestamp: 2022-07-06 17:10:09 +0900 JST Parents: 4b2255fc3d7e7ad4481dd2049b340650ee526171162e2b3639ec6c8c8cb9ea8c
new-branchをmainにマージします。
% lakectl merge lakefs://quickstart/new-branch lakefs://quickstart/main Source: lakefs://quickstart/new-branch Destination: lakefs://quickstart/main Merged "new-branch" into "main" to get "51d2156d87040ff0dc731a2e737b34ad366b53d94bbb478bd2a5c609408b7669".%
mainにも新しいファイルが追加されていることを確認します。
% aws --endpoint-url=http://localhost:8000 --profile local s3 ls quickstart/main/ 2022-07-06 17:08:12 10 smokeymonkey-new.txt 2022-07-06 16:40:11 10 smokeymonkey.txt
ここでrevertし、マージを無かったことにします。
% lakectl branch revert lakefs://quickstart/main 3fa915b69ac999299dbd5b235cce8a4e9eb0c91c2254b89c67532e9aceae748f Branch: lakefs://quickstart/main Are you sure you want to revert the effect of commits 3fa915b69ac999299dbd5b235cce8a4e9eb0c91c2254b89c67532e9aceae748f: y commit 3fa915b69ac999299dbd5b235cce8a4e9eb0c91c2254b89c67532e9aceae748f successfully reverted mainにもマージされていた新しいファイルが無いことを確認します。 % aws --endpoint-url=http://localhost:8000 --profile local s3 ls quickstart/main/ 2022-07-06 16:40:11 10 smokeymonkey.txt
さいごに
データレイクをgitライクに操作出来ることで操作にかかる負担が少なくなるし、冒頭に記載したとおりデータレイクの実体がどのサービスなのかを意識することなく、統一した操作を行うことができます。とても実用的なサービスだと感じました。