Alluxio/Tachyon如何发挥lineage的作用?

在Spark的RDD中引入过lineage这一概念。指的是RDD之间的依赖。而Alluxio则使用lineage来表示文件之间的依赖。在代码层面,指的是fileID之间的依赖。

代码中的注释指出:

* A lineage tracks the dependencies imposed by a job, including the input files the job depends on,* and the output files the job generates.内部数据结构:
@NotThreadSafe
public final class Lineage implements JournalEntryRepresentable {
  private final long mId;
  private final List<Long> mInputFiles;
  private final List<Long> mOutputFiles;
  private final Job mJob;
  private final long mCreationTimeMs;
}

有了lineage之后,如何使用lineage来实现文件的容错呢?

在源码中,有2个关键类解决了这个问题,分别是LineageMaster和RecomputeExecutor。

有几个问题:

1. 什么时候启动LineageMaster?

  按道理,在Alluxio集群启动时,LineageMaster进程就应该已经“启动”了。

  查找LineageMaster的调用情况,可以发现在alluxio.master.AlluxioMaster对象中,main方法里会调用master.start();

  顺着这个思路,找到startMasters方法,就可以发现如下代码:

if (LineageUtils.isLineageEnabled(MasterContext.getConf())) {
        mLineageMaster.start(isLeader);
      }

  也就是说,在lineage使能的情况下,才会启动mLineageMaster.

  LineageMaster的依赖:

  

  LineageMaster的启动过程是这样的:

  @Override
  public void start(boolean isLeader) throws IOException {
    super.start(isLeader);
    if (isLeader) {
      mCheckpointExecutionService = getExecutorService()
          .submit(new HeartbeatThread(HeartbeatContext.MASTER_CHECKPOINT_SCHEDULING,
              new CheckpointSchedulingExcecutor(this, mFileSystemMaster),
              mConfiguration.getInt(Constants.MASTER_LINEAGE_CHECKPOINT_INTERVAL_MS)));
      mRecomputeExecutionService = getExecutorService()
          .submit(new HeartbeatThread(HeartbeatContext.MASTER_FILE_RECOMPUTATION,
              new RecomputeExecutor(new RecomputePlanner(mLineageStore, mFileSystemMaster),
                  mFileSystemMaster),
              mConfiguration.getInt(Constants.MASTER_LINEAGE_RECOMPUTE_INTERVAL_MS)));
    }
  }

  先分析LineageMaster.start()除了super.start(isLeader)的代码。

  根据这部分代码,可以分析出,LineageMaster只会在leader上启动,而不会在standby master上启动。

  启动包含2个Executor服务的运行,运行在这2个Executor服务上的是2个心跳线程(HeartBeatThread)。

  这2个心跳线程所做的事情分别是:

    checkpoint执行服务所做的是Master Checkpoint Scheduling。executor是CheckpointSchedulingExcecutor。对应的Timer的interval是由“alluxio.master.lineage.checkpoint.interval.ms”所设定。

    而RecomputeExecutionService所做的事情则是文件的重计算(MASTER_FILE_RECOMPUTATION).

  在启动这2个服务之前,还会调用父类的start方法:

    先了解下AbstractMaster类的功能:

    * This is the base class for all masters, and contains common functionality. Common functionality    * mostly consists of journal operations, like initialization, journal tailing when in standby mode,    * or journal writing when the master is the leader.

    分析start方法的代码,首先会起一个固定线程数的线程池。然后,如果是leader,那么就会做如下事情:

      1.判断对应的日志是不是读写日志;

      2.将所有的日志标记为“Complete”;

      3.执行所有的日志文件中的Entry;

      4.初始化日志,把所有完成日志的状态写入检查点文件。

        AbstractMaster在此处会调用子类的streamToJournalCheckpoint方法。

        LineageMaster实现了JournalCheckpointStreamable接口,对应的streamToJournalCheckpoint方法调用LineStore的streamToJournalCheckpoint方法,将依赖转换成日志条目写入JournalOutputStream.

2.RecomputeExecutor已经在LineageMaster中例化过了,那么它的作用是什么?

  

  RecomputeExecutor包含一个内部类:RecomputeLauncher。

  这个内部类实现了runnable接口,这意味着这个类的实例将会被一个线程执行。

  该类的run方法做的事情是根据RecomputePlan类对象的依赖,循环地执行对应的任务:

  a 初始化文件

  b getJob().run()

        

总结,可以看出,lineage的实现与通常的预期较为相符。Master提供了稳定的重算服务,重算服务则由包含有RecomputeExecutor功能的HeartbeatThread实现。

Master通用的功能在AbstractMaster中提出甚至实现。从当前的线索出发,alluxio更多的方面可以挖掘出来。

				
时间: 2024-10-11 18:27:11

Alluxio/Tachyon如何发挥lineage的作用?的相关文章

样做SEO才可以发挥到最大作用

