Alluxio
ProductsLanguageHome
AI-3.5 (stable)
AI-3.5 (stable)
  • 概览
  • 部署Alluxio
    • 资源需求和兼容性
    • 在Kubernetes上安装Alluxio
    • 监控和指标
    • Alluxio 集群操作
    • 系统健康检查和快速恢复
    • 采集集群信息
  • 架构
    • Alluxio 命名空间和底层文件系统命名空间
    • I/O弹性
    • worker管理与一致性哈希
  • 底层存储系统
    • Amazon AWS S3
    • HDFS
    • 阿里云 OSS
    • 腾讯 COS
    • 火山引擎 TOS
    • 谷歌云 GCS
  • Client APIs
    • 基于 FSSpec 的Alluxio Python Filesystem API
    • 基于 FUSE 的 POSIX API
      • Client 写回
    • S3 API
  • 缓存操作
    • 缓存预加载
    • 缓存过滤
    • 缓存驱逐
      • TTL (有效时间)规则
      • 优先级规则
      • 通过命令行释放缓存空间
  • 资源管理
    • 基于目录的集群配额
    • UFS 带宽限制
  • 性能优化
    • 通过副本提高读取吞吐量
    • 读取大文件
    • 元数据列表
    • 数据预拉取
    • 写入临时文件
  • 安全
    • TLS 支持
  • 性能基准测试
    • Fio 测试概览
    • MLPerf Storage 基准测试
    • COSBench 性能基准测试
  • 参考
    • 用户命令行接口
    • 指标
    • S3 API 的使用
    • 第三方授权
  • 版本发布说明
Powered by GitBook
On this page
  • 启用 CACHE_ONLY
  • 在 Kubernetes 上部署 CACHE_ONLY Storage
  • 配置资源使用量
  • 访问 CACHE_ONLY
  • 高级配置
  • 启用多副本
  • 启用 multipart-upload
  • 缓存驱逐
  1. 性能优化

写入临时文件

Last updated 3 months ago

实验性功能

在某些情况下,UFS 的性能和带宽可能不能满足大量数据写入的需求。为了解决这个问题,Alluxio 提供了 CACHE_ONLY 的写入方式: Alluxio 支持将数据只写入到 Alluxio 集群,由于整个过程不与 UFS 交互,写入的性能完全取决于 Alluxio 的性能,写入的带宽完全取决于 Alluxio 节点的带宽, 因此能够在大部分情况下能够获得比写 UFS 更好的性能以及更高的带宽。

推荐的使用场景如下:

  • AI 训练过程中临时保存 checkpoint 文件;

  • 大数据计算中产生的 shuffle 文件。

在这些场景中,文件仅仅只是临时写入,并不需要长期存储。

启用 CACHE_ONLY

要使用 CACHE_ONLY 功能,我们必须额外部署 CACHE_ONLY Storage 组件, CACHE_ONLY Storage 的数据和元数据由 CACHE_ONLY Storage 自己管理,不再由 Alluxio Worker 管理。 换句话说,Alluxio 客户端在读取 CACHE_ONLY Storage 上的文件时,将绕过 Alluxio Worker,直接访问 CACHE_ONLY Storage。

在 Kubernetes 上部署 CACHE_ONLY Storage

CACHE_ONLY Storage 的部署已经集成到 Alluxio operator 中,我们只需要在 Alluxio 的部署文件中启用 CACHE_ONLY 功能即可。

apiVersion: k8s-operator.alluxio.com/v1
kind: AlluxioCluster
metadata:
  name: alluxio
spec:
  image: <PRIVATE_REGISTRY>/alluxio-enterprise
  imageTag: <TAG>
  properties:

  worker:
    count: 2

  pagestore:
    size: 100Gi

  cacheOnly:
    enabled: true
    mountPath: "/cache-only"
    image: <PRIVATE_REGISTRY>/alluxio-cacheonly
    imageTag: <TAG>
    imagePullPolicy: IfNotPresent

    # Replace with base64 encoded license generated by
    # cat /path/to/license.json | base64 |  tr -d "\n"
    license:

    properties:

    journal:
      storageClass: "gp2"

    worker:
      count: 2
    tieredstore:
      levels:
        - level: 0
          alias: SSD
          mediumtype: SSD
          path: /data1/cacheonly/worker
          type: hostPath
          quota: 10Gi

