JindoFuse は、Object Storage Service (OSS) および OSS-HDFS に対して、移植可能なオペレーティングシステムインタフェース (POSIX) を提供します。これにより、OSS バケットまたは OSS-HDFS のパスをローカルディレクトリとしてマウントでき、標準の Linux コマンド — ls、mkdir、cat、cp など — を OSS や OSS-HDFS に対して直接実行できます。
JindoFuse は POSIX 仕様の完全な実装を行っていません。これは、ファイルシステムインタフェースを介して OSS または OSS-HDFS にアクセスするワークロード向けに最適化されています。開始前に、「サポートされる POSIX 操作」セクションを確認し、ご利用のワークロードで必要となる操作がサポートされていることをご確認ください。
前提条件
開始する前に、以下の条件を満たしていることをご確認ください。
JindoSDK のインストールおよび構成
E-MapReduce (EMR) クラスター内:JindoSDK はプリインストール済みです。OSS-HDFS にアクセスするには、EMR V3.42.0 以降、または EMR V5.8.0 以降をご利用ください。
EMR 以外の環境では、最初に JindoSDK をインストールします。「EMR 以外の環境に JindoSDK をデプロイする」をご参照ください。OSS-HDFS にアクセスするには、JindoSDK V4.X 以降が必要です。
必要な FUSE(ユーザー空間ファイルシステム)依存関係のインストール(「依存関係のインストール」をご参照ください)
マウント対象の OSS バケットまたは OSS-HDFS のパス
対象バケットに対する読み取りまたは書き込み権限を持つ有効な Alibaba Cloud 認証情報(AccessKey ID および AccessKey Secret)
依存関係のインストール
EMR V3.44.0 以降、EMR V5.10.0 以降、または JindoSDK V4.6.2 以降を実行するクラスターには、必要な依存関係が既に含まれています。該当するクラスターをお使いの場合は、本セクションをスキップしてください。
それより古いバージョンのクラスターでは、必要な依存関係は JindoSDK のバージョンによって異なります。
JindoSDK 4.5.0 以前 — fuse3 をインストールします。
# CentOS
sudo yum install -y fuse3 fuse3-devel
# Debian
sudo apt install -y fuse3 libfuse3-devJindoSDK 4.5.1 以降 — libfuse 3.7 以降をビルドおよびインストールします。以下のコマンドでは、fuse-3.11 をコンパイルします。
# ビルド依存関係のインストール(Debian の場合:apt install -y pkg-config meson ninja-build)
sudo yum install -y meson ninja-build
# CentOS のみ:devtoolset-8 から新しい C++ コンパイラをインストール
sudo yum install -y scl-utils
sudo yum install -y alinux-release-experimentals
sudo yum install -y devtoolset-8-gcc devtoolset-8-gdb devtoolset-8-binutils devtoolset-8-make devtoolset-8-gcc-c++
sudo su -c "echo 'source /opt/rh/devtoolset-8/enable' > /etc/profile.d/g++.sh"
source /opt/rh/devtoolset-8/enable
sudo ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/local/bin/gcc
sudo ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/local/bin/g++
# libfuse のダウンロードおよびコンパイル
wget https://github.com/libfuse/libfuse/releases/download/fuse-3.11.0/fuse-3.11.0.tar.xz
xz -d fuse-3.11.0.tar.xz
tar xf fuse-3.11.0.tar
cd fuse-3.11.0/
mkdir build; cd build
meson ..
sudo ninja installJindoFuse のマウント
ローカルマウントポイントを作成します。
mkdir -p <mount_point><mount_point>をローカルパス(例:/mnt/oss)に置き換えます。OSS または OSS-HDFS のパスをマウントします。
jindo-fuse <mount_point> -ouri=<oss_path><oss_path>をマッピング対象の OSS または OSS-HDFS のパスに置き換えます。このパスは、バケットのルートディレクトリまたはサブディレクトリ(例:oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir/)のいずれかになります。OSS と OSS-HDFS のマウントコマンドは同一であり、パス内のエンドポイントのみが異なります。このコマンドは、バックグラウンドでデーモンプロセスを起動します。JindoFuse が正常に実行中であることを確認します。
ps -ef | grep jindo-fusejindo-fuseプロセスが期待通りの起動パラメーターとともに一覧表示された場合、マウントはアクティブです。
マウントポイント経由でのファイルアクセス
JindoFuse を /mnt/oss/ にマウントした状態で、標準の Linux コマンドを使用してファイルを操作できます。
# 最上位ディレクトリの内容を一覧表示
ls /mnt/oss/
# ディレクトリを作成
mkdir /mnt/oss/dir1
# ファイルに書き込み
echo "hello world" > /mnt/oss/dir1/hello.txt
# ファイルを読み取り
cat /mnt/oss/dir1/hello.txt
# 出力:hello world
# ディレクトリおよびその内容を削除
rm -rf /mnt/oss/dir1/JindoFuse のアンマウント
マウントポイントをアンマウントするには、以下のコマンドを実行します。
umount <mount_point>または、マウント時に -oauto_unmount オプションを指定します。このオプションを指定すると、jindo-fuse プロセスに SIGINT を送信することで、プロセス終了前に自動的にマウントポイントがアンマウントされます。
killall -9 jindo-fuseサポートされる POSIX 操作
ほとんどの標準的なファイルシステム操作が、OSS および OSS-HDFS の両方で動作します。下記の表には、すべてのサポート対象操作を記載し、OSS と OSS-HDFS の違いをハイライトしています。
| 操作 | 説明 | OSS | OSS-HDFS |
|---|---|---|---|
getattr() | ファイル属性の取得 | サポート | サポート |
mkdir() | ディレクトリの作成 | サポート | サポート |
rmdir() | ディレクトリの削除 | サポート | サポート |
unlink() | ファイルの削除 | サポート | サポート |
rename() | ファイル名の変更 | サポート | サポート |
read() | 逐次読み取り | サポート | サポート |
pread() | ランダム読み取り | サポート | サポート |
write() | 逐次書き込み | サポート | サポート |
pwrite() | ランダム書き込み | 非サポート | サポート |
flush() | データをカーネルキャッシュへフラッシュ | JindoFuse 6.7.0 より前:追加モードのみ。JindoFuse 6.7.0 以降:デフォルトでサポート。「OSS における flush() の動作」をご参照ください。 | サポート |
fsync() | データをディスクへフラッシュ | 追加モードのみ | サポート |
release() | ファイルの解放 | サポート | サポート |
readdir() | ディレクトリの読み取り | サポート | サポート |
create() | ファイルの作成 | サポート | サポート |
open() O_APPEND | 追加モードで開く | サポート。「AppendObject の制限事項」をご参照ください。 | サポート |
open() O_TRUNC | 上書きモードで開く | サポート | サポート |
ftruncate() | オープン中のファイルを切り詰め | 非サポート | サポート |
truncate() | クローズされたファイルを切り詰め | 非サポート | サポート |
lseek() | 読み取り/書き込み位置の設定 | 非サポート | サポート |
chmod() | ファイル権限の変更 | 非サポート | サポート |
access() | ファイル権限の確認 | サポート | サポート |
utimes() | タイムスタンプの変更 | 非サポート | サポート |
setxattr() | 拡張属性の設定 | 非サポート | サポート |
getxattr() | 拡張属性の取得 | 非サポート | サポート |
listxattr() | 拡張属性の一覧表示 | 非サポート | サポート |
removexattr() | 拡張属性の削除 | 非サポート | サポート |
lock() | POSIX ファイルロック | 非サポート | サポート |
fallocate() | ディスク領域の事前割り当て | 非サポート | サポート |
symlink() | シンボリックリンクの作成 | 非サポート | 内部使用のみサポート。キャッシュ加速は非サポート |
readlink() | シンボリックリンクの読み取り | 非サポート | サポート |
高度な使用方法
マウントパラメーター
マウント時にパラメーターを指定することで、JindoFuse の動作を制御できます。マウント時に指定したパラメーターは、構成ファイル内の値よりも優先されます。
jindo-fuse <mount_point> -ouri=[<oss_path>] -ofs.oss.endpoint=[<endpoint>] -ofs.oss.accessKeyId=[<access_key_id>] -ofs.oss.accessKeySecret=[<access_key_secret>]| パラメーター | 必須 | 最低バージョン | 説明 | 例 |
|---|---|---|---|---|
uri | はい | JindoData 4.3.0 | マウント対象の OSS パス(ルートまたはサブディレクトリ) | -ouri=oss://examplebucket/ |
f | いいえ | JindoData 4.3.0 | JindoFuse をデーモンではなく前景で実行します。このオプションを使用する場合は、ターミナルログを有効化してください。 | -f |
d | いいえ | JindoData 4.3.0 | デバッグモードを有効化します(同時に前景実行も有効化されます)。このオプションを使用する場合は、ターミナルログを有効化してください。 | -d |
auto_unmount | いいえ | JindoData 4.3.0 | JindoFuse プロセス終了時にマウントポイントを自動的にアンマウントします | -oauto_unmount |
ro | いいえ | JindoData 4.3.0 | 読み取り専用モードでマウントします。書き込み操作は拒否されます | -oro |
direct_io | いいえ | JindoData 4.3.0 | 読み取りおよび書き込み時にページキャッシュをバイパスします | -odirect_io |
kernel_cache | いいえ | JindoData 4.3.0 | カーネルキャッシュを使用して読み取りパフォーマンスを向上させます | -okernel_cache |
auto_cache | いいえ | JindoData 4.3.0 | 「kernel_cache」と同様ですが、ファイルサイズまたは更新時刻が変更された際にキャッシュを無効化します。デフォルトで有効です。 | — |
entry_timeout | いいえ | JindoData 4.3.0 | ディレクトリエントリ名をキャッシュする時間(秒単位)。デフォルト値:60。キャッシュを無効化するには 0 を設定します。 | -oentry_timeout=60 |
attr_timeout | いいえ | JindoData 4.3.0 | ファイル属性をキャッシュする時間(秒単位)。デフォルト値:60。キャッシュを無効化するには 0 を設定します。 | -oattr_timeout=60 |
negative_timeout | いいえ | JindoData 4.3.0 | 失敗した検索結果をキャッシュする時間(秒単位)。デフォルト値:60。キャッシュを無効化するには 0 を設定します。 | -onegative_timeout=0 |
max_idle_threads | いいえ | JindoData 4.3.0 | カーネルコールバックで使用可能なアイドルスレッド数。デフォルト値:10。 | -omax_idle_threads=10 |
xengine | いいえ | JindoData 4.3.0 | ローカルキャッシュ加速機能を有効化します | -oxengine |
pread | いいえ | JindoData 4.5.1 | 逐次読み取りではなくランダム読み取りを使用します。ランダム読み取りの頻度が逐次読み取りよりはるかに多いワークロードに使用します。 | -opread |
no_symlink | いいえ | JindoData 4.5.1 | シンボリックリンクのサポートを無効化します | -ono_symlink |
no_writeback | いいえ | JindoData 4.5.1 | ライトバックキャッシュを無効化します | -ono_writeback |
no_flock | いいえ | JindoData 4.5.1 | flock ファイルロックの無効化 | -ono_flock |
no_xattr | いいえ | JindoData 4.5.1 | 拡張属性(xattr)のサポートを無効化します | -ono_xattr |
構成パラメーター
これらのパラメーターは、JindoSDK 構成ファイルで設定します。マウント時のパラメーターがこれをオーバーライドします。
| パラメーター | デフォルト値 | 説明 |
|---|---|---|
logger.dir | /tmp/bigboot-log | ログ出力先ディレクトリ。存在しない場合は自動的に作成されます。 |
logger.sync | false | false = ログを非同期で書き込みます |
logger.consolelogger | false | ログをターミナルに出力します |
logger.level | 2 | ログ出力の最小レベル。0=TRACE、1=DEBUG、2=INFO、3=WARN、4=ERROR、5=CRITICAL、6=OFF |
logger.verbose | 0 | 詳細ログ出力の最小レベル(0–99)。0 で詳細ログを無効化します。 |
logger.cleaner.enable | false | 自動ログクリーンアップを有効化します |
fs.oss.endpoint | — | JindoFS へのアクセスに使用するエンドポイント(例:oss-cn-xxx.aliyuncs.com |
fs.oss.accessKeyId | — | JindoFS 用の AccessKey ID |
fs.oss.accessKeySecret | — | JindoFS 用の AccessKey Secret |
よくある質問
エラーの原因を特定するにはどうすればよいですか?
JindoFuse は、オペレーティングシステムが事前に定義したエラーコードしか表示できません。そのため、根本原因の診断には十分な情報が得られないことが多くあります。JindoSDK からの詳細なエラーメッセージを確認するには、jindosdk.log ファイルを確認してください。このファイルは、logger.dir 構成パラメーターで指定されたディレクトリ(デフォルト:/tmp/bigboot-log)に保存されています。
OSS における flush() の動作
OSS 上での flush() の動作は、JindoFuse のバージョンによって異なります。
JindoFuse 6.7.0 より前:
追記モード: ファイルを閉じる (
close()) と、flush()がトリガーされ、バッファーデータがカーネルキャッシュにフラッシュされ、その後AppendObjectを介して OSS に書き込まれます。制限事項については、「AppendObject の制限事項」をご参照ください。その他のモード:
flush()は効果がありません。ファイルを閉じても OSS へデータは書き込まれません。
JindoFuse 6.7.0 以降:
fs.oss.fuse.flush.enable パラメーターはデフォルトで true です。この設定では、以下のように動作します。
flush()は、ファイルを開いたモード(open()、O_APPENDなど)に関係なく、OSS へデータを書き込みます。OSS-HDFS には影響しません。データは
PutObjectまたはマルチパートアップロード(MPU)を使用して書き込まれ、AppendObjectは使用されません。既存のオブジェクトに対して
flush()を呼び出す、または新規オブジェクトに対してflush()を複数回呼び出すと、JindoFuse がデータを再読み取り・再アップロードするため、I/O コストが増加します。
fs.oss.fuse.flush.enable=false を設定することで、追加モードのみの動作へ復元できます。