Alluxio
ProductsLanguageHome
AI-3.6 (stable)
AI-3.6 (stable)
  • 概览
    • Alluxio 命名空间和底层文件系统
    • worker管理与一致性哈希
    • 多租户和统一管理
    • I/O弹性
  • 部署Alluxio
    • 资源需求和兼容性
    • 安装
      • 在Kubernetes上安装Alluxio
      • 镜像管理
      • 高级配置
      • 许可证
    • 监控和指标
    • 管理控制台
      • 部署
      • 导航控制台
      • 用户角色与访问控制
    • 集群管理
    • 系统健康检查和快速恢复
    • 诊断快照
  • 底层存储系统
    • Amazon AWS S3
    • Azure Blob Store
    • HDFS
    • 阿里云 OSS
    • 腾讯 COS
    • 火山引擎 TOS
    • 谷歌云 GCS
    • 百度智能云对象存储 BOS
    • 网络附加存储 NAS
  • 数据访问
    • 通过 FUSE( POSIX API)访问
      • Client 写回
      • 客户端虚拟路径映射
    • 通过S3 API访问
    • 通过 PythonSDK/FSSpec 访问
    • UFS 带宽限制器
    • 高可用性数据访问
      • 多副本
      • 多可用区(AZ)
    • 性能优化
      • 文件读取
      • 写入文件
      • 元数据列表
  • 缓存管理
    • 缓存加载
    • 缓存过滤策略
    • 缓存驱逐
      • 通过TTL (有效时间)策略自动驱逐缓存
      • 优先级规则
      • 通过Free命令手动驱逐
    • 过期缓存清理
    • 缓存配额
  • 性能基准测试
    • Fio (POSIX)基准
    • MLPerf Storage 基准测试
    • COSBench (S3) 性能基准测试
  • 安全
    • TLS 支持
  • 参考
    • 用户命令行接口
    • 指标
    • REST API
    • S3 API 的使用
    • 第三方授权
  • 版本发布说明
Powered by GitBook
On this page
  • 概述
  • 启用虚拟路径映射
  • 路径映射测试工具
  • Fuse 路径映射(非常重要)
  • 虚拟目录
  • 限制
  • 规则数量限制
  • ls 限制
  1. 数据访问
  2. 通过 FUSE( POSIX API)访问

客户端虚拟路径映射

概述

Alluxio 支持将一个路径映射成另一个路径,所有的读写请求以及元数据操作请求将不会在原始路径上执行,而是会转发到映射后的路径。

当前客户端虚拟路径映射仅仅适用与 Alluxio Fuse 与 Alluxio Cli.

启用虚拟路径映射

alluxio.user.virtual.path.mapping.enabled=true
alluxio.user.virtual.path.mapping.rule.file.path=/opt/alluxio/conf/path_mapping.json

path_mapping.json 是一个 json 文件,用于描述路径之间的映射关系。 这里举一个简单的例子,比如将 /a/b/c/xxx 映射成 /b/c/d/xxx,则可以进行如下配置:

{
  "rules": [
    {
      "src": "^/a/b/c/(.*)$",
      "dst": "/b/c/d/{{ var1 }}"
    }
  ]
}

这里 src 表示原始路径的正则表达式,括号用于取值,取到的值可以在 dst 中使用,用 var 来表示: var1 表示第一个括号里面的值,var2 表示第二个括号里面的值,以此类推,varN 表示第 N 个括号里的值。

下面我们举一个例子,比如我们想要实现以下路径之间的映射关系:

/foo/bar/[a-b].*  ------> /foo1/bar1/A/xxx
/foo/bar/[e-g].*  ------> /foo1/bar1/B/xxx
/foo/bar/[\d].*   ------> /foo1/bar1/C/xxx
/foo/bar/[acd].*  ------> /foo1/bar1/D/xxx

配置文件可以这样写,注意在 json 文件中写 \ 符号时,需要写成 \\,因为 \ 是 json 的转义字符:

{
  "rules": [
    {
      "src": "^/foo/bar/([a-b].*)$",
      "dst": "/foo1/bar1/A/{{ var1 }}"
    },
    {
      "src": "^/foo/bar/([e-g].*)$",
      "dst": "/foo1/bar1/B/{{ var1 }}"
    },
    {
      "src": "^/foo/bar/([\\d].*)$",
      "dst": "/foo1/bar1/C/{{ var1 }}"
    },
    {
      "src": "^/foo/bar/([acd].*)$",
      "dst": "/foo1/bar1/D/{{ var1 }}"
    }
  ]
}