注意:CACHE_ONLY Worker 需要本地磁盘存储 CACHE_ONLY 类型的数据,这部分的磁盘空间与 Alluxio Worker 的缓存完全独立,所以需要提前预估 CACHE_ONLY 的使用容量,预留磁盘空间。

配置资源使用量

类似 coordinator 和 worker,我们可以使用类似的字段来配置 CACHE_ONLY Master 和 Worker 使用的资源 cacheOnly.master.resources 和 cacheOnly.worker.resources。

apiVersion: k8s-operator.alluxio.com/v1
kind: AlluxioCluster
metadata:
  name: alluxio
spec:
  cacheOnly:
    enabled: true
    master:
      count: 1
      resources:
        limits:
          cpu: "8"
          memory: "40Gi"
        requests:
          cpu: "8"
          memory: "40Gi"
      jvmOptions:
        - "-Xmx24g"
        - "-Xms24g"
        - "-XX:MaxDirectMemorySize=8g"
    worker:
      count: 2
      resources:
        limits:
          cpu: "8"
          memory: "20Gi"
        requests:
          cpu: "8"
          memory: "20Gi"
      jvmOptions:
        - "-Xmx8g"
        - "-Xms8g"
        - "-XX:MaxDirectMemorySize=8g"

推荐的内存计算方式为:

(${Xmx} + ${MaxDirectMemorySize}) * 1.1 <= ${requests} = ${limit}

访问 CACHE_ONLY

在 CACHE_ONLY Storage 部署完成后,所有访问 /cache_only 挂载点的请求都是 CACHE_ONLY 类型的请求,我们可以以多种形式来访问 CACHE_ONLY 的数据。

使用 Alluxio Cli 访问:

bin/alluxio fs ls /cache_only

使用 Alluxio FUSE 接口访问:

cd ${fuse_mount_path}/cache_only
echo '123' > test.txt
cat test.txt

高级配置

启用多副本

CACHE_ONLY 支持写入多副本,需要在部署文件里增加配置 alluxio.gemini.user.file.replication:

apiVersion: k8s-operator.alluxio.com/v1
kind: AlluxioCluster
metadata:
  name: alluxio
spec:
  properties:
    "alluxio.gemini.user.file.replication": "2"

启用 multipart-upload

Alluxio 支持将写入的数据暂存到内存,在后台使用 multipart-upload 多线程上传到 CACHE_ONLY 集群,这能够有效提高写入的性能。要开启此功能,需要增加以下配置:

apiVersion: k8s-operator.alluxio.com/v1
kind: AlluxioCluster
metadata:
  name: alluxio
spec:
  properties:
    "alluxio.gemini.user.file.cache.only.multipart.upload.enabled": "true"
    "alluxio.gemini.user.file.cache.only.multipart.upload.threads": "16"
    "alluxio.gemini.user.file.cache.only.multipart.upload.buffer.number": "16"
配置项
默认值
描述

alluxio.gemini.user.file.cache.only.multipart.upload.enabled

false

是否启用 multipart upload 功能

alluxio.gemini.user.file.cache.only.multipart.upload.threads

16

multipart upload 可使用的最大线程数

alluxio.gemini.user.file.cache.only.multipart.upload.buffer.number

16

multipart upload 可使用的内存 buffer 的数量

注意:开启 multipart-upload 会显著增加 Alluxio Client 的内存使用量,内存使用量计算如下:

${alluxio.gemini.user.file.cache.only.multipart.upload.buffer.number} * 64MB 

缓存驱逐

以 CACHE_ONLY 模式存储的文件不会被自动驱逐。 如果存储容量接近满载,可以手动删除这些文件以释放空间。 比如在 Alluxio FUSE 里使用 rm ${file_path} 或者在命令行里使用 bin/alluxio fs rm ${file_path}。