热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Tachyon源码解读一:master部分

一、Conf大多系统在启动的时候,必须读取配置信息。这里从配置文件开始。在路径tachyonconfUtils是所有配置类的基类,其中申明了基本属性类型

一、Conf

大多系统在启动的时候,必须读取配置信息。这里从配置文件开始。

在路径tachyon/conf/ Utils是所有配置类的基类,其中申明了基本属性类型(BooleanIntLongString四种类型)。它有四个子类。一下是类关系图


CommonConfMasterWorker的公共配置信息

 public final String TACHYON_HOME;

  public final String UNDERFS_ADDRESS;

  public final String UNDERFS_DATA_FOLDER;

  public final String UNDERFS_WORKERS_FOLDER;

  public final String UNDERFS_HDFS_IMPL;

  public final String UNDERFS_GLUSTERFS_IMPL;

  public final String UNDERFS_GLUSTERFS_VOLUMES;

  public final String UNDERFS_GLUSTERFS_MOUNTS;

  public final String UNDERFS_GLUSTERFS_MR_DIR;

  public final String WEB_RESOURCES;

  public final boolean USE_ZOOKEEPER;

  public final String ZOOKEEPER_ADDRESS;


二、Format

格式化tachyon文件

根据参数内容

Master:创建目录

Worker:从配置文件中拿到节点循环删除



三、Master

初始化配置

TachyonMaster master =

        new TachyonMaster(new InetSocketAddress(mConf.HOSTNAME, mConf.PORT), mConf.WEB_PORT,

            mConf.SELECTOR_THREADS, mConf.QUEUE_SIZE_PER_SELECTOR, mConf.SERVER_THREADS);

启动

Tachyon Master的启动过程,首先当然是要读取Master相关配置参数,目前都是通过-D参数传给Java的,理想的是通过配置文件来做。目前这些参数,一部分是在Env文件里设置变量,再通过-D参数设置,也有的直接写死在-D参数中的,也有启动脚本中默认未配置,在MasterConf代码里使用了默认值的。 通过读取特定的format文件判断文件系统是否格式化,接下来就是在内存中重建文件系统信息

这里摘自网络

Tachyon的文件系统信息依靠Journal日志保存,Journal包括两部分,一是meta信息在某个时刻的快照Image,二是增量LogTachyon Master启动时首先从快照Image文件中读取文件系统meta信息,包括各种数据节点(文件/目录/Raw/Checkpoint/依赖关系等)信息,而后再从继续EditLog(可能多个)中读取增量操作记录,EditLog的内容基本对应于Tachyon文件系统Client的一些相关操作,包括文件的添加,删除,重命名,数据块的添加等等.需要注意的是,这里的Log记录不包括实际的文件内容数据,只是meta信息,所以如果Cache中的文件内容丢失,如果没有持久化,也没有绑定相关lineage信息,那么对应的文件的具体内容也就丢失了文件系统信息恢复完毕以后,在Tachyon Master正式启动服务之前,Tachyon Master会先把当前的Meta Data写出为新的快照Image在启用zookeepeer的情况下,standbyMaster会定期将Editlog合并并创建StandbyImage,如果没有StandbyMaster则只有在启动过程中,才通过上述步骤合并到新的Image中。这里多个Master并发操作Imageeditlog,没有Lock或者互斥的机制,不知道会不会存在竞争冲突,数据stale或丢失的问题



启动有两种模式:

Zookerper(tachyon的高可用方案)

单机

如果有配置zookerper模式的话,需要先启动zookerper客户端。Master在这作为zookerper的客户端(需要将当前运行线程编号提交给client)

接下来是setup(),在该方法中初始化Master的基本信息

设置web服务。

设置MasterServiceHandler(它维护所有worker的状态)

初始化socket服务(线程选择服务)

然后启动web服务

 mWebServer.startWebServer();


下面看下master包中的类图




首先从最上面的EditLog看起,这是一个Master操作日志。

先看下load()方法:

该方法需要提供三个参数:MasterInfopath(日志路径)、还一个Int类型的也就是Master加载最小日志数量。这个方法先对path进行一系列的校验,然后生成一个以文件大小和序列组合的名字的editlog结尾的命名存放在数组集合。然后调用loadSingeLog()方法。

loadSingeLog方法中有个EditLogOperation,这里是指每个EditLog每一个单一的操作都是一个条目,它会序列化json

op = parser.readValueAs(EditLogOperation.class);

这里得到一个操作值,根据操作类型来匹配方法。

有如下操作类型:

ADD_BLOCK:

ADD_CHECKPOINT:

CREATE_FILE:

COMPLETE_FILE:

SET_PINNED:

RENAME:

DELETE: 

CREATE_RAW_TABLE:

UPDATE_RAW_TABLE_METADATA

CREATE_DEPENDENCY:


MasterServiceHandler:

它维护每个工人的状态。它永远不会保存任何用户的状态。

他实现了MasterService中的Iface接口。

该接口中包含了多种方法,其中实现的方法维护着worker的操作信息。包括注册、心跳、缓存块等等


MasterInfo:

是主控文件系统的全局视图

该类实现了HeartbeatExecutor接口,并实现heartbeat()维护worker通信。

在这个方法中实现了一些文件操作、命令等方法


ImageWriter:

这是一个写映像文件的抽象类。Dependency继承了它,并有一些新的功能:从json创建一个依赖,添加孩子依赖等。并重写了writeImage方法。

RawTables:ImageWrite的另一个子类





转:https://www.cnblogs.com/huwf/p/4273380.html



推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
author-avatar
江苏蓝凯-我家在装修_708
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有