alluxio java api演示,Alluxio Java客户端

Alluxio Java客户端

slack-alluxio--community-blue.svg?logo=slack

alluxio.svg?logo=docker&color=166FDB

github-edit%20source-blue.svg?logo=github&color=166FDB

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

所有使用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 TypeBehavior

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 TypeBehavior

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调用覆盖它。

访问Alluxio中的现有文件

对现有文件或目录的所有操作都要求用户指定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();

Javadoc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值