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

        指定主机策略SpecificHostPolicy是一种总是返回一个指定主机名的worker的定位策略。如果在那个主机名对应机器上没有活跃worker的话则返回null。在SpecificHostPolicy内部,封装了一个成员变量,如下:

  // 主机名
  private final String mHostname;

        这个mHostname就是SpecificHostPolicy策略实现所依赖的主机名,在SpecificHostPolicy构造方法中,就会根据外部传入的主机名初始化成员变量mHostname,代码如下:

  /**
   * 构造方法,需要根据外部传入的主机名初始化成员变量mHostname
   * Constructs the policy with the hostname.
   *
   * @param hostname the name of the host
   */
  public SpecificHostPolicy(String hostname) {
    mHostname = Preconditions.checkNotNull(hostname);
  }

        而核心方法getWorkerForNextBlock()实现也很简单,遍历BlockWorkerInfo列表workerInfoList,判断BlockWorkerInfo的主机名是否与mHostname相等,相等则返回,否则继续遍历下一个BlockWorkerInfo,最终没有找到符合要求的worker的话,就返回null,代码如下:

  @Override
  public WorkerNetAddress getWorkerForNextBlock(List<BlockWorkerInfo> workerInfoList,
      long blockSizeBytes) {
    // find the first worker matching the host name

	// 遍历BlockWorkerInfo列表workerInfoList,判断BlockWorkerInfo的主机名是否与mHostname相等,
	// 相等则返回,否则继续遍历下一个BlockWorkerInfo
    for (BlockWorkerInfo info : workerInfoList) {
      if (info.getNetAddress().getHost().equals(mHostname)) {
        return info.getNetAddress();
      }
    }

    // 最终没有找到符合要求的worker的话,就返回null
    return null;
  }

        十分简单,不再赘述!

时间: 2024-12-23 21:37:36

Alluxio源码分析定位策略:指定主机策略SpecificHostPolicy的相关文章

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

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

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

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实现.         4.Client端实现        以FileSystemM

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

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

OkHttp 3.7源码分析(四)——缓存策略

OkHttp3.7源码分析文章列表如下: OkHttp源码分析--整体架构 OkHttp源码分析--拦截器 OkHttp源码分析--任务队列 OkHttp源码分析--缓存策略 OkHttp源码分析--多路复用 合理地利用本地缓存可以有效地减少网络开销,减少响应延迟.HTTP报头也定义了很多与缓存有关的域来控制缓存.今天就来讲讲OkHttp中关于缓存部分的实现细节. 1. HTTP缓存策略 首先来了解下HTTP协议中缓存部分的相关域. 1.1 Expires 超时时间,一般用在服务器的respon

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

        OpenFileOptions是为读数据打开一个文件方法的选项,提供了打开文件的多种选择.在OpenFileOptions内部,封装了两个重要的成员变量,如下: // 定位策略 private FileWriteLocationPolicy mLocationPolicy; // 读取类型 private ReadType mReadType;         其中mLocationPolicy为FileWriteLocationPolicy类型的定位策略,而mReadType为

Spark源码分析之六:Task调度(二)

        话说在<Spark源码分析之五:Task调度(一)>一文中,我们对Task调度分析到了DriverEndpoint的makeOffers()方法.这个方法针对接收到的ReviveOffers事件进行处理.代码如下: // Make fake resource offers on all executors     // 在所有的executors上提供假的资源(抽象的资源,也就是资源的对象信息,我是这么理解的)     private def makeOffers() {  

HDFS源码分析之UnderReplicatedBlocks(一)

        UnderReplicatedBlocks是HDFS中关于块复制的一个重要数据结构.在HDFS的高性能.高容错性体系中,总有一些原因促使HDFS系统内进行块复制工作,比如基于高性能的负载均衡.基于容错性的数据块副本数恢复等.普遍的,任何工作都会有一个优先级的问题,特别是这里的数据块复制,不可能简单的按照先入先出或者其他简单策略,比方说,基于容错性的数据块副本数恢复,特别是数据块副本仅有一个的数据块副本数恢复,其优先级肯定要比基于高性能的负载均衡高,所以数据块复制要有个优先级的概念