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
文件,使其包含以下内容:
我们建议设置一个负载均衡器(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../
)反斜杠 (
'\'
)
不支持存储桶虚拟主机
Alluxio S3 API 不支持 存储桶虚拟主机。 因此,S3 client 必须使用路径式请求 (即:http://s3.amazonaws.com/{bucket}/{object}
) ,而非 http://{bucket}.s3.amazonaws.com/{object}
。
S3 写入隐式覆盖
正如 AWS S3 的PutObject 文档中所述:
Amazon S3 是一个分布式系统。如果同时收到多个针对同一对象的写入请求,除了最后写入的对象外,其他对象都会被覆盖。 Amazon S3 不提供对象锁定功能;如需要,请确保在应用层中内置锁定功能或使用版本控制功能。
请注意,Alluxio S3 API 目前不支持对象版本控制。
Alluxio S3 将覆盖现有键和临时目录以进行多部分上传。
ListObjects(V2) 中的文件夹
在 Alluxio 中,所有子目录在调用 ListObjects(V2) 方法时会以 0 字节文件夹的形式返回。 这种行为类似于在 AWS S3 console 上为每个对象创建所有父文件夹的操作。
标签和元数据限制
要支持 S3 API 中的标签功能,需修改 conf/alluxio-site.properties
以包含以下内容:
用户定义的存储桶和对象标签数量限制为10,且遵守S3 标签限制。
设置属性键
alluxio.proxy.s3.tagging.restrictions.enabled=false
来禁用此行为。
根据S3 对象元数据限制,在 PUT 请求中,用户定义的元数据最大大小默认为2KB。
设置属性键
alluxio.proxy.s3.header.metadata.max.size
来修改此行为。
性能
S3 API由于它采用了重定向机制和数据零拷贝,因此只有支持 HTTP 重定向的 client 才能访问它。
全局请求标头
支持的 S3 API 操作
下表描述了当前 S3 API 操作 的支持情况:
使用示例
请参考 S3 API 使用。
Last updated