Alluxio
ProductsLanguageHome
DA-3.5 (stable)
DA-3.5 (stable)
  • 概览
  • 部署Alluxio
    • 资源需求和兼容性
    • 在Kubernetes上安装Alluxio
    • 监控和指标
    • Alluxio 集群操作
    • 系统健康检查和快速恢复
    • 采集集群信息
  • 架构
    • Alluxio 命名空间和底层文件系统命名空间
    • I/O弹性
    • worker管理与一致性哈希
  • 底层存储系统
    • Amazon AWS S3
    • HDFS
    • 腾讯 COS
  • 计算集成
    • 在 K8s 上运行 Trino
    • 在 K8s 上运行 Spark
    • 数据湖连接器
  • Client APIs
    • S3 API
    • Java HDFS 兼容 API
  • 缓存操作
    • 缓存预加载
    • 缓存过滤
    • 缓存驱逐
      • TTL (有效时间)规则
      • 优先级规则
      • 通过命令行释放缓存空间
  • 资源管理
    • 基于目录的集群配额
    • UFS 带宽限制
  • 性能优化
    • 通过副本提高读取吞吐量
    • 读取大文件
    • 元数据列表
    • 数据预拉取
  • 安全
    • TLS 支持
    • Apache Ranger 集成
  • 参考
    • 用户命令行接口
    • 指标
    • S3 API Usage
    • 第三方证书
  • 版本发布说明
Powered by GitBook
On this page
  • 先决条件
  • 限制和免责声明
  • Alluxio 文件系统限制
  • 不支持存储桶虚拟主机
  • S3 写入隐式覆盖
  • ListObjects(V2) 中的文件夹
  • 标签和元数据限制
  • HTTP 长连接
  • 性能
  • 全局请求标头
  • 支持的 S3 API 操作
  • 使用示例
  1. Client APIs

S3 API

Alluxio 支持与 Amazon[S3 API (http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html)] 基本操作兼容的 RESTful API。

Alluxio S3 API 应用于与类似 S3 的存储交互的应用程序使用,并且可以从 Alluxio 提供的其他功能中受益,例如数据缓存、 与基于文件系统的应用程序共享数据以及存储系统抽象化(如使用 Ceph 代替 S3 作为后端存储)。 例如,一个下载分析任务生成报告的简单应用就可以使用 S3 API,而非更复杂的文件系统 API。

先决条件

要在 worker 进程中使用提供的 S3 API,您需要修改 conf/alluxio-site.properties 文件,使其包含以下内容:

alluxio.worker.s3.api.enabled=true

我们建议设置一个负载均衡器(load balancer),以便将API调用在所有 worker 节点之间分摊。 您可以考虑使用不同的负载均衡解决方案,如 DNS、Nginx 或 LVS。

限制和免责声明

Alluxio 文件系统限制

