すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:JindoFuse のユーザーガイド

最終更新日:Feb 26, 2025

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-fuse

    jindo-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.txt

    hello 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()

メモリからカーネルキャッシュにデータをフラッシュします。

  • JindoFuse 6.7.0 より前のバージョン:追加モードを使用して開かれたファイルのみがサポートされています。

  • JindoFuse 6.7.0 以降:デフォルトでサポートされています。

詳細については、「ファイルを閉じた後、データが 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。

-ouri=oss://examplebucket/

f

いいえ

JindoData 4.3.0 以降

JindoFuse プロセスをフォアグラウンドで開始します。 デフォルトでは、デーモンプロセスを使用して JindoFuse プロセスをバックグラウンドで開始します。 このパラメーターを有効にする場合は、端末ログも有効にすることをお勧めします。

-f

d

いいえ

JindoData 4.3.0 以降

デバッグモードを有効にします。 デバッグモードを有効にすると、JindoFuse プロセスはフォアグラウンドで開始されます。 このパラメーターを有効にする場合は、端末ログも有効にすることをお勧めします。

-d

auto_unmount

いいえ

JindoData 4.3.0 以降

JindoFuse プロセスの終了後に、マウントポイントを自動的にアンマウントします。

-oauto_unmount

ro

いいえ

JindoData 4.3.0 以降

JindoFS サービスから読み取り専用モードでファイルをマウントします。 このパラメーターを有効にすると、書き込み操作を実行できません。

-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 パラメーターのいずれかを構成します。 このパラメーターは、ファイルサイズまたは変更時刻が変更された場合にキャッシュが無効になるという点で、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 以降

拡張属性機能を無効にします。

-ono_xattr

次の表に、関連する構成パラメーターを示します。

パラメーター

デフォルト値

説明

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 シークレット。

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 構成パラメーターで指定されたパスにある ファイルを表示します。

オブジェクトを閉じた後、データが OSS に書き込まれたかどうかを確認するにはどうすればよいですか?

  • JindoFuse 6.7.0 より前のバージョン:

    • 追加モード:オブジェクトが追加モードで開かれている場合、オブジェクトを閉じるために close() 操作を実行すると、flush() 操作がトリガーされます。 この場合、データはバッファーからカーネルキャッシュにフラッシュされ、その後 OSS に書き込まれます。 このモードでは、AppendObject を呼び出すことによって、オブジェクトにデータが書き込まれます。 操作の制限については、「AppendObject」をご参照ください。

    • 追加モード以外のモード:オブジェクトが追加モードで開かれていない場合、flush() 操作は有効になりません。 この場合、close() 操作を実行した後、データは OSS に書き込まれません。

  • JindoFuse 6.7.0 以降:

    • デフォルトでは、 fs.oss.fuse.flush.enable パラメーターは true に設定されています。 flush() 操作は、OSS-HDFS に影響を与えることなく、OSS にデータを書き込むためにサポートされています。

    • データは、appendObject 操作以外の PutObject または MPU を使用して OSS に書き込まれます。オブジェクトが open()O_APPEND、またはその他のモードを使用して開かれているかどうかは関係ありません。 この場合、flush() は、書き込まれたデータを読み取って OSS に書き込むために使用されます。 ただし、これにより、次のシナリオでは I/O コストが増加します。

      • 既存のオブジェクトに対して flush() 操作を実行する

      • 新しいオブジェクトに対して flush() 操作を 2 回実行する

    • fs.oss.fuse.flush.enable パラメーターを false に設定すると、flush() 操作は、オブジェクトが追加モードで開かれている場合にのみサポートされます。