OpenFileOptions是为读数据打开一个文件方法的选项,提供了打开文件的多种选择。在OpenFileOptions内部,封装了两个重要的成员变量,如下:
// 定位策略
private FileWriteLocationPolicy mLocationPolicy;
// 读取类型
private ReadType mReadType;
其中mLocationPolicy为FileWriteLocationPolicy类型的定位策略,而mReadType为ReadType类型的读取类型。关于定位策略是什么可以参阅《Alluxio之定位策略》一文,而关于读取类型是什么可以参照《Alluxio之IO选项:读写类型》一文,这里均不再解释。
而OpenFileOptions只有一个私有无参构造函数,基于默认配置信息构造一个OpenFileOptions实例,代码如下:
/**
* 私有无参构造函数,基于默认配置信息构造一个OpenFileOptions实例
* Creates a new instance with defaults based on the configuration.
*/
private OpenFileOptions() {
// 获取读取类型ReadType:取参数alluxio.user.file.readtype.default配置的值
mReadType =
ClientContext.getConf().getEnum(Constants.USER_FILE_READ_TYPE_DEFAULT, ReadType.class);
try {
// 获取定位策略:取参数alluxio.user.file.write.location.policy.class配置的值
mLocationPolicy =
CommonUtils.createNewClassInstance(ClientContext.getConf()
.<FileWriteLocationPolicy>getClass(Constants.USER_FILE_WRITE_LOCATION_POLICY),
new Class[]{}, new Object[]{});
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
其中,读取类型ReadType取参数alluxio.user.file.readtype.default配置的值,定位策略取参数alluxio.user.file.write.location.policy.class配置的值。同时,OpenFileOptions对外提供了一个静态方法defaults(),外部调用者可以基于OpenFileOptions.defaults()形式获取一个默认配置的OpenFileOptions实例,代码如下:
/**
* 静态方法,获取一个默认配置的OpenFileOptions实例
* @return the default {@link InStreamOptions}
*/
public static OpenFileOptions defaults() {
// 调用OpenFileOptions的无参构造函数构造一个实例
return new OpenFileOptions();
}
OpenFileOptions还有一个比较重要的方法toInStreamOptions(),它是基于当前OpenFileOptions实例成员变量获取一个默认实现的输入流选项InStreamOptions的实例,代码如下:
/**
* 基于当前OpenFileOptions实例成员变量获取一个默认实现的输入流选项InStreamOptions的实例
* @return the {@link OutStreamOptions} representation of this object
*/
public InStreamOptions toInStreamOptions() {
return InStreamOptions.defaults().setReadType(mReadType).setLocationPolicy(mLocationPolicy);
}
InStreamOptions是在真正读取数据时使用的一个输入流选项,其内部也是封装了FileWriteLocationPolicy和ReadType两个成员变量,且默认构造时二者的取值与OpenFileOptions一致,这里不再赘述。
剩余的,便是一些比较简单的get和set方法,不再详细介绍,具体代码如下:
/**
* @return the location policy to use when storing data to Alluxio
*/
public FileWriteLocationPolicy getLocationPolicy() {
return mLocationPolicy;
}
/**
* 获取Alluxio的存储策略
* @return the Alluxio storage type
*/
public AlluxioStorageType getAlluxioStorageType() {
return mReadType.getAlluxioStorageType();
}
/**
* @param policy the location policy to use when storing data to Alluxio
* @return the updated options object
*/
public OpenFileOptions setLocationPolicy(FileWriteLocationPolicy policy) {
mLocationPolicy = policy;
return this;
}
/**
* @param readType the {@link ReadType} for this operation. Setting this will
* override the {@link AlluxioStorageType}.
* @return the updated options object
*/
public OpenFileOptions setReadType(ReadType readType) {
mReadType = readType;
return this;
}
/**
* @return the name : value pairs for all the fields
*/
@Override
public String toString() {
return Objects.toStringHelper(this).add("locationPolicy", mLocationPolicy)
.add("readType", mReadType).toString();
}
getAlluxioStorageType()方法是根据读取类型mReadType获取Alluxio的存储策略。