想必只要是做网站的人都希望知道,怎样做SEO才可以发挥到最大作用吧,怎样做网站的流量才可以达到自己想象的顶峰吧,下面笔者就简单谈谈相关问题. 一.SEO的最高境界:忘记SEO. SEO优化的最高境界就是忘记优化,所谓的忘记SEO,并不是不做SEO或是没SEO,而是要把SEO做得根本不留一点SEO的痕迹.不要让搜索引擎和客户一看就知道你做过SEO了,SEO应以用户体验为先.因为SEO主要针对的是搜索引擎,而网站主要针对的是用户,可搜索引擎蜘蛛也仍然是一个特殊的智能化的用户.因此,主要体现在以下几个

Tachyon在Spark中的作用(Tachyon: Reliable, Memory Speed Storage for Cluster Computing Frameworks 论文阅读翻译)

摘要: Tachyon是一种分布式文件系统,能够借助集群计算框架使得数据以内存的速度进行共享.当今的缓存技术优化了read过程,可是,write过程由于须要容错机制,就须要通过网络或者是磁盘进行复制操作.Tachyon通过将"血统"技术引入到存储层进而消除了这个瓶颈.创建一个长期的以"血统机制"为基础的存储系统的关键挑战是失败情况发生的时候及时地进行数据恢复.Tachyon通过引入一种检查点的算法来解决问题,这样的方法保证了恢复过程的有限开销以及通过资源调度器下进行

负载均衡技术在CDN中发挥着重要作用

转载地址:http://www.qicaispace.com/gonggao/server/page01/info07.asp CDN是一个经策略性部署的整体系统,能够帮助用户解决分布式存储.负载均衡.网络请求的重定向和内容管理等问题. 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决 Internet网络拥塞状况,提高用户访问网站的响应速度.从技术上全面解决由于网络带宽小.用户访问量大.网点分布不均而产生

如何成为一家真正发挥大数据作用的 “数据驱动型公司”?

在本章节中,我想试着描述.分享一下大数据在公司商业运营情境当中所扮演的角色. 大数据的能力是从何处而来? 首先,我想先花一点时间来谈谈有关数据的价值,数据所发挥的作用,它是从何处而来的. 我认为「企业专家中心「(Centre Of Excellence) 这个部门非常之重要,它作为最前沿的公司职能部门,负责将数据的角色引入到公司,并将其功能放大化.它的主要职能就是对跨部门的工作进行协调,具体包括了下面这几项内容: 1. 对企业的技术架构进行维护和升级 2. 决定应该收集什么样的数据,从哪个部门来

发挥bat的作用

1.什么是Windows BATCH BATCH也就是批处理文件,有时简称为BAT,是Windows平台上的一种可执行脚本,与*nix(Linux和Unix)上的Shell脚本和其他的脚本(Perl,Python)等是一样的,实质上就是一个文本文件,但是用特定的软件去解释的时候,就变成了可执行脚本.在Windows上,可执行脚本就是BATCH文件,也叫批处理文件,这是从DOS时代遗留下来的名字,意思就是把很多命令放到一起来执行.它的扩展名是*.bat,双击便可直接运行,在命令行(CMD或叫做命令

让Redis在你的系统中发挥更大作用

Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储:它的数据模型非常独特,用的是单线程.另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis. 转向Redis当然也是可取的,许多开发者从一开始就把Redis作为首选数据库:但设想如果你的开发环境已经搭建好,应用已经在上面运行了,那么更换数据库框架显然不那么容易.另外在一些需要大容量数据集的应用,Redis也并不适合,因为它的数据集不会超过系统可用的内存.所以如果你有大数

几点建议,让Redis在你的系统中发挥更大作用

Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储:它的数据模型非常独特,用的是单线程.另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis. Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储:它的数据模型非常独特,用的是单线程.另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis. 转向Redis当然也是可取的,许多开发者从一开始就把Re

alluxio介绍与作用

一.介绍Alluxio Tachyon正式改名为alluxio,并发布v1.0.0版本,alluxio是内存高速虚拟分布式存储系统. Alluxio是一个以内存为中心的虚拟分布式存储系统,统一数据访问和桥梁的计算框架和底层存储 系统.应用程序只需要alluxio就可以把访问存储在任何底层存储系统的数据连接.此外,Alluxio以内 存为中心的架构实现数据访问的数量级的速度比现有的解决方案快很多. 在大数据的生态系统,Alluxio在于计算框架或jobs之间,如Apache的Spark,Apach

如何发挥企业网站的作用,提升企业形象

如果一个企业能够在同行中脱颖而出的话,它必然拥有一个设计精美的企业网站.企业网站及时企业的第二张"脸".试问有谁会不喜欢一张干干净净,漂漂亮亮的"脸"呢?所以,所以充分发挥企业网站的优势,帮助企业塑造良好的形象.下面零起飞(07FLY)建站给大家诠释一下: 第一.重视网站布局和质量 现在很多公司都比较注重公司环境的好坏,公司的设备是否先进,却往往忽略了对自身网站的建设.很多公司的网站就仅是流于形式,没有过多的作用.实际上,网站是一个能够很好展示公司形象的平台,通过网