tencent cloud

弹性 MapReduce

动态与公告
产品动态
产品公告
安全公告
产品简介
产品概述
产品优势
产品架构
产品功能
应用场景
约束与限制
技术支持范围
产品发行版
购买指南
EMR on CVM 计费说明
EMR on TKE 计费说明
EMR Serverless HBase 计费说明
快速入门
EMR on CVM 快速入门
EMR on TKE 快速入门
EMR on CVM 操作指南
规划集群
管理权限
配置集群
管理集群
管理服务
监控告警
智能管家
EMR on TKE 操作指南
EMR on TKE 简介
配置集群
管理集群
管理服务
监控运维
应用分析
EMR Serverless HBase 操作指南
EMR Serverless HBase 产品简介
配额与限制
规划实例
管理实例
监控告警
开发指南
EMR 开发指南
Hadoop开发指南
Spark 开发指南
HBASE开发指南
Phoenix on Hbase 开发指南
Hive 开发指南
Presto开发指南
Sqoop 开发指南
Hue 开发指南
Oozie 开发指南
Flume 开发指南
Kerberos 开发指南
Knox 开发指南
Alluxio 开发指南
Kylin 开发指南
Livy 开发指南
Kyuubi 开发指南
Zeppelin 开发指南
Hudi 开发指南
Superset 开发指南
Impala 开发指南
Druid 开发指南
Tensorflow 开发指南
Kudu 开发指南
Ranger 开发指南
Kafka 开发指南
Iceberg 开发指南
StarRocks 开发指南
Flink 开发指南
JupyterLab 开发指南
MLflow 开发指南
实践教程
EMR on CVM 运维实践
数据迁移实践
自定义伸缩实践教程
API 文档
History
Introduction
API Category
Cluster Resource Management APIs
Cluster Services APIs
User Management APIs
Data Inquiry APIs
Scaling APIs
Configuration APIs
Other APIs
Serverless HBase APIs
YARN Resource Scheduling APIs
Making API Requests
Data Types
Error Codes
常见问题
EMR on CVM常见问题
服务等级协议
联系我们

Alluxio 开发文档

PDF
聚焦模式
字号
最后更新时间: 2025-01-03 14:56:32

背景

Alluxio 通过文件系统接口提供对数据的访问。Alluxio 中的文件提供一次写入语义:它们在被完整写下之后不可变,在完成之前不可读。Alluxio 提供了两种不同的文件系统 API:Alluxio API 和 Hadoop 兼容的 API。Alluxio API 提供了额外的功能,而 Hadoop 兼容的 API 为用户提供了无需修改现有代码使用 Hadoop API 的灵活性。
所有使用 Alluxio Java API 的资源都是通过 AlluxioURI 指定的路径实现。

获取文件系统客户端

要使用 Java 代码获取 Alluxio 文件系统客户端,请使用:
FileSystem fs = FileSystem.Factory.get();

创建一个文件

所有的元数据操作,以及打开一个文件读取或创建一个文件写入都通过 FileSystem 对象执行。由于 Alluxio 文件一旦写入就不可改变,创建文件的惯用方法是使用FileSystem#createFile(AlluxioURI),它返回一个可用于写入文件的流对象。例如:
FileSystem fs = FileSystem.Factory.get();
AlluxioURI path = new AlluxioURI("/myFile");
// Create a file and get its output stream
FileOutStream out = fs.createFile(path);
// Write data
out.write(...);
// Close and complete file
out.close();

指定操作选项

对于所有的文件系统操作,可以指定一个额外的 options 字段,它允许用户可以指定操作的非默认设置。例如:
FileSystem fs = FileSystem.Factory.get();
AlluxioURI path = new AlluxioURI("/myFile");
// Generate options to set a custom blocksize of 128 MB
CreateFileOptions options = CreateFileOptions.defaults().setBlockSize(128 * Constants.MB);
FileOutStream out = fs.createFile(path, options);

IO 选项

