Alluxio源码分析读数据:打开文件选项OpenFileOptions

        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的存储策略。

时间: 2024-09-13 02:09:03

Alluxio源码分析读数据:打开文件选项OpenFileOptions的相关文章

Alluxio源码分析:RPC框架浅析(三)

        Alluxio源码分析是一个基于内存的分布式文件系统,和HDFS.HBase等一样,也是由主从节点构成的.而节点之间的通信,一般都是采用的RPC通讯模型.Alluxio中RPC是基于何种技术如何实现的呢?它对于RPC请求是如何处理的?都涉及到哪些组件?本文将针对这些问题,为您一一解答.         继<Alluxio源码分析:RPC框架浅析(二)>一文后,本文继续讲解Alluxio中RPC实现.         4.Client端实现        以FileSystemM

Alluxio源码分析:RPC框架浅析(一)

        Alluxio源码分析是一个基于内存的分布式文件系统,和HDFS.HBase等一样,也是由主从节点构成的.而节点之间的通信,一般都是采用的RPC通讯模型.Alluxio中RPC是基于何种技术如何实现的呢?它对于RPC请求是如何处理的?都涉及到哪些组件?本文将针对这些问题,为您一一解答.         一.Alluxio中RPC实现技术支持         Alluxio中的RPC是依靠Thrift实现的,Apache Thrift 是 Facebook 实现的一种高效的.支持多

Alluxio源码分析:RPC框架浅析(二)

        Alluxio源码分析是一个基于内存的分布式文件系统,和HDFS.HBase等一样,也是由主从节点构成的.而节点之间的通信,一般都是采用的RPC通讯模型.Alluxio中RPC是基于何种技术如何实现的呢?它对于RPC请求是如何处理的?都涉及到哪些组件?本文将针对这些问题,为您一一解答.         继<Alluxio源码分析:RPC框架浅析(一)>一文后,本文继续讲解Alluxio中RPC实现.         3.Server端实现:RPC Server端口绑定.传输协议

HDFS源码分析之数据块Block、副本Replica

        我们知道,HDFS中的文件是由数据块Block组成的,并且为了提高容错性,每个数据块Block都会在不同数据节点DataNode上有若干副本Replica.那么,什么是Block?什么又是Replica?         首先,我们看下Block的定义,如下: /************************************************** * A Block is a Hadoop FS primitive, identified by a * long.

Alluxio源码分析定位策略:循环遍历策略RoundRobinPolicy

        循环遍历策略RoundRobinPolicy是一种通过循环遍历方式并且跳过没有足够空间workers的为下一个数据块选择worker的策略.如果没有worker被找到,该策略会返回null.在RoundRobinPolicy内部,有三个十分重要的成员变量,如下: // 初始化的BlockWorkerInfo列表,每次都从这个列表中选择BlockWorkerInfo private List<BlockWorkerInfo> mWorkerInfoList; // mWorker

Alluxio源码分析定位策略:指定主机策略SpecificHostPolicy

        指定主机策略SpecificHostPolicy是一种总是返回一个指定主机名的worker的定位策略.如果在那个主机名对应机器上没有活跃worker的话则返回null.在SpecificHostPolicy内部,封装了一个成员变量,如下: // 主机名 private final String mHostname;         这个mHostname就是SpecificHostPolicy策略实现所依赖的主机名,在SpecificHostPolicy构造方法中,就会根据外部传

Alluxio源码分析定位策略:最大可用容量优先策略MostAvailableFirstPolicy

        最大可用容量优先策略MostAvailableFirstPolicy是一种worker可用容量最大的定位策略.如果没有worker合格的话该策略返回null.它的核心方法getWorkerForNextBlock()实现如下: /** * A policy that returns the worker with the most available bytes. The policy returns null if no * worker is qualified. * 一种w

HDFS源码分析数据块汇报之损坏数据块检测checkReplicaCorrupt()

        无论是第一次,还是之后的每次数据块汇报,名字名字节点都会对汇报上来的数据块进行检测,看看其是否为损坏的数据块.那么,损坏数据块是如何被检测的呢?本文,我们将研究下损坏数据块检测的checkReplicaCorrupt()方法.         关于数据块及其副本的状态,请阅读<HDFS源码分析之数据块及副本状态BlockUCState.ReplicaState>一文.         checkReplicaCorrupt()方法专门用于损坏数据块检测,代码如下: /** *

HDFS源码分析DataXceiver之读数据块

         在<HDFS源码分析DataXceiver之整体流程>一文中我们知道,无论来自客户端还是其他数据节点的请求达到DataNode时,DataNode上的后台线程DataXceiverServer均为每个请求创建一个单独的后台工作线程来处理,这个工作线程就是DataXceiver.并且,在线程DataXceiver处理请求的主方法run()方法内,会先读取操作符op,然后根据操作符op分别调用相应的方法进行请求的处理.而决定什么样的操作符op该调用何种方法的逻辑,则是在DataX