本文為您介紹如何通過POSIX命令訪問OSS和OSS-HDFS。

環境準備

  • EMR環境中,默認已安裝JindoSDK,可以直接使用。
    說明 訪問OSS-HDFS,需創建EMR-3.42.0及以上版本或EMR-5.8.0及以上版本的集群。
  • 非EMR環境,請先安裝部署JindoSDK,詳情請參見在非EMR集群中部署JindoSDK
    說明 訪問OSS-HDFS,需部署JindoSDK 4.x及以上版本。

依賴準備

說明 以下版本已默認安裝所需依賴,無需執行此操作。
  • EMR-3.44.0及之后版本或EMR-5.10.0及之后版本。
  • JindoSDK 4.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

在完成對JindoSDK的配置后,您可以執行以下命令掛載JindoFuse。

  • 創建一個掛載點。
    sudo mkdir -p <mountpoint>
  • 掛載Fuse。
    jindo-fuse <mount_point> -ouri=[<osspath>]

    此命令會啟動一個后臺的守護進程,將指定的<oss_path>掛載到本地文件系統的<mount_point>

    <mount_point>需替換為一個本地路徑。 <oss_path>需替換為待映射的OSS或OSS-HDFS路徑,路徑可以為Bucket根目錄或者子目錄。例如:oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir/。

    說明 掛載OSS和OSS-HDFS的方式基本相同,僅路徑中的Endpoint略有不同,根路徑示例請參見路徑說明
  • 確認是否掛載成功。
    ps -ef | grep jindo-fuse
    jindo-fuse進程存在,且啟動參數與預期一致,說明掛載成功。

訪問JindoFuse

如果將JindoFS服務掛載到了本地/mnt/oss/,可以執行以下命令訪問JindoFuse。
  • 查看/mnt/oss/路徑下的所有目錄。
    ls /mnt/oss/
  • 創建目錄。
    mkdir /mnt/oss/dir1
    ls /mnt/oss/
  • 寫入文件。
    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>

自動卸載JindoFuse

可以使用-oauto_unmount參數自動卸載掛載點。

使用該參數后,可以支持killall -9 jindo-fuse發送SIGINT給jindo-fuse進程,進程退出前會自動卸載掛載點。

更多命令及描述,請參見JindoFuse使用指南