Alluxio 使用两种不同的存储类型:Alluxio 管理存储和底层存储。Alluxio 管理存储是分配给 Alluxio worker 的内存 SSD 或 HDD。底层存储是由在最下层的存储系统(如 S3、Swift 或 HDFS)管理的资源。用户可以指定通过 ReadType 和 WriteType 与 Alluxio 管理的存储交互。ReadType 指定读取文件时的数据读取行为。WriteType 指定数据编写新文件时写入行为,例如,数据是否应该写入 Alluxio Storage。
下面是 ReadType 的预期行为表。读取总是偏好 Alluxio 存储优先于底层存储。
Read Type
Behavior
CACHE_PROMOTE
如果读取的数据在 Worker 上时,该数据被移动到 Worker 的最高层。
如果该数据不在本地 Worker 的 Alluxio 存储中,那么就将一个副本添加到本地 Alluxio Worker 中
如果 alluxio.user.file.cache.partially.read.block 设置为 true,没有完全读取的数据块也会被全部存到 Alluxio 内。相反,一个数据块只有完全被读取时,才能被缓存。
CACHE
如果该数据不在本地 Worker 的 Alluxio 存储中,那么就将一个副本添加到本地 Alluxio Worker 中。
如果 alluxio.user.file.cache.partially.read.block 设置为 true,没有完全读取的数据块也会被全部存到 Alluxio 内。相反,一个数据块只有完全被读取时,才能被缓存。
NO_CACHE
仅读取数据,不在 Alluxio 中存储副本。
下面是 WriteType 的预期行为表。
Write Type
Behavior
CACHE_THROUGH
数据被同步地写入到 Alluxio 的 Worker 和底层存储系统。
MUST_CACHE
数据被同步地写入到 Alluxio 的 Worker。但不会被写入到底层存储系统。这是默认写类型。
THROUGH
数据被同步地写入到底层存储系统。但不会被写入到 Alluxio 的 Worker。
ASYNC_THROUGH
数据被同步地写入到 Alluxio 的 Worker,并异步地写入到底层存储系统。处于实验阶段。

位置策略

Alluxio 提供了位置策略来选择要存储文件块到哪一个 worker。使用 Alluxio 的 Java API,用户可以设置策略在 CreateFileOptions 中向 Alluxio 写入文件和在 OpenFileOptions 中读取文件。
用户可以轻松地覆盖默认的策略类配置文件中的属性alluxio.user.file.write.location.policy.class。内置的策略包括:
LocalFirstPolicy (alluxio.client.file.policy.LocalFirstPolicy) :首先返回本地节点,如果本地 worker 没有足够的块容量,它从活动 worker 列表中随机选择一名 worker。这是默认的策略。
MostAvailableFirstPolicy (alluxio.client.file.policy.MostAvailableFirstPolicy):返回具有最多可用字节的 worker。
RoundRobinPolicy (alluxio.client.file.policy.RoundRobinPolicy):以循环方式选择下一个 worker,跳过没有足够容量的 worker。
SpecificHostPolicy (alluxio.client.file.policy.SpecificHostPolicy):返回具有指定节点名的 worker。此策略不能设置为默认策略。
Alluxio 支持自定义策略,所以您也可以通过实现接口 alluxio.client.file.policyFileWriteLocationPolicy 制定适合自己的策略。
注意
默认策略必须有一个空的构造函数。并使用 ASYNC_THROUGH 写入类型,所有块的文件必须写入同一个 worker。
Alluxio 允许客户在向本地 worker 写入数据块时选择一个层级偏好。目前这种策略偏好只适用于本地 worker 而不是远程 worker;远程 worker 会写到最高层。
默认情况下,数据被写入顶层。用户可以通过 alluxio.user.file.write.tier.default 配置项修改默认设置,或通过 FileSystem#createFile(AlluxioURI)API 调用覆盖它。
对现有文件或目录的所有操作都要求用户指定 AlluxioURI。使用 AlluxioURI,用户可以使用 FileSystem 中的任何方法来访问资源。
AlluxioURI 可用于执行 Alluxio FileSystem 操作,例如修改文件元数据、ttl 或 pin 状态,或者获取输入流来读取文件。例如,要读取一个文件:
FileSystem fs = FileSystem.Factory.get();
AlluxioURI path = new AlluxioURI("/myFile");
// Open the file for reading
FileInStream in = fs.openFile(path);
// Read data
in.read(...);
// Close file relinquishing the lock
in.close();


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