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

Object Storage Service:JindoFuse を使用して OSS-HDFS にアクセスする

最終更新日:Apr 01, 2025

OSS-HDFS をローカルファイルシステムにマップし、標準 HDFS API を呼び出して OSS-HDFS 内のオブジェクトにアクセスし、オブジェクトの読み取り、書き込み、削除などの操作を実行する場合、JindoFuse を使用して OSS-HDFS にアクセスできます。 JindoFuse は、オープンソースの分散ファイルシステムへのアクセスを可能にするツールであり、POSIX と互換性があります。 JindoFuse を使用すると、AI アプリケーションは OSS-HDFS をデータストレージと処理に直接使用できます。

前提条件

OSS-HDFS がバケットで有効になっており、OSS-HDFS にアクセスするための権限が付与されています。 詳細については、「OSS-HDFS を有効にする」をご参照ください。

準備

次のいずれかの方法を使用して OSS-HDFS にアクセスできます。

  • Alibaba Cloud EMR クラスタを使用して OSS-HDFS にアクセスする場合は、バージョン 3.44.0 以降または 5.10.0 以降の EMR クラスタが作成されていることを確認してください。 前述の要件を満たす EMR クラスタには、デフォルトで JindoFuse が統合されています。 詳細については、「クラスタを作成する」をご参照ください。

  • Alibaba Cloud EMR クラスタを使用せずに OSS-HDFS にアクセスする場合は、JindoSDK 4.6.2 以降がインストールおよびデプロイされていることを確認してください。 詳細については、「EMR 以外の環境に JindoSDK をデプロイする」をご参照ください。

