本文为您介绍如何通过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使用指南