JindoFuse使用指南

OSS/OSS-HDFS可以通过JindoFuse提供POSIX支持,将OSS/OSS-HDFS上的文件挂载到本地文件系统中,让您能够像操作本地文件系统一样操作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

  • 执行以下命令,创建一个挂载点。

    mkdir -p <mount_point>

    <mount_point>需替换为一个本地路径。例如:/mnt/oss/

  • 执行以下命令,挂载JindoFuse。

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

    <oss_path>需替换为待映射的OSS/OSS-HDFS路径,路径可以为Bucket根目录或者子目录。例如:oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/subdir/。

    此命令会启动一个后台的守护进程,将指定的<oss_path>挂载到本地文件系统的<mount_point>

    说明

    挂载OSS和OSS-HDFS路径的方式基本一致,仅路径中的endpoint略有不同。更多信息,请参见OSS/OSS-HDFS快速入门

  • 执行以下命令,确认是否挂载成功。

    ps -ef | grep jindo-fuse

    jindo-fuse进程存在,且启动参数与预期一致,说明挂载成功。

访问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

若您想卸载之前挂载的挂载点,可以使用如下命令。

umount <mount_point>

您也可以使用-oauto_unmount参数,自动卸载挂载点。使用该参数后,支持killall -9 jindo-fuse发送SIGINT给jindo-fuse进程,该进程退出前会自动卸载挂载点。

特性支持

目前JindoFuse已经支持以下POSIX API。

特性

说明

OSS

OSS-HDFS

getattr()

查询文件属性

支持

支持

mkdir()

创建目录

支持

支持

rmdir()

删除目录

支持

支持

unlink()

删除文件

支持

支持

rename()

重命名文件

支持

支持

read()

顺序读取

支持

支持

pread()

随机读取

支持

支持

write()

顺序写入

支持

支持

pwrite()

随机写入

支持

支持

flush()

刷新内存到内核缓冲区

仅支持以追加写方式打开的文件。

支持

fsync()

刷新内存到磁盘

仅支持以追加写方式打开的文件。

支持

release()

关闭文件

支持

支持

readdir()

读取目录

支持

支持

create()

创建文件

支持

支持

open() O_APPEND

通过追加写的方式打开文件

支持,使用时有限制值,请参见使用限制

支持

open() O_TRUNC

通过覆盖写的方式打开文件

支持

支持

ftruncate()

对打开的文件进行截断

不支持

支持

truncate()

对未打开的文件进行截断

不支持

支持

lseek()

指定打开文件中的读写位置

不支持

支持

chmod()

修改文件权限

不支持

支持

access()

查询文件权限

支持

支持

utimes()

修改文件的存取时间和更改时间

不支持

支持

setxattr()

修改文件xattr属性

不支持

支持

getxattr()

获取文件xattr属性

不支持

支持

listxattr()

列举文件xattr属性

不支持

支持

removexattr()

删除文件xattr属性

不支持

支持

lock()

支持posix锁

不支持

支持

fallocate()

为文件预分配物理空间

不支持

支持

symlink()

创建软连接

不支持

目前仅支持OSS-HDFS内部使用,且不支持缓存加速。

readlink()

读取软连接

不支持

支持

进阶使用

挂载参数选项如下所示。

参数

是否必选

JindoData版本

参数说明

使用范例

uri

4.3.0及之后版本

配置需要映射的OSS路径。路径可以是根目录,也可以是子目录。例如:oss://examplebucket/或oss://examplebucket/subdir。

-ouri=oss://examplebucket/

f

4.3.0及之后版本

在前端启动进程。默认使用守护进程方式后台启动。使用该参数时,建议开启终端日志。

-f

d

4.3.0及之后版本

使用Debug模式,在前端启动进程。使用该参数时,建议开启终端日志。

-d

auto_unmount

4.3.0及之后版本

fuse进程退出后自动卸载挂载节点。

-oauto_unmount

ro

4.3.0及之后版本

只读挂载,启用后不允许写操作。

-oro

direct_io

4.3.0及之后版本

开启后,读写文件可以绕过Page Cache。

-odirect_io

kernel_cache

4.3.0及之后版本

开启后,利用内核缓存优化读性能。

-okernel_cache

auto_cache

4.3.0及之后版本

kernel_cache二选一,与kernel_cache不同的是,如果文件大小或修改时间发生变化,缓存就会失效。默认开启。

entry_timeout

4.3.0及之后版本

文件名读取缓存保留时间(秒),用于优化性能。默认值:60。0表示不缓存。

-oentry_timeout=60

attr_timeout

4.3.0及之后版本

文件属性缓存保留时间(秒),用于优化性能。默认值:60。0表示不缓存。

-oattr_timeout=60

negative_timeout

4.3.0及之后版本

文件名读取失败缓存保留时间(秒),用于优化性能。默认值:60。0表示不缓存。

-onegative_timeout=0

max_idle_threads

4.3.0及之后版本

处理内核回调的空闲线程池。默认值:10。

-omax_idle_threads=10

xengine

4.3.0及之后版本

打开缓存。

-oxengine

pread

4.5.1及之后版本

默认使用顺序读。打开后,使用随机读代替顺序读,适用于随机读远多于顺序读的场景。

-opread

no_symlink

4.5.1及之后版本

配置后,关闭symlink功能。

-ono_symlink

no_writeback

4.5.1及之后版本

配置后,关闭writeback功能。

-ono_writeback

no_flock

4.5.1及之后版本

配置后,关闭flock功能。

-ono_flock

no_xattr

4.5.1及之后版本

配置后,关闭xttar功能。

-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

输出大于等于该等级的VERBOSE日志,等级范围为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 Secret。

支持在挂载时同时指定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>]

常见问题

使用JindoFuse时如何定位错误信息?

不同于使用JindoSDK调用API时可以获取更为具体的错误信息,JindoFuse只能显示操作系统预设的错误信息。如果需要定位具体的错误原因,可以根据JindoSDK配置中的logger.dir,在指定路径下的jindosdk.log文件中,寻找具体的错误。