阿里云OSS-HDFS服务(JindoFS服务)通过JindoFuse提供POSIX支持。JindoFuse可以把JindoFS服务上的文件挂载到本地文件系统中,让您能够像操作本地文件系统一样操作JindoFS服务中的文件。

步骤一:配置客户端

  • 配置目录

    解压下载的安装包,以安装包内容解压在/usr/lib/jindosdk-4.0.0目录为例:

    export JINDOSDK_HOME=/usr/lib/jindosdk-4.0.0
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${JINDOSDK_HOME}/lib/native/
  • 配置文件
    使用.ini风格配置文件,配置文件的文件名为jindosdk.cfg,示例如下:
    [common]
    logger.dir = /tmp/fuse-log
    
    [jindodls]
    # 已开启HDFS服务的Bucket对应的Endpoint。以华东1(杭州)为例,填写为cn-hangzhou.oss-dls.aliyuncs.com。
    fs.oss.endpoint = <your_endpoint>
    # 用于访问JindoFS服务的AccessKey ID和AccessKey Secret。阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    fs.oss.accessKeyId = <your_key_id>
    fs.oss.accessKeySecret = <your_key_secret>

步骤二:挂载Fuse

  1. 创建挂载点,命令如下:
    mkdir -p <mount-point>
  2. 挂载Fuse,命令如下:
    jindo-fuse <mount_point> -ouri=[<oss_path>]

    -ouri需配置为待映射的dls路径,路径可以为Bucket根目录或者子目录。执行该命令会启动后台的守护进程,将指定的<oss_path>挂载到本地文件系统的<mount_point>。

关于挂载Fuse过程中可以配置的挂载选项的更多信息,请参见挂载选项

步骤三:访问挂载目录

例如,当您将Fuse挂载到本地路径/mnt/jindodls/后,通过以下命令执行JindoFuse的基础操作:

  • 创建目录
    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/

常见问题

  • 如何排查JindoFuse错误?

    与JindoSDK调用API过程中可获取到详细的错误信息ErrorMsg不同,JindoFuse只显示操作系统预设的错误信息:

    ls: /mnt/oss/: Input/output error

    如果您需要定位具体的错误原因,请前往JindoSDK配置项logger.dir指定路径下的jindosdk.log文件。如下为使用JindoFuse过程中常见的鉴权错误信息:

    EMMDD HH:mm:ss jindofs_connectivity.cpp:13] Please check your Endpoint/Bucket/RoleArn.
    Failed test connectivity, operation: mkdir, errMsg: [RequestId]: 618B8183343EA53531C62B74 [HostId]: oss-cn-shanghai-internal.aliyuncs.com [ErrorMessage]: [E1010]HTTP/1.1 403 Forbidden ...

    收到以上报错信息后,请自行排查Endpoint、Bucket以及RoleArn配置信息是否正确。关于Endpoint、Bucket、RoleArn的配置详情,请参OSS-HDFS服务快速入门

    如果遇到程序类报错,请联系技术支持

  • 如何卸载Fuse?

    您可以使用以下两种方式卸载Fuse:

    • 手动卸载
      umount <mount_point>
    • 自动卸载

      自动卸载Fuse时,需要依赖fuse3。因此,您需要先安装fuse3,然后再卸载Fuse。

      1. 安装fuse3

        您可以通过以下命令安装fuse3:

        • CentOS
          yum install -y fuse3
        • Debian
          apt install -y fuse3
      2. 自动卸载Fuse
        -oauto_unmount

附录一:支持特性

目前JindoFuse支持以下POSIX API:

特性 说明
getattr() 查询文件属性,类似ls
mkdir() 创建目录,类似mkdir
rmdir() 删除目录,类似rm -rf
unlink() 删除文件,类似unlink
rename() 重命名文件或目录,类似mv
read() 顺序读取
pread() 随机读
write() 顺序写
flush() 刷新内存到内核缓冲区
fsync() 刷新内存到磁盘
release() 关闭文件
readdir() 读取目录
create() 创建文件
open() O_APPEND 通过追加写的方式打开文件
open() O_TRUNC 通过覆盖写的方式打开文件
ftruncate() 截断已打开的文件
truncate() 截断未打开的文件,类似truncate -s
chmod() 修改文件权限,类似chmod
access() 查询文件权限
utimes() 修改文件的存储时间和更改时间

附录二:挂载选项

挂载JindoFuse过程中可以配置的挂载选项如下表所示:

名称 是否必选 参数说明 使用示例
uri 配置需要映射的dls路径。路径可以是Bucket根目录-ouri=oss://bucket.endpoint/,也可以是子目录-ouri=oss://bucket.endpoint/subdir -ouri=oss://examplebucket.cn-beijing.oss-dls.aliyuncs.com/
f 启动进程。默认使用守护进程方式后台启动。使用该参数时,推荐开启终端日志。 -f
d 使用Debug模式,在前台启动进程。使用该参数时,推荐开启终端日志。 -d
auto_unmount fuse进程退出后自动卸载挂载点。 -oauto_unmount
ro 只读挂载,启用参数后不允许写操作。 -oro
direct_io 开启该选项后,读写文件可以绕过页高速缓冲存储器(Page Cache)。 -odirect_io
kernel_cache 开启后该选项后,通过内核缓存优化读性能。 -okernel_cache
auto_cache 默认开启自动缓存。与kernel_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

附录三:配置选项

配置项 说明
logger.dir 日志目录。默认值为/tmp/jindodata-log
logger.sync 输出日志的方式。取值如下:
  • true:同步输出日志。
  • false(默认值):异步输出日志。
logger.consolelogger 是否打印日志。取值如下:
  • true:打印日志到终端。
  • false(默认值):不打印日志。
logger.level 输出大于等于该等级的日志,等级范围为0~6,日志级别对应关系如下:
  • 0:TRACE
  • 1:DEBUG
  • 2:INFO
  • 3:WARN
  • 4:ERROR
  • 5:CRITICAL
  • 6:OFF
logger.verbose 输出大于等于该等级的VERBOSE日志,等级范围为0~99,默认值为0,0表示不输出。
logger.cleaner.enable 是否开启日志清理。取值如下:
  • true:开启日志清理。
  • false(默认值):不开启日志清理。
fs.oss.endpoint 用于访问JindoFS服务的地址,例如cn-hangzhou.oss-dls.aliyuncs.com
fs.oss.accessKeyId 用于访问JindoFS服务的AccessKey ID。
fs.oss.accessKeySecret 用于访问JindoFS服务的AccessKey Secret。