Object Storage Service (OSS) および OSS-HDFS は、JindoFuse を使用することで移植可能なオペレーティングシステムインタフェース (POSIX) をサポートしています。 これにより、OSS および OSS-HDFS 内のファイルをローカルファイルシステムにマウントできるため、ローカルファイルシステム内のファイルを管理するのと同じように、OSS および OSS-HDFS 内のファイルを管理できます。
環境の準備
- E-MapReduce (EMR) 環境では、JindoSDK がデフォルトでインストールされており、直接使用できます。 説明 OSS-HDFS にアクセスするには、EMR V3.42.0 以降のマイナーバージョンのクラスタ、または EMR V5.8.0 以降のマイナーバージョンのクラスタを作成する必要があります。
- EMR 以外の環境では、最初に JindoSDK をインストールします。 詳細については、「EMR 以外の環境に JindoSDK をデプロイする」をご参照ください。 説明 OSS-HDFS にアクセスするには、JindoSDK V4.X 以降をインストールする必要があります。
必要な依存関係をインストールする
- EMR V3.44.0 以降のマイナーバージョンのクラスタ、または EMR V5.10.0 以降のマイナーバージョンのクラスタ
- JindoSDK V4.6.2 以降がデプロイされているクラスタ
- クラスタで JindoSDK 4.5.0 以前を使用している場合は、次の依存関係をインストールする必要があります。
# CentOS sudo yum install -y fuse3 fuse3-devel # Debian sudo apt install -y fuse3 libfuse3-dev - クラスタで JindoSDK 4.5.1 以降を使用している場合は、libfuse 3.7 以降をインストールする必要があります。
たとえば、次のコマンドを実行して fuse-3.11 をインストールします。
# build fuse required meson & ninja, for debian: apt install -y pkg-config meson ninja-build sudo yum install -y meson ninja-build # compile fuse required newer g++ (only CentOS) 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++ # compile & install 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 install
JindoFuse をマウントする
次のコマンドを実行して、マウントポイントを作成します。
mkdir -p <mount_point><mount_point>の値をローカルパスに置き換えます。 例:/mnt/oss/。次のコマンドを実行して、JindoFuse をマウントします。
jindo-fuse <mount_point> -ouri=<oss_path><oss_path>の値を、マップする OSS または OSS-HDFS パスに置き換えます。 パスは、OSS または OSS-HDFS バケットのルートディレクトリまたはサブディレクトリです。 例:oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir /。コマンドを実行すると、デーモンプロセスがバックグラウンドで開始され、指定された OSS または OSS-HDFS パスがローカルファイルシステムの指定されたマウントポイントにマウントされます。
説明OSS パスと OSS-HDFS パスのマウント方法は基本的に同じです。 パス内のエンドポイントだけが異なります。
次のコマンドを実行して、JindoFuse がマウントされているかどうかを確認します。
ps -ef | grep jindo-fusejindo-fuse プロセスが存在し、起動パラメーターが想定どおりである場合、JindoFuse はマウントされています。
JindoFuse にアクセスする
JindoFS がローカルパス /mnt/oss/ にマウントされている場合は、次のコマンドを実行して JindoFuse にアクセスします。
/mnt/oss/ パス内のすべてのディレクトリを表示する
ls /mnt/oss/ディレクトリを作成する
mkdir /mnt/oss/dir1ファイルにデータを書き込む
echo "hello world" > /mnt/oss/dir1/hello.txtファイルからデータを読み取る
cat /mnt/oss/dir1/hello.txthello worldが表示されます。ディレクトリを削除する
rm -rf /mnt/oss/dir1/
JindoFuse をアンインストールする
JindoFuse がマウントされているマウントポイントをアンマウントするには、次のコマンドを実行します。
umount <mount_point>-oauto_unmount パラメーターを指定して、マウントポイントを自動的にアンマウントすることもできます。 このパラメーターを使用する場合は、killall -9 jindo-fuse コマンドを実行して、jindo-fuse プロセスに SIGINT を送信できます。 プロセスが終了する前に、マウントポイントは自動的にアンマウントされます。
サポートされている POSIX ベースの API 操作
次の表に、JindoFuse でサポートされている POSIX ベースの API 操作を示します。
操作 | 説明 | OSS | OSS-HDFS |
getattr() | ファイル属性をクエリします。 | サポートされています。 | サポートされています。 |
mkdir() | ディレクトリを作成します。 | サポートされています。 | サポートされています。 |
rmdir() | ディレクトリを削除します。 | サポートされています。 | サポートされています。 |
unlink() | ファイルを削除します。 | サポートされています。 | サポートされています。 |
rename() | ファイルの名前を変更します。 | サポートされています。 | サポートされています。 |
read() | データを順番に読み取ります。 | サポートされています。 | サポートされています。 |
pread() | データをランダムに読み取ります。 | サポートされています。 | サポートされています。 |
write() | データを順番に書き込みます。 | サポートされています。 | サポートされています。 |
pwrite() | データをランダムに書き込みます。 | サポートされていません。 | サポートされています。 |
flush() | メモリからカーネルキャッシュにデータをフラッシュします。 |
詳細については、「ファイルを閉じた後、データが OSS に書き込まれたかどうかを確認するにはどうすればよいですか?」をご参照ください。 | サポートされています。 |
fsync() | メモリからディスクにデータをフラッシュします。 | 追加モードを使用して開かれたファイルのみがサポートされています。 | サポートされています。 |
release() | ファイルを解放します。 | サポートされています。 | サポートされています。 |
readdir() | ディレクトリを読み取ります。 | サポートされています。 | サポートされています。 |
create() | ファイルを作成します。 | サポートされています。 | サポートされています。 |
open() O_APPEND | 追加モードを使用してファイルを開きます。 | サポートされています。 この API 操作の呼び出しに関する制限事項については、AppendObject トピックの「制限」セクションをご参照ください。 | サポートされています。 |
open() O_TRUNC | 上書きモードを使用してファイルを開きます。 | サポートされています。 | サポートされています。 |
ftruncate() | 開いているファイルをトランケートします。 | サポートされていません。 | サポートされています。 |
truncate() | 開いていないファイルをトランケートします。 | サポートされていません。 | サポートされています。 |
lseek() | 開いているファイル内の読み取りおよび書き込み場所を指定します。 | サポートされていません。 | サポートされています。 |
chmod() | ファイルの権限を変更します。 | サポートされていません。 | サポートされています。 |
access() | ファイルの権限をクエリします。 | サポートされています。 | サポートされています。 |
utimes() | ファイルが保存および変更された時刻を変更します。 | サポートされていません。 | サポートされています。 |
setxattr() | ファイルの拡張属性を変更します。 | サポートされていません。 | サポートされています。 |
getxattr() | ファイルの拡張属性をクエリします。 | サポートされていません。 | サポートされています。 |
listxattr() | ファイルの拡張属性をクエリします。 | サポートされていません。 | サポートされています。 |
removexattr() | ファイルの拡張属性を削除します。 | サポートされていません。 | サポートされています。 |
lock() | POSIX ロックをサポートします。 | サポートされていません。 | サポートされています。 |
fallocate() | ファイルに物理空間を事前に割り当てます。 | サポートされていません。 | サポートされています。 |
symlink() | シンボリックリンクを作成します。 | サポートされていません。 | OSS-HDFS での内部使用のみにサポートされています。 キャッシュの高速化はサポートされていません。 |
readlink() | シンボリックリンクを読み取ります。 | サポートされていません。 | サポートされています。 |
高度な使用方法
次の表に、マウント関連のパラメーターを示します。
パラメーター | 必須 | JindoData バージョン | 説明 | 例 |
uri | はい | JindoData 4.3.0 以降 | マップする OSS パスを構成します。 パスは、ルートディレクトリまたはサブディレクトリです。 例:oss://examplebucket/ または oss://examplebucket/subdir。 |
|
f | いいえ | JindoData 4.3.0 以降 | JindoFuse プロセスをフォアグラウンドで開始します。 デフォルトでは、デーモンプロセスを使用して JindoFuse プロセスをバックグラウンドで開始します。 このパラメーターを有効にする場合は、端末ログも有効にすることをお勧めします。 |
|
d | いいえ | JindoData 4.3.0 以降 | デバッグモードを有効にします。 デバッグモードを有効にすると、JindoFuse プロセスはフォアグラウンドで開始されます。 このパラメーターを有効にする場合は、端末ログも有効にすることをお勧めします。 |
|
auto_unmount | いいえ | JindoData 4.3.0 以降 | JindoFuse プロセスの終了後に、マウントポイントを自動的にアンマウントします。 |
|
ro | いいえ | JindoData 4.3.0 以降 | JindoFS サービスから読み取り専用モードでファイルをマウントします。 このパラメーターを有効にすると、書き込み操作を実行できません。 |
|
direct_io | いいえ | JindoData 4.3.0 以降 | このパラメーターを有効にすると、ファイルの読み取りと書き込みでページキャッシュをバイパスできます。 |
|
kernel_cache | いいえ | JindoData 4.3.0 以降 | このパラメーターを有効にすると、カーネルキャッシュを使用して読み取りパフォーマンスが最適化されます。 |
|
auto_cache | いいえ | JindoData 4.3.0 以降 | このパラメーターと kernel_cache パラメーターのいずれかを構成します。 このパラメーターは、ファイルサイズまたは変更時刻が変更された場合にキャッシュが無効になるという点で、kernel_cache パラメーターとは異なります。 デフォルトでは、このパラメーターは有効になっています。 | なし |
entry_timeout | いいえ | JindoData 4.3.0 以降 | 読み取られるキャッシュされたファイル名の保存期間(秒単位)。 このパラメーターは、パフォーマンスを最適化するために使用されます。 デフォルト値:60。 値 0 は、ファイル名がキャッシュされないことを指定します。 |
|
attr_timeout | いいえ | JindoData 4.3.0 以降 | キャッシュされたファイル属性の保存期間(秒単位)。 このパラメーターは、パフォーマンスを最適化するために使用されます。 デフォルト値:60。 値 0 は、ファイル属性がキャッシュされないことを指定します。 |
|
negative_timeout | いいえ | JindoData 4.3.0 以降 | 読み取りに失敗したキャッシュされたファイル名の保存期間(秒単位)。 このパラメーターは、パフォーマンスを最適化するために使用されます。 デフォルト値:60。 値 0 は、ファイル名がキャッシュされないことを指定します。 |
|
max_idle_threads | いいえ | JindoData 4.3.0 以降 | カーネルコールバックの処理に使用できるアイドルスレッドの数。 デフォルト値:10。 |
|
xengine | いいえ | JindoData 4.3.0 以降 | キャッシュ機能を有効にします。 |
|
pread | いいえ | JindoData 4.5.1 以降 | デフォルトでは、シーケンシャルリードが使用されます。 このパラメーターを有効にすると、シーケンシャルリードではなくランダムリードが使用されます。 このパラメーターは、ランダムリードの数がシーケンシャルリードの数よりもはるかに多いシナリオに適しています。 |
|
no_symlink | いいえ | JindoData 4.5.1 以降 | シンボリックリンク機能を無効にします。 |
|
no_writeback | いいえ | JindoData 4.5.1 以降 | ライトバック機能を無効にします。 |
|
no_flock | いいえ | JindoData 4.5.1 以降 | flock 機能を無効にします。 |
|
no_xattr | いいえ | JindoData 4.5.1 以降 | 拡張属性機能を無効にします。 |
|
次の表に、関連する構成パラメーターを示します。
パラメーター | デフォルト値 | 説明 |
logger.dir | /tmp/bigboot-log | ログディレクトリ。 指定されたログディレクトリが存在しない場合は、自動的に作成されます。 |
logger.sync | false | ログを同期してエクスポートするかどうかを指定します。 false の値は、ログが非同期にエクスポートされることを指定します。 |
logger.consolelogger | false | 端末ログを表示するかどうかを指定します。 |
logger.level | 2 | レベルがこのパラメーターの値以上であるログを表示します。 有効な値:
|
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 シークレット。 |
JindoFuse をマウントするときに、JindoSDK 構成パラメーターとマウント関連のパラメーターの両方を指定できます。 指定されたパラメーターは、構成ファイル内のパラメーターよりも優先順位が高くなければなりません。 例:
jindo-fuse <mount_point> -ouri=[<oss_path>] -ofs.oss.endpoint=[<YOUR_ENDPOINT>] -ofs.oss.accessKeyId=[<YOUR_KEY_ID>] -ofs.oss.accessKeySecret=[<YOUR_KEY_SECRET>]FAQ
JindoFuse を使用しているときに、エラーの原因を特定するにはどうすればよいですか?
JindoSDK は、API 操作の呼び出し時にエラーが発生した場合に、特定のエラーメッセージを返すことができます。 ただし、JindoFuse は、オペレーティングシステムによってプリセットされているエラーメッセージのみを表示できます。 エラーの原因を特定するには、JindoSDK の jindosdk.loglogger.dir 構成パラメーターで指定されたパスにある ファイルを表示します。