S3 API 只将最顶层的 Alluxio 目录视为存储桶。 因此,Alluxio 文件系统的根目录不会被视为 S3 存储桶。 任何根级对象(例如:alluxio://file)都将无法通过 Alluxio S3 API 访问。

Alluxio 使用 / 作为保留的分隔符。 因此,任何包含名为/ 的对象或文件夹的 S3 路径(例如 s3://example-bucket//)将导致未定义的行为。

另外,请注意,Alluxio 文件系统无法处理以下特殊字符和模式:

  • 问号 ('?')

  • 带有句号的格式 ('./' and '../')

  • 反斜杠 ('\')

不支持存储桶虚拟主机

S3 写入隐式覆盖

Amazon S3 是一个分布式系统。如果同时收到多个针对同一对象的写入请求,除了最后写入的对象外,其他对象都会被覆盖。Amazon S3 不提供对象锁定功能;如需要,请确保在应用层中内置锁定功能或使用版本控制功能。

  • 请注意,Alluxio S3 API 目前不支持对象版本控制。

Alluxio S3 将覆盖现有键和临时目录以进行多部分上传。

ListObjects(V2) 中的文件夹

在 Alluxio 中,所有子目录在调用 ListObjects(V2) 方法时会以 0 字节文件夹的形式返回。 这种行为类似于在 AWS S3 console 上为每个对象创建所有父文件夹的操作。

标签和元数据限制

要支持 S3 API 中的标签功能,需修改 conf/alluxio-site.properties 以包含以下内容:

alluxio.underfs.xattr.change.enabled=true
  • 设置属性键 alluxio.proxy.s3.tagging.restrictions.enabled=false 来禁用此行为。

  • 设置属性键 alluxio.proxy.s3.header.metadata.max.size 来修改此行为。

HTTP 长连接

HTTP 长连接(也称为HTTP Keep-Alive),是一个使用单个tcp连接来发送和接收多个http请求/响应,而不是每次请求/响应对应一个新连接的想法。

长连接的主要优点包括:

  • 减少延迟:减少了因频繁请求导致的延迟。

  • 节省资源:通过减少连接数和重复请求,降低了服务器和客户端的资源消耗。

  • 实时性:能够迅速传递最新数据。

然而,长连接也有一些缺点,例如:

  • 服务器压力大:大量保持打开的连接会增加服务器的内存和CPU负担。

  • 超时问题:需要处理长期无响应的情况,确保连接超时机制的有效性。

总的来说,HTTP 长连接是一种有效的技术,适用于对实时性要求较高但同时希望节省资源的场景。

要启用 S3 API 的 HTTP 长连接保持,您需要修改 conf/alluxio-site.properties 文件,使其包含以下内容:

alluxio.worker.s3.connection.keep.alive.enabled=true

# 当连接空闲时间超过这项配置,连接将被关闭。0 表示关闭此功能。
alluxio.worker.s3.connection.idle.max.time=0sec

性能

S3 API由于它采用了重定向机制和数据零拷贝,因此只有支持 HTTP 重定向的 client 才能访问它。

全局请求标头

标头
内容
描述

AWS4-HMAC-SHA256 Credential={user}/..., SignedHeaders=..., Signature=...

支持的 S3 API 操作

S3 API 操作
支持的标头
支持的查询参数

N/A

N/A

N/A

N/A

  • Content-Type,

  • x-amz-copy-source,

  • x-amz-metadata-directive,

  • x-amz-tagging-directive,

  • x-amz-tagging

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

Range

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

delimiter, encoding-type, marker, max-keys, prefix

N/A

continuation-token, delimiter, encoding-type, max-keys, prefix, start-after

N/A

N/A

N/A

N/A

  • Content-Length,

  • Content-MD5,

  • Content-Type,

  • x-amz-tagging

N/A

N/A

N/A

  • Content-Length,

  • Content-MD5,

N/A

使用示例

Last updated 1 month ago

Alluxio S3 API 不支持 。 因此,S3 client 必须使用 (即:http://s3.amazonaws.com/{bucket}/{object}) ,而非 http://{bucket}.s3.amazonaws.com/{object}。

正如 AWS S3 的 文档中所述:

用户定义的存储桶和对象标签数量限制为10,且遵守。

根据,在 PUT 请求中,用户定义的元数据最大大小默认为2KB。

目前 Alluxio S3 API 不支持access key和secret key 唯一支持的身份验证方式是 SIMPLE 身份验证类型。 默认情况下,执行任何操作的用户即是启动 Alluxio 进程时使用的用户。 因此,此标头仅用于指定执行操作的 Alluxio ACL 用户名。 为了与其他 S3 client 保持兼容性,该标头仍应遵循 的格式。 当向 S3 client 提供访问密钥时,请输入要使用的 Alluxio ACL 用户名。 私钥未使用,因此您可以使用任何虚拟值。

下表描述了当前 的支持情况:

请参考 。

存储桶虚拟主机
路径式请求
PutObject
S3 标签限制
S3 对象元数据限制
S3 API 操作
S3 API 使用
Authorization
AWS Signature Version 4
AbortMultipartUpload
CompleteMultipartUpload
CopyObject
CreateMultipartUpload
DeleteBucketTagging
DeleteObject
DeleteObjects
DeleteObjectTagging
GetBucketTagging
GetObject
GetObjectTagging
HeadBucket
HeadObject
ListBuckets
ListMultipartUploads
ListObjects
ListObjectsV2
ListParts
PutBucketTagging
PutObject
PutObjectTagging
UploadPart