手順

  1. 環境変数を構成します。

    • Alibaba Cloud EMR クラスタを使用して OSS-HDFS にアクセスする場合は、この手順をスキップして 手順 2 に進んでください。

    • Alibaba Cloud EMR クラスタを使用せずに OSS-HDFS にアクセスする場合は、次の手順を実行して JindoFuse を構成します。

      1. ECS インスタンスに接続します。 詳細については、「インスタンスに接続する」をご参照ください。

      2. 環境変数を変更します。

        この例では、jindosdk-x.x.x は root/ パスにインストールされています。 x.x.x は JindoSDK のバージョン番号を示します。 JindoSDK がインストールされている実際のパスに基づいて環境変数を変更してください。

        export JINDOSDK_HOME=/root/jindosdk-x.x.x
        export HADOOP_CLASSPATH=`hadoop classpath`:${JINDOSDK_HOME}/lib/*
        export JINDOSDK_CONF_DIR=/root/jindosdk-x.x.x/conf
        export PATH=$PATH:$JINDOSDK_HOME/bin
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${JINDOSDK_HOME}/lib/native
      3. 構成ファイルを構成します。

        1. JindoSDK の conf/ ディレクトリに jindosdk.cfg という名前の構成ファイルを作成します。

        2. jindosdk.cfg 構成ファイルに次の設定項目を追加します。

          [common]
          logger.dir = /tmp/fuse-log
          
          [jindosdk]
          <!-- この例では、中国 (杭州) リージョンが使用されています。 実際のリージョンを指定してください。 -->
          fs.oss.endpoint = cn-hangzhou.oss-dls.aliyuncs.com
          <! -- OSS-HDFS へのアクセスに使用する AccessKey ID と AccessKey Secret を構成します。 -->
          fs.oss.accessKeyId = LTAI****************   
          fs.oss.accessKeySecret = yourAccessKeySecret
  2. OSS-HDFS をマウントします。

    1. 次のコマンドを実行してマウントポイントを作成します。

      mkdir -p <mount-point>
    2. 次のコマンドを実行して OSS-HDFS をマウントします。

      jindo-fuse <mount_point> -ouri=[<oss_path>]

      -ouri は、マップする dls パスに設定する必要があります。 パスは、バケットのルートディレクトリまたはサブディレクトリです。 コマンドを実行すると、バックグラウンドのデーモンプロセスが起動し、指定した <oss_path> がローカルファイルシステムのマウントポイントにマウントされます。 マウントポイントは <mount_point> で指定されます。

      OSS-HDFS をマウントするときに構成できるマウントオプションの詳細については、「付録 2: マウントオプション」をご参照ください。

    3. 次のコマンドを実行して、OSS-HDFS がマウントされているかどうかを確認します。

      ps -ef | grep jindo-fuse

      次の結果が返された場合、OSS-HDFS はマウントされています。

      root      2162     1  0 13:21 ?        00:00:00 jindo-fuse <mount_point> -ouri=[<oss_path>]
      root      2714  2640  0 13:39 pts/0    00:00:00 grep --color=auto jindo-fuse
  3. JindoFuse を使用して、OSS-HDFS 内のオブジェクトに対して読み取りおよび書き込み操作を実行します。

    • ディレクトリを作成する

      mkdir /mnt/oss/dir1
    • /mnt/oss/ ディレクトリ内のすべてのサブディレクトリを一覧表示する

      ls /mnt/oss/
    • オブジェクトを書き込む

      echo "hello world" > /mnt/oss/dir1/hello.txt
    • オブジェクトを読み取る

      cat /mnt/oss/dir1/hello.txt
    • ディレクトリを削除する

      rm -rf /mnt/oss/dir1/
  4. オプション。 OSS-HDFS のマウントを解除します。

    次のいずれかの方法を使用して、OSS-HDFS のマウントを解除できます。

    • OSS-HDFS のマウントを手動で解除する

      umount <mount_point>
    • OSS-HDFS のマウントを自動的に解除する

      -oauto_unmount

      上記のコマンドを実行して、killall -9 jindo-fuse を使用して jindo-fuse プロセスに SIGINT を送信できます。 OSS-HDFS は、プロセスが終了する前に自動的にマウント解除されます。

FAQ

JindoFuse エラーのトラブルシューティング方法は?

JindoSDK を使用して API 操作を呼び出す場合、エラーが報告されたときにエラーメッセージの詳細を表示できます。 JindoFuse を使用する場合、オペレーティングシステムのプリセットエラーメッセージのみを表示できます。

ls: /mnt/oss/: 入出力エラー

エラーの原因を特定するには、JindoSDK の logger.dir 設定項目で指定されたパスにある jindosdk.log ファイルを見つける必要があります。 次のメッセージは、JindoFuse を使用するときに表示される可能性のある一般的な認証エラーメッセージです。

EMMDD HH:mm:ss jindofs_connectivity.cpp:13] エンドポイント/バケット/ロール ARN を確認してください。
接続テストに失敗しました。操作: mkdir、エラーメッセージ: [リクエスト ID]: 618B8183343EA53531C62B74 [ホスト ID]: oss-cn-shanghai-internal.aliyuncs.com [エラーメッセージ]: [E1010]HTTP/1.1 403 Forbidden ...

上記のエラーメッセージが表示された場合は、エンドポイント、バケット、およびロール ARN が正しく構成されているかどうかを確認してください。 詳細については、「EMR 以外のクラスタを OSS-HDFS に接続する」をご参照ください。

プログラムエラーが発生した場合は、チケットを送信 してください。

付録 1: サポートされている操作

次の表は、JindoFuse でサポートされている POSIX ベースの API 操作を示しています。

操作

説明

getattr()

オブジェクトの属性をクエリします。 この操作は ls コマンドに似ています。

mkdir()

ディレクトリを作成します。 この操作は mkdir コマンドに似ています。

rmdir()

ディレクトリを削除します。 この操作は rm -rf コマンドに似ています。

unlink()

オブジェクトを削除します。 この操作は unlink コマンドに似ています。

rename()

オブジェクトまたはディレクトリの名前を変更します。 この操作は mv コマンドに似ています。

read()

データを順番に読み取ります。

pread()

データをランダムに読み取ります。

write()

データを順番に書き込みます。

pwrite()

データをランダムに書き込みます。

flush()

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

fsync()

メモリからディスクにデータをフラッシュします。

release()

オブジェクトを閉じます。

readdir()

ディレクトリを読み取ります。

create()

オブジェクトを作成します。

open() O_APPEND

追加モードでオブジェクトを開きます。

open() O_TRUNC

上書きモードでオブジェクトを開きます。

ftruncate()

開いているオブジェクトを切り詰めます。

truncate()

閉じているオブジェクトを切り詰めます。 この操作は truncate -s コマンドに似ています。

lseek()

開いているオブジェクトの読み取りおよび書き込み場所を指定します。

chmod()

オブジェクトの権限を変更します。 この操作は chmod コマンドに似ています。

access()

オブジェクトの権限をクエリします。

utimes()

オブジェクトが保存および変更された時点を変更します。

setxattr()

オブジェクトの xattr 属性を変更します。

getxattr()

オブジェクトの xattr 属性をクエリします。

listxattr()

オブジェクトの xattr 属性を一覧表示します。

removexattr()

オブジェクトの xattr 属性を削除します。

lock()

POSIX ロックをサポートします。 この操作は fcntl コマンドに似ています。

fallocate()

オブジェクトに物理空間を事前に割り当てます。

symlink()

シンボリックリンクを作成します。 シンボリックリンクは OSS-HDFS でのみ使用可能であり、キャッシュアクセラレーションはサポートしていません。

readlink()

シンボリックリンクを読み取ります。

付録 2: マウントオプション

次の表は、JindoFuse を使用して OSS-HDFS からローカルファイルシステムにオブジェクトをマウントするために構成できるオプションを示しています。

オプション

必須

説明

uri

はい

マップする dls パス。 パスは、-ouri=oss://bucket.endpoint/ などのバケットのルートディレクトリです。 -ouri=oss://bucket.endpoint/subdir などのバケットのサブディレクトリにすることもできます。

-ouri=oss://examplebucket.cn-beijing.oss-dls.aliyuncs.com/

f

いいえ

JindoFuse プロセスを起動します。 デフォルトでは、デーモンプロセスを使用してバックグラウンドで JindoFuse プロセスが起動されます。 このオプションを使用する場合は、端末ログを有効にすることをお勧めします。

-f

d

いいえ

デバッグモードを有効にします。 デバッグモードを有効にすると、JindoFuse プロセスがフォアグラウンドで起動します。 このオプションを使用する場合は、端末ログを有効にすることをお勧めします。

-d

auto_unmount

いいえ

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

-oauto_unmount

ro

いいえ

読み取り専用モードで OSS-HDFS からオブジェクトをマウントします。 このオプションを有効にした後、書き込み操作を実行することはできません。

-oro

direct_io

いいえ

ページキャッシュなしでオブジェクトの読み取りと書き込みを許可します。

-odirect_io

kernel_cache

いいえ

カーネルキャッシュを使用して読み取りパフォーマンスを最適化します。

-okernel_cache

auto_cache

いいえ

デフォルトで自動キャッシュを有効にします。 kernel-cache とは異なり、auto-cache は、オブジェクトサイズまたはオブジェクトが変更された時間が変更された場合に、キャッシュの自動フラッシュを有効にします。

-oauto_cache

entry_timeout

いいえ

オブジェクトが読み取られたときのキャッシュ内のオブジェクト名の保存期間。 単位: 秒。 このオプションは、パフォーマンスを最適化するために使用されます。 値 0 は、オブジェクト名がキャッシュされないことを指定します。 デフォルト値:0.1。

-oentry_timeout=60

attr_timeout

いいえ

キャッシュ内のオブジェクト属性の保存期間。 単位: 秒。 このオプションは、パフォーマンスを最適化するために使用されます。 値 0 は、オブジェクト属性がキャッシュされないことを指定します。 デフォルト値: 0.1。

-oattr_timeout=60

negative_timeout

いいえ

オブジェクトの読み取りに失敗した場合のキャッシュ内のオブジェクト名の保存期間。 単位: 秒。 このオプションは、パフォーマンスを最適化するために使用されます。 値 0 は、オブジェクト名がキャッシュされないことを指定します。 デフォルト値: 0.1。

-onegative_timeout=0

jindo_entry_size

いいえ

キャッシュされるディレクトリの数。 このオプションは、readdir パフォーマンスを最適化するために使用されます。 値 0 は、ディレクトリがキャッシュされないことを示します。 デフォルト値: 5000。

-ojindo_entry_size=5000

jindo_attr_size

いいえ

キャッシュされるオブジェクト属性の数。 このオプションは、getattr パフォーマンスを最適化するために使用されます。 値 0 は、オブジェクト属性がキャッシュされないことを指定します。 デフォルト値: 50000。

-ojindo_attr_sizet=50000

max_idle_threads

いいえ

アイドルスレッドの最大数。 デフォルト値: 10。

-omax_idle_threads=10

metrics_port

いいえ

http://localhost:9090/brpc_metrics などのメトリックを出力するための HTTP ポートを有効にします。 デフォルト値: 9090。

-ometrics_port=9090

enable_pread

いいえ

pread 操作を呼び出してオブジェクトを読み取ります。

-oenable_pread

付録 3: 設定項目

項目

構成ノード

説明

logger.dir

common

ログが保存されるディレクトリ。 デフォルト値: /tmp/jindodata-log

logger.sync

common

ログが返されるモード。 有効な値:

  • true: 同期モードでログを返します。

  • false (デフォルト): 非同期モードでログを返します。

logger.consolelogger

common

ログを表示するかどうかを指定します。 有効な値:

  • true: ログを表示します。

  • false (デフォルト): ログを表示しません。

logger.level

common

レベルがこの設定項目の値以上であるログを返します。

  • 端末ログを有効にする

    ログレベルの有効な値: 0 ~ 6。 次の項目は、この設定項目の値とログレベルのマッピングを示しています。

    • 0: TRACE

    • 1: DEBUG

    • 2 (デフォルト): INFO

    • 3: WARN

    • 4: ERROR

    • 5: CRITICAL

    • 6: OFF

  • 端末ログを無効にする

    1 以下のログレベルは WARN を示します。 1 より大きいログレベルは INFO を示します。

logger.verbose

common

レベルがこの設定項目の値以上である詳細ログを返します。 有効な値: 0 ~ 99。 デフォルト値: 0。 値 0 は、詳細ログが返されないことを指定します。

logger.cleaner.enable

common

ログクリーンアップを有効にするかどうかを指定します。 有効な値:

  • true: ログクリーンアップを有効にします。

  • false (デフォルト): ログクリーンアップを無効にします。

fs.oss.endpoint

jindosdk

OSS-HDFS にアクセスするために使用されるエンドポイント。 例: cn-hangzhou.oss-dls.aliyuncs.com

fs.oss.accessKeyId

jindosdk

OSS-HDFS にアクセスするために使用される AccessKey ID。

fs.oss.accessKeySecret

jindosdk

OSS-HDFS にアクセスするために使用される AccessKey Secret。