Alluxio源码分析定位策略:本地优先策略LocalFirstPolicy

简介:         LocalFirstPolicy是一个优先返回本地主机的定位策略,如果本地worker没有足够的容量,那么就会从活跃有效的workers列表随机选择一个worker用于每个块写入。

        LocalFirstPolicy是一个优先返回本地主机的定位策略,如果本地worker没有足够的容量,那么就会从活跃有效的workers列表随机选择一个worker用于每个块写入。在其内部,有一个关键的成员变量mLocalHostName,即本地主机名,它是用于选择本地本机worker的关键变量。其定义如下:

  // 本地主机名,用于选择本地本机worker的关键变量
  private String mLocalHostName = null;
        而在LocalFirstPolicy的唯一无参构造函数内,它所做的唯一一件事就是初始化这个本地主机名mLocalHostName,如下:

  /**
   * 构造函数
   * Constructs a {@link LocalFirstPolicy}.
   */
  public LocalFirstPolicy() {
	// 通过NetworkAddressUtils的getLocalHostName()方法,从客户端上下文的配置信息中获取本地主机名mLocalHostName
    mLocalHostName = NetworkAddressUtils.getLocalHostName(ClientContext.getConf());
  }
        既然是一个定位策略,那么它是如何对外提供选择服务的呢?答案就在核心方法getWorkerForNextBlock()中,它为下一个数据块选择一个Worker,返回Worker的网络地址WorkerNetAddress。代码如下;

  // 核心方法,为下一个数据块选择一个Worker,返回Worker的网络地址WorkerNetAddress
  @Override
  public WorkerNetAddress getWorkerForNextBlock(List<BlockWorkerInfo> workerInfoList,
      long blockSizeBytes) {
    // first try the local host
	// 首先尝试从本地主机中选择
	
	// 遍历BlockWorkerInfo列表workerInfoList,获取每个BlockWorkerInfo,即workerInfo
    for (BlockWorkerInfo workerInfo : workerInfoList) {
    	
      // 判断workerInfo所在主机名是否与mLocalHostName,且workerInfo的总字节数是否满足块需要的大小blockSizeBytes
      if (workerInfo.getNetAddress().getHost().equals(mLocalHostName)
          && workerInfo.getCapacityBytes() >= blockSizeBytes) {
        
    	// 满足条件则返回  
    	return workerInfo.getNetAddress();
      }
    }

    // otherwise randomly pick a worker that has enough availability
    // 否则随机挑选一个容量足够满足要求的worker
    
    // 先对workerInfoList进行shuffle,避免热点问题
    Collections.shuffle(workerInfoList);
    
    // 遍历BlockWorkerInfo列表workerInfoList,获取每个BlockWorkerInfo,即workerInfo
    for (BlockWorkerInfo workerInfo : workerInfoList) {
    	
      // 只要workerInfo的总字节数是否满足块需要的大小blockSizeBytes,就是我们需要的worker啦
      if (workerInfo.getCapacityBytes() >= blockSizeBytes) {
        return workerInfo.getNetAddress();
      }
    }
    return null;
  }
        它的逻辑很简单,总共分为两大步骤,如下:

        1、首先尝试从本地主机中选择:

              1.1、遍历BlockWorkerInfo列表workerInfoList,获取每个BlockWorkerInfo,即workerInfo:

                        1.1.1、判断workerInfo所在主机名是否与mLocalHostName,且workerInfo的总字节数是否满足块需要的大小blockSizeBytes,满足条件则返回,否则继续遍历;

        2、如果1未选择到满足条件的worker,则随机挑选一个容量足够满足要求的worker:

              2.1、先对workerInfoList进行shuffle,避免热点问题;

              2.2、遍历BlockWorkerInfo列表workerInfoList,获取每个BlockWorkerInfo,即workerInfo:

                        2.2.1、只要workerInfo的总字节数是否满足块需要的大小blockSizeBytes,就是我们需要的worker啦,否则继续遍历吧;

        3、再选不到就直接返回null喽!



相关文章
|
4月前
|
安全 机器人 数据安全/隐私保护
手机屏幕点击器,屏幕自动点击器,免费连点器(自动点击)【autojs】
完整UI界面:包含坐标录制、执行控制、参数设置等区域 坐标录制功能:实时捕捉屏幕点击位置并记录坐标
|
Linux
HDFS文件上传异常分析:put: `test.txt': No such file or directory
HDFS文件上传异常分析:put: `test.txt': No such file or directory
9541 0
HDFS文件上传异常分析:put: `test.txt': No such file or directory
|
JavaScript 前端开发
Webpack中loader的使用场景
Webpack中的Loader用于处理和转换模块文件,如将TypeScript转为JavaScript、CSS预处理等,通过配置不同的Loader,可以灵活地支持多种文件类型和语言,实现模块化开发与构建优化。
|
12月前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
676 1
|
存储 缓存 NoSQL
分布式缓存最全详解(图文全面总结)
关注【mikechen的互联网架构】,10年+ BAT架构经验倾囊相授。本文详细介绍分布式缓存的核心概念、特点及常见问题,如缓存雪崩、缓存穿透和缓存击穿,并探讨其应用场景和解决方案。欢迎交流。
|
存储 缓存 NoSQL
深入理解分布式缓存在现代后端系统中的应用与挑战
随着互联网技术的飞速发展,分布式缓存已成为提升后端系统性能的关键技术之一。本文将从数据导向和科学严谨的角度出发,探讨分布式缓存技术的原理、应用场景以及面临的主要挑战。通过对具体案例的分析和数据统计,我们旨在为读者提供一个全面而深入的理解框架,帮助开发者更好地设计和优化后端系统。 【7月更文挑战第20天】
280 0
|
Java Linux 网络安全
在Linux上搭建Maven仓库的实战教程
在Linux上搭建Maven仓库的实战教程
787 0
|
资源调度 Linux iOS开发
GPT栏目:yarn 安装
本文提供了在Windows、macOS和Linux操作系统上安装yarn的详细步骤,包括通过Windows安装程序、使用Homebrew在macOS上安装,以及通过包管理器在不同Linux发行版上安装yarn,并验证安装是否成功。
GPT栏目:yarn 安装
ly~
|
人工智能 搜索推荐 自动驾驶
人工智能的应用
人工智能在多个领域广泛应用,包括:医疗领域的疾病诊断、药物研发和医疗机器人;交通领域的自动驾驶和智能交通管理;金融领域的风险评估、金融诈骗检测和投资决策;教育领域的个性化学习和智能辅导;工业领域的质量检测和生产流程优化;家居领域的智能家居系统,如智能音箱和智能灯具等,极大提升了各行业的效率与服务质量。
ly~
865 1
|
分布式计算 资源调度 Hadoop
Hadoop【环境搭建 02】【hadoop-3.1.3 单机版YARN】(配置、启动及验证)
Hadoop【环境搭建 02】【hadoop-3.1.3 单机版YARN】(配置、启动及验证)
251 0