駆け出しアーキテクトのやまぱんです。
先週 GA(General Available= 一般提供) になった BlobFuse の改良版である 新機能の BlobFuse2 環境を今回構築しましたので手順をメモします。
BlobFuse は Azure Blob Storage 用の仮想ファイル システム ドライバーです。 BlobFuse を使用して、Linux ファイル システムで既存の Azure ブロック BLOB データにアクセスします。
BlobFuse2 は、libfuse オープンソース ライブラリ (fuse3) を使用して Linux FUSE カーネル モジュールと通信するオープンソース プロジェクトです。 BlobFuse2 では、Azure Storage REST API を使用してファイル システム操作を実装します。
なお、今回は Azure VM 上の Linux (Ubuntu) VM を用いて環境を作成しましたが、 Azure 環境上のLinux以外でも可能なはずです。
2022/12/05 現在 日本語版のページは反映が遅れているためプレビュー表記のままです。
(そのうちきっと外れるはずッ!)
日本語版 https://learn.microsoft.com/ja-JP/azure/storage/blobs/blobfuse2-what-is
英語版 https://learn.microsoft.com/en-US/azure/storage/blobs/blobfuse2-what-is
今回利用した参考まとめページ
機能強化ポイント
- git clone」操作が25%高速化(vscodeレポのクローニングでテスト済み)
- ResNet50の画像分類が7~8%高速化(130万画像でテスト)。
- 通常のファイルアップロードが10%高速化
- ディレクトリ内の10億ファイルのリストアップを検証(v1.xでは未対応)。
準備
ストレージ アカウントの準備
ストレージ アカウントの作成
下記の設定でストレージ アカウントを作成
今回は blob を利用します。
ストレージ アカウント情報メモ
下記 をメモしておきます。
- ストレージ アカウント名
- コンテナー名
- エンドポイント URL
- アクセスキー
ストレージ アカウントのコンテナーの作成
Linux OS の Azure VM を作成
ディレクトリ構成
”/home/test-admin” 配下ですべて作業。
下記 2 点はBlobFuse2 のインストール関連 (インストールすれば作成される)
- azure-storage-fuse
- blobfuse2-2.0.0-preview.3-Ubuntu-22.04-x86-64.deb(.1)
下記はそれぞれ作成する
- fuse_temp :キャッシュ用のディレクトリを作成する mkdir ~/fuse_temp
- fusecontainer:マウントするディレクトリを作成する mkdir ~/fusecontainer
- config.yaml :構成ファイル(中身は後ほど記述する) touch ~/config.yaml
BlobFuse2 環境の構築
BlobFuse2 のインストール
root 権限 で下記のURLを参考にコマンドを実行する。
https://learn.microsoft.com/ja-jp/azure/storage/blobs/blobfuse2-how-to-deploy#install-blobfuse2
root 権限で行わない場合下記のような Error Message が発生しました。
$sudo apt-get install libfuse3-dev fuse3
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package fuse3 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
構成ファイル (config.yaml) の作成
下記が必要最低限の記述です。
環境に合わせて適宜変更してください。
また、# 行はコメントです。
Windows で構成ファイルを作成した場合は、dos2unix コマンドを実行してUnix 形式に変換してください。
config.yaml
azstorage:
#Required
type: block
account-name: rgXXXX #ストレージ アカウント名
container: fusetest #ストレージ アカウントのコンテナー名
endpoint: https://rgXXXXX.blob.core.windows.net #ストレージ アカウントの blob エンドポイント URL
mode: key #利用する認証の種類
account-key: o6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX= #ストレージ アカウントのアクセスキー
#Disk cache related configuration
file_cache:
#Required
path: /home/test-admin/fuse_temp #キャッシュフォルダのパスを指定
# 必要な設定項目のみを含んだ最小限の設定ファイル
# 共通設定
allow-other: true
# 使用するコンポーネントのリスト
components:
- libfuse
- azstorage
# Azure Storageの接続設定
azstorage:
type: block
account-name: your_account_name
account-key: your_account_key
container: your_container_name
endpoint: https://your_account_name.blob.core.windows.net
構成ファイルに関しての詳細は下記をご覧ください。下記よりデプロイに最低限必要 (required) なものを抽出したものが上記です。
https://github.com/Azure/azure-storage-fuse/blob/main/setup/baseConfig.yaml
ここから先は主に下記のコマンドを利用します。
現在マウントされていないことを確認
$blobfuse2 mount list
blob container をマウントする
$blobfuse2 mount ~/fusecontainer --config-file=~/config.yaml
すでにマウントされている場合下記のような Error Message がでた。
Mount: error invalid options [argument error: directory is already mounted
構成ファイルの書き方がおかしい場合下記のような Error Message がでた。
test-admin@VM-Ubuntu:~$ blobfuse2 mount ~/fusecontainer --config-file=~/config.yaml
blobfuse2: A new version (2.0.1) is available. Consider upgrading to latest version for bug-fixes & new features.
invalid config file [While parsing config: yaml: unmarshal errors:
line 1: cannot unmarshal !!str account... into map[string]interface {}
マウントされたことを確認
$blobfuse2 mount list
ディレクトリとファイルを作成する
$mkdir test
$echo "hello world" > test/blob.txt
Azure Portal のストレージ アカウント → コンテナーより反映を確認
もちろん削除が反映されることも確認済です。
マウントされたことを確認
$blobfuse2 mount list
アンマウントし、現在マウントされていないことを確認
#アンマウント
sudo blobfuse2 unmount all
#マウント確認
sudo blobfuse2 mount list
最新版について
blobfuse2-2.0.0 は GA 版ですが、すぐにアップデートがあった模様。
https://github.com/Azure/azure-storage-fuse/releases