このトピックでは、Filesystem in Userspace (FUSE) クライアントから JindoFileSystem (JindoFS) にアクセスする方法について説明します。FUSE を使用すると、ブロックストレージモードとキャッシュモード(JFS スキームのみサポート)で JindoFS を使用できます。
前提条件
E-MapReduce (EMR) クラスタが作成されていること。詳細については、クラスタの作成 をご参照ください。背景情報
FUSE は、ファイルシステムをマウントするために Linux カーネルによって提供される方法です。 FUSE クライアントを使用すると、JindoFS クラスタ内のファイルをローカルディスクにマップできます。その後、hadoop fs -ls jfs://<namespace>/
コマンドを使用せずに、JindoFS クラスタ内のデータに直接アクセスできます。
ディレクトリのマウント
説明 クラスタの各ノードで、以下の手順を順番に実行します。
- SSH モードでクラスタのマスターノードにログオンします。詳細については、クラスタへのログオン をご参照ください。
- 次のコマンドを実行して、ディレクトリを作成します:
mkdir /mnt/jfs
- 次のコマンドを実行して、ディレクトリをマウントします:
jindofs-fuse /mnt/jfs
この例では、/mnt/jfs/ ディレクトリがマウントされています。
ファイルの読み書き
- 次のコマンドを実行して、/mnt/jfs/ ディレクトリ下のすべてのサブディレクトリをクエリします:
ls /mnt/jfs/
サーバーで構成したすべての名前空間が返されます。test testcache
- 次のコマンドを実行して、test 名前空間内のすべてのファイルをクエリします:
ls /mnt/jfs/test/
- 次のコマンドを実行して、ディレクトリを作成します:
mkdir /mnt/jfs/test/dir1 ls /mnt/jfs/test/
- 次のコマンドを実行して、ファイルにデータを書き込みます:
echo "hello world" > /tmp/hello.txt cp /tmp/hello.txt /mnt/jfs/test/dir1/
- 次のコマンドを実行して、ファイルからデータを読み取ります:
cat /mnt/jfs/test/dir1/hello.txt
次の情報が返されます:hello world
次の例は、Python でファイルからデータを読み書きする方法を示しています:
- Python でファイルにデータを書き込みます。次の内容を含む write.py スクリプトファイルを作成します:
#!/usr/bin/env python36 with open("/mnt/jfs/test/test.txt",'w',encoding = 'utf-8') as f: f.write("my first file\n") f.write("This file\n\n") f.write("contains three lines\n")
- Python でファイルからデータを読み取ります。次の内容を含む read.py スクリプトファイルを作成します:
#!/usr/bin/env python36 with open("/mnt/jfs/test/test.txt",'r',encoding = 'utf-8') as f: lines = f.readlines() [print(x, end = '') for x in lines]
次のコマンドを実行して、test.txt ファイルに書き込まれたデータを読み取ります:[hadoop@emr-header-1 ~]$ ./read.py
次の情報が返されます:my first file This file
FUSE のアンマウント
説明 クラスタの各ノードで、以下の手順を順番に実行します。
- SSH モードでクラスタのマスターノードにログオンします。詳細については、クラスタへのログオン をご参照ください。
- 次のコマンドを実行して、FUSE をアンマウントします:
umount jindofs-fuse
target is busy
エラーが返された場合は、別のディレクトリに切り替え、FUSE ファイルの読み書きを行っているすべてのプログラムを停止してから、FUSE をアンマウントします。