Tachyon源码结构分析(二)
2016-06-22 10:49
288 查看
发布人:南京大学PASA大数据实验室顾荣
在上一篇《Tachyon源码结构分析(一)》中,我们介绍了Tachyon的四大模块(Client模块、Master模块、Worker模块以及Common模块)的基本功能及其相互关系。从本篇开始我们开始介绍各个模块的具体功能实现以及各个模块的源码结构。本篇接下来主要对Common模块以及Client模块进行源码结构分析。
版本选择
Tachyon目前的最新发布版为0.6.0,最新开发版为0.7.0-SNAPSHOT。本篇我们选择的Tachyon版本为0.6.0。
官方链接:Tachyon-0.6.0
Common模块是为Client、Master、Worker所共享的模块,提供了一些配置、常量、路径等通用的调用函数。Common模块主要包括tachyon.conf包、tachyon.io包、tachyon.util包以及直接从属于tachyon包的类。
下面我们对Common模块所包含的包和源文件进行分析:
直接从属于tachyon包的类没有统一的性质,每个类定义了为一个或者多个模块所需要的功能,我们列出下表解释每个类的具体含义。
tachyon.conf包包含五个类,分别为CommonConf、MasterConf、WorkerConf、UserConf和Utils。CommonConf用于管理通用的配置信息;MasterConf用于管理Master模块需要的配置信息;WorkerConf用于管理Worker模块需要的配置信息;UserConf用于管理Client相关的配置信息;Utils为其他四个类提供可调用的函数。在之后的版本中,CommonConf、MasterConf、WorkerConf和UserConf将会被集中管理。
▪ tachyon.io包
tachyon.io包是Tachyon自定义的用于读写数据缓存的包,ByteBufferReader和JavaByteBufferReader是继承关系,封装了ByteBuffer的读功能;ByteBufferWriter和JavaByteBufferWriter是继承关系,封装了ByteBuffer的写功能。这四个类的作用主要是方便各个模块调用Tachyon自定义的类来进行数据缓存的读写访问,在Tachyon本身的代码结构中,这四个类并未被调用。
图1. tachyon.io类图
▪ tachyon.util包
tachyon.util包体现了Common模块典型的特征,它定义了为其他一个或者多个模块所需要使用但不方便直接定义的功能,以避免降低软件模块的内聚性。tachyon.util包目前定义了四个类,分别为CommonUtils、NetworkUtils、ThreadFactoryUtils、UfsUtils。CommonUtils定义了为Tachyon所有模块所共享的通用函数操作;NetworkUtils定义了为Tachyon所有模块所共享的与网络相关的通用函数操作;TheadFactoryUtils定义了工厂创建线程的两种方式;UfsUtils定义了和底层文件系统相关的通用函数操作。
Client模块是用户与Tachyon交互的模块,该模块向用户打开了通向Tachyon的大门。总的来说,Client模块由五个包组成,分别是:tachyon.client、tachyon.client.table、tachyon.command、tachyon.Hadoop、tachyon.example。这五个包分别负责Client模块不同的功能。tachyon.client向用户提供访问Tachyon文件系统的API接口;tachyon.client.table包其实是tachyon.client的一个子包,作用主要是定义Tachyon中表格数据的操作;tachyon.command包向用户提供命令行访问Tachyon文件系统的接口;tachyon.hadoop包向用户提供了在hadoop程序开发中,使用Tachyon文件系统的接口;tachyon.example包向用户提供了可运行测试样例。之所以将这些包归为Client模块主要是因为这些包都是面向用户的,为用户编程和使用提供方便。下面我们来进行各个包的详细解析。
▪ tachyon.client包
tachyon.client包是用户编程开发直接需要使用的包,该包提供了对Tachyon文件系统一系列操作的接口,包括对在Tachyon文件系统中创建文件、删除文件、读写文件、获取文件信息等,同时定义了文件的读写方式、文件和文件块的输入输出流等。下表详细介绍了该包的功能。
该包中各个类联系比较紧密,继承关系、关联关系体现的尤为明显,图2是该包以及与tachyon.client.table包之间的类图,由于关系比较复杂,该图重点描绘了各个类之间的继承关系和关联关系。从图中可以看出InStream和OutStream为输入输出流的基类,BlockInStream和FileInStream继承于InStream,而EmptyBlockInStream、LocalBlockInStream、RemoteBlockInStream继承于BlockInStream;BlockOutStream和FileOutStream继承于OutStream。同时FileInStream包含BlockInStream、FileOutStream包含BlockOutStream,因为文件的读写实际上表现为数据块依次顺序读写。此外,TachyonFSCore为接口,封装了TachyonFS的基本函数调用,AbstractTachyonFS抽象类实现了TachyonFSCore接口,最后TachyonFS继承了AbstractTachyonFS实现并完善了所有的函数调用。用户接触比较多的主要是TachyonFS、TachyonFile、FileInStream、FileOutStream、ReadType以及WriteType,通过调用这几个类定义的方法可以方便的对Tachyon文件系统进行读写、修改、删除等访问操作。除此以外,下图还包含了table包,table包定义了Tachyon文件系统中的表格,在TachyonFS中调用createRawTable()被创建。
图2. tachyon.client类图
▪ tachyon.client.table包
该包主要用来进行表格的定义和处理,包含两个类:RawColumn和RawTable。
▪ tachyon.command包
Command包也是和用户直接交互的,用户在shell端输入命令对Tachyon文件系统直接进行操作。目前支持的命令包括cat、copyFromLocal、copyToLocal、count、fileinfo、free、location、ls、lsr、mkdir、pin、printUsage、rename、report、request、rm、rmr、tail、touch、unpin。Command包包含两个类:TFsShell和Utils。
▪ tachyon.hadoop包
该包的存在主要是为了方便hadoop用户直接以Tachyon作为底层文件系统,hadoop计算的数据结果特别是频繁读取的数据保存到Tachyon文件系统中可以提高读写效率。hadoop定义了文件系统处理的抽象类org.apache.hadoop.fs.FileSystem,抽象出文件系统操作的基本函数接口,为了直接对Tachyon文件系统操作,只需要继承并实现org.apache.hadoop.fs.FileSystem抽象类。这里AbstractTFS直接继承了FileSystem抽象类,实现了对Tachyon文件系统操作的基本函数。而TFS和TFSFT都继承了AbstractTFS,主要区别在于是否使用zookeeper模式。在MapReduce计算框架中,我们对文件系统的操作都是基于FileSystem,因而,通过继承关系的动态绑定特性,所存取的数据都会保存到Tachyon文件系统中,从而大幅度提高MapReduce计算框架的效率。当然,该包不仅对于hadoop计算框架有效,对于Spark等计算框架也同样有效。hadoop和spark中使用Tachyon作为底层文件系统的方法可以参考http://blog.csdn.net/u014252240/article/details/41810849
hadoop包中各类的基本关系如图3所示:
图3. tachyon.hadoop关系图
▪ tachyon.example包
该包定义了使用Tachyon的一些实际用例,也可以用来检测Tachyon安装是否正确。该包的测试样例可以通过命令行命令bin/tachyon runTest <Basic| BasicRawTable | BasicCheckpoint | BasicNonByteBuffer> <MUST_CACHE |TRY_CACHE | CACHE_THROUGH | THROUGH | ASYNC_THROUGH>来运行。譬如,如果要运行BasicOperations测试样例,可以使用bin/tachyon
runTest Basic CACHE_THROUGH。example中的样例包括BasicCheckpoint、BasicNonBytesBufferOperations、BasicOperations、BasicRawTableOperations、Performance,另外Utils同样为所有类提供通用的操作。
前言
在上一篇《Tachyon源码结构分析(一)》中,我们介绍了Tachyon的四大模块(Client模块、Master模块、Worker模块以及Common模块)的基本功能及其相互关系。从本篇开始我们开始介绍各个模块的具体功能实现以及各个模块的源码结构。本篇接下来主要对Common模块以及Client模块进行源码结构分析。版本选择
Tachyon目前的最新发布版为0.6.0,最新开发版为0.7.0-SNAPSHOT。本篇我们选择的Tachyon版本为0.6.0。
官方链接:Tachyon-0.6.0
Common模块
Common模块是为Client、Master、Worker所共享的模块,提供了一些配置、常量、路径等通用的调用函数。Common模块主要包括tachyon.conf包、tachyon.io包、tachyon.util包以及直接从属于tachyon包的类。下面我们对Common模块所包含的包和源文件进行分析:
▪ tachyon包
直接从属于tachyon包的类没有统一的性质,每个类定义了为一个或者多个模块所需要的功能,我们列出下表解释每个类的具体含义。
▪ tachyon.conf包
tachyon.conf包包含五个类,分别为CommonConf、MasterConf、WorkerConf、UserConf和Utils。CommonConf用于管理通用的配置信息;MasterConf用于管理Master模块需要的配置信息;WorkerConf用于管理Worker模块需要的配置信息;UserConf用于管理Client相关的配置信息;Utils为其他四个类提供可调用的函数。在之后的版本中,CommonConf、MasterConf、WorkerConf和UserConf将会被集中管理。▪ tachyon.io包
tachyon.io包是Tachyon自定义的用于读写数据缓存的包,ByteBufferReader和JavaByteBufferReader是继承关系,封装了ByteBuffer的读功能;ByteBufferWriter和JavaByteBufferWriter是继承关系,封装了ByteBuffer的写功能。这四个类的作用主要是方便各个模块调用Tachyon自定义的类来进行数据缓存的读写访问,在Tachyon本身的代码结构中,这四个类并未被调用。
图1. tachyon.io类图
▪ tachyon.util包
tachyon.util包体现了Common模块典型的特征,它定义了为其他一个或者多个模块所需要使用但不方便直接定义的功能,以避免降低软件模块的内聚性。tachyon.util包目前定义了四个类,分别为CommonUtils、NetworkUtils、ThreadFactoryUtils、UfsUtils。CommonUtils定义了为Tachyon所有模块所共享的通用函数操作;NetworkUtils定义了为Tachyon所有模块所共享的与网络相关的通用函数操作;TheadFactoryUtils定义了工厂创建线程的两种方式;UfsUtils定义了和底层文件系统相关的通用函数操作。
Client模块
Client模块是用户与Tachyon交互的模块,该模块向用户打开了通向Tachyon的大门。总的来说,Client模块由五个包组成,分别是:tachyon.client、tachyon.client.table、tachyon.command、tachyon.Hadoop、tachyon.example。这五个包分别负责Client模块不同的功能。tachyon.client向用户提供访问Tachyon文件系统的API接口;tachyon.client.table包其实是tachyon.client的一个子包,作用主要是定义Tachyon中表格数据的操作;tachyon.command包向用户提供命令行访问Tachyon文件系统的接口;tachyon.hadoop包向用户提供了在hadoop程序开发中,使用Tachyon文件系统的接口;tachyon.example包向用户提供了可运行测试样例。之所以将这些包归为Client模块主要是因为这些包都是面向用户的,为用户编程和使用提供方便。下面我们来进行各个包的详细解析。▪ tachyon.client包
tachyon.client包是用户编程开发直接需要使用的包,该包提供了对Tachyon文件系统一系列操作的接口,包括对在Tachyon文件系统中创建文件、删除文件、读写文件、获取文件信息等,同时定义了文件的读写方式、文件和文件块的输入输出流等。下表详细介绍了该包的功能。
该包中各个类联系比较紧密,继承关系、关联关系体现的尤为明显,图2是该包以及与tachyon.client.table包之间的类图,由于关系比较复杂,该图重点描绘了各个类之间的继承关系和关联关系。从图中可以看出InStream和OutStream为输入输出流的基类,BlockInStream和FileInStream继承于InStream,而EmptyBlockInStream、LocalBlockInStream、RemoteBlockInStream继承于BlockInStream;BlockOutStream和FileOutStream继承于OutStream。同时FileInStream包含BlockInStream、FileOutStream包含BlockOutStream,因为文件的读写实际上表现为数据块依次顺序读写。此外,TachyonFSCore为接口,封装了TachyonFS的基本函数调用,AbstractTachyonFS抽象类实现了TachyonFSCore接口,最后TachyonFS继承了AbstractTachyonFS实现并完善了所有的函数调用。用户接触比较多的主要是TachyonFS、TachyonFile、FileInStream、FileOutStream、ReadType以及WriteType,通过调用这几个类定义的方法可以方便的对Tachyon文件系统进行读写、修改、删除等访问操作。除此以外,下图还包含了table包,table包定义了Tachyon文件系统中的表格,在TachyonFS中调用createRawTable()被创建。
图2. tachyon.client类图
▪ tachyon.client.table包
该包主要用来进行表格的定义和处理,包含两个类:RawColumn和RawTable。
▪ tachyon.command包
Command包也是和用户直接交互的,用户在shell端输入命令对Tachyon文件系统直接进行操作。目前支持的命令包括cat、copyFromLocal、copyToLocal、count、fileinfo、free、location、ls、lsr、mkdir、pin、printUsage、rename、report、request、rm、rmr、tail、touch、unpin。Command包包含两个类:TFsShell和Utils。
▪ tachyon.hadoop包
该包的存在主要是为了方便hadoop用户直接以Tachyon作为底层文件系统,hadoop计算的数据结果特别是频繁读取的数据保存到Tachyon文件系统中可以提高读写效率。hadoop定义了文件系统处理的抽象类org.apache.hadoop.fs.FileSystem,抽象出文件系统操作的基本函数接口,为了直接对Tachyon文件系统操作,只需要继承并实现org.apache.hadoop.fs.FileSystem抽象类。这里AbstractTFS直接继承了FileSystem抽象类,实现了对Tachyon文件系统操作的基本函数。而TFS和TFSFT都继承了AbstractTFS,主要区别在于是否使用zookeeper模式。在MapReduce计算框架中,我们对文件系统的操作都是基于FileSystem,因而,通过继承关系的动态绑定特性,所存取的数据都会保存到Tachyon文件系统中,从而大幅度提高MapReduce计算框架的效率。当然,该包不仅对于hadoop计算框架有效,对于Spark等计算框架也同样有效。hadoop和spark中使用Tachyon作为底层文件系统的方法可以参考http://blog.csdn.net/u014252240/article/details/41810849
hadoop包中各类的基本关系如图3所示:
图3. tachyon.hadoop关系图
▪ tachyon.example包
该包定义了使用Tachyon的一些实际用例,也可以用来检测Tachyon安装是否正确。该包的测试样例可以通过命令行命令bin/tachyon runTest <Basic| BasicRawTable | BasicCheckpoint | BasicNonByteBuffer> <MUST_CACHE |TRY_CACHE | CACHE_THROUGH | THROUGH | ASYNC_THROUGH>来运行。譬如,如果要运行BasicOperations测试样例,可以使用bin/tachyon
runTest Basic CACHE_THROUGH。example中的样例包括BasicCheckpoint、BasicNonBytesBufferOperations、BasicOperations、BasicRawTableOperations、Performance,另外Utils同样为所有类提供通用的操作。
相关文章推荐
- 从源码安装Mysql/Percona 5.5
- 浅析Ruby的源代码布局及其编程风格
- asp.net 抓取网页源码三种实现方法
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解
- jQuery源码分析之jQuery中的循环技巧详解
- 本人自用的global.js库源码分享
- java中原码、反码与补码的问题分析
- ASP.NET使用HttpWebRequest读取远程网页源代码
- PHP网页游戏学习之Xnova(ogame)源码解读(六)
- C#获取网页HTML源码实例
- PHP网页游戏学习之Xnova(ogame)源码解读(八)
- PHP网页游戏学习之Xnova(ogame)源码解读(四)
- 深入理解PHP之源码目录结构与功能说明
- JS小游戏之极速快跑源码详解
- JS小游戏之象棋暗棋源码详解
- android源码探索之定制android关机界面的方法
- 基于Android设计模式之--SDK源码之策略模式的详解
- Android游戏源码分享之2048
- C语言借助EasyX实现的生命游戏源码