注意:路径映射规则在匹配时,是从上到下逐条进行匹配,只有第一个匹配到的规则生效;如果路径没有匹配到任何规则,原始路径就是映射后的路径。

路径映射测试工具

我们提供了命令行工具来校验路径映射规则是否符合预期,强烈建议在上线之前使用此工具进行验证。

bin/alluxio fs pathmapping /foo/bar/a.txt

-----------------------------------------------------------------
Input:  /foo/bar/a.txt
Output: /foo1/bar1/A/1.txt
Virtual Directory: false
-----------------------------------------------------------------

这里 Output 字段表示映射后的路径,如果输入路径没有匹配到规则,Output 的值将为 null。 Virtual Directory 字段的含义将在下面的章节解释。

Fuse 路径映射(非常重要)

虚拟路径映射配置中,路径都是 Alluxio 的集群路径,对应到 Alluxio Fuse 的本地路径时,需要考虑到 Alluxio Fuse 在本地的挂载路径。

以如下规则为例:

{
  "rules": [
    {
      "src": "^/a/b/(.*)$",
      "dst": "/a1/b1/{{ var1 }}"
    }
  ]
}

下面的命令是等价的,因为我们将 /a/b/c 映射成 /a1/b1/c

bin/alluxio fs ls /a/b/c
bin/alluxio fs ls /a1/b1/c

假设 Alluxio Fuse 在本地的挂载路径为 /mnt/alluxio/alluxio-fuse,以上规则实际上是将/mnt/alluxio/alluxio-fuse/a/b/c 映射为 /mnt/alluxio/alluxio-fuse/a1/b1/c,因此下面的命令是才是等价的:

ls /mnt/alluxio/alluxio-fuse/a/b/c
ls /mnt/alluxio/alluxio-fuse/a1/b1/c

虚拟目录

在 Alluxio Fuse 里访问一个文件时,Alluxio Fuse 会检查这个文件的父路径是否存在,父路径不存在则会报错。

以如下规则为例:

{
  "rules": [
    {
      "src": "^/a/b/(.*)$",
      "dst": "/a1/b1/{{ var1 }}"
    }
  ]
}

我们读取 /a/b/c 时,Alluxio Fuse 会检查父路径 a/b 是否存在,如果 /a/b 不存在,则会报错。 这个检查与映射后的路径 /a1/b1 是否存在没有任何关系。为了避免这种情况,我们可以配置虚拟目录:

{
  "rules": [
    {
      "src": "^/a/b/(.*)$",
      "dst": "/a1/b1/{{ var1 }}"
    }
  ],
  "virtualDirectories": [
    "/a", "/a/b"
  ]
}

virtualDirectories 字段可以填写多个正则表达式,按填写的顺序进行匹配,匹配 virtualDirectories 的路径会始终认为它存在并且被当做一个目录。 配置的虚拟目录也能用命令行进行校验:

bin/alluxio fs pathmapping /a
-----------------------------------------------------------------
Input:  /a
Output: null
Virtual Directory: true
-----------------------------------------------------------------

其中输出的 Virtual Directory 代表路径是否匹配虚拟目录。

限制

规则数量限制

虚拟路径映射不适合有大量规则的场景,因为逐条匹配正则表达式将会影响性能。

ls 限制

在 ls 一个目录时,不能看到所有匹配的子路径。

这里举例说明,对于这个映射关系:

{
  "rules": [
    {
      "src": "^/foo/bar/([a-b].*)$",
      "dst": "/foo1/bar1/A/{{ var1 }}"
    },
    {
      "src": "^/foo/bar/([e-g].*)$",
      "dst": "/foo1/bar1/B/{{ var1 }}"
    },
    {
      "src": "^/foo/bar/([\\d].*)$",
      "dst": "/foo1/bar1/C/{{ var1 }}"
    },
    {
      "src": "^/foo/bar/([acd].*)$",
      "dst": "/foo1/bar1/D/{{ var1 }}"
    }
  ]
}

在 ls /foo/bar 时,看不到:

/foo1/bar1/A
/foo1/bar1/B
/foo1/bar1/C
/foo1/bar1/D

但是可以直接访问 /foo/bar 目录内的内容,比如可以 cat /foo1/bar1/A/1.txt。

Last updated 1 day ago