热门标签 | 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



推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了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。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 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社区 版权所有