公布人:南京大学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模块

Common模块是为Client、Master、Worker所共享的模块,提供了一些配置、常量、路径等通用的调用函数。

Common模块主要包含tachyon.conf包、tachyon.io包、tachyon.util包以及直接从属于tachyon包的类。

以下我们对Common模块所包括的包和源文件进行分析:

▪ tachyon包

直接从属于tachyon包的类没有统一的性质。每一个类定义了为一个或者多个模块所须要的功能。我们列出下表解释每一个类的详细含义。


▪ tachyon.conf

tachyon.conf包包括五个类,分别为CommonConf、MasterConf、WorkerConf、UserConfUtils

CommonConf用于管理通用的配置信息。MasterConf用于管理Master模块须要的配置信息。WorkerConf用于管理Worker模块须要的配置信息;UserConf用于管理Client相关的配置信息;Utils为其它四个类提供可调用的函数。在之后的版本号中。CommonConfMasterConfWorkerConfUserConf将会被集中管理。


▪ tachyon.io包

tachyon.io包是Tachyon自己定义的用于读写数据缓存的包,ByteBufferReaderJavaByteBufferReader是继承关系。封装了ByteBuffer的读功能。ByteBufferWriterJavaByteBufferWriter是继承关系,封装了ByteBuffer的写功能。这四个类的作用主要是方便各个模块调用Tachyon自己定义的类来进行数据缓存的读写訪问,在Tachyon本身的代码结构中。这四个类并未被调用。

图1. tachyon.io类图

▪ tachyon.util包

tachyon.util包体现了Common模块典型的特征。它定义了为其它一个或者多个模块所须要使用但不方便直接定义的功能,以避免减少软件模块的内聚性。tachyon.util包眼下定义了四个类。分别为CommonUtilsNetworkUtilsThreadFactoryUtilsUfsUtilsCommonUtils定义了为Tachyon全部模块所共享的通用函数操作。NetworkUtils定义了为Tachyon全部模块所共享的与网络相关的通用函数操作。TheadFactoryUtils定义了工厂创建线程的两种方式;UfsUtils定义了和底层文件系统相关的通用函数操作。

Client模块

Client模块是用户与Tachyon交互的模块,该模块向用户打开了通向Tachyon的大门。总的来说,Client模块由五个包组成,各自是:tachyon.clienttachyon.client.tabletachyon.commandtachyon.hadooptachyon.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包之间的类图,由于关系比較复杂。该图重点描绘了各个类之间的继承关系和关联关系。从图中能够看出InStreamOutStream为输入输出流的基类。BlockInStreamFileInStream继承于InStream。而EmptyBlockInStreamLocalBlockInStreamRemoteBlockInStream继承于BlockInStreamBlockOutStreamFileOutStream继承于OutStream。同一时候FileInStream包括BlockInStreamFileOutStream包括BlockOutStream,由于文件的读写实际上表现为数据块依次顺序读写。此外,TachyonFSCore为接口。封装了TachyonFS的基本函数调用,AbstractTachyonFS抽象类实现了TachyonFSCore接口。最后TachyonFS继承了AbstractTachyonFS实现并完好了全部的函数调用。

用户接触比較多的主要是TachyonFSTachyonFileFileInStreamFileOutStreamReadType以及WriteType,通过调用这几个类定义的方法能够方便的对Tachyon文件系统进行读写、改动、删除等訪问操作。

除此以外,下图还包括了table包,table包定义了Tachyon文件系统中的表格。在TachyonFS中调用createRawTable()被创建。

图2. tachyon.client类图

▪ tachyon.client.table包

该包主要用来进行表格的定义和处理,包括两个类:RawColumnRawTable

▪ 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包包括两个类:TFsShellUtils


▪ 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中的例子包含BasicCheckpointBasicNonBytesBufferOperationsBasicOperationsBasicRawTableOperationsPerformance。另外Utils相同为全部类提供通用的操作。


Tachyon源代码结构分析(二)的更多相关文章

  1. 【原创】Kakfa utils源代码分析(二)

    我们继续研究kafka.utils包 八.KafkaScheduler.scala 首先该文件定义了一个trait:Scheduler——它就是运行任务的一个调度器.任务调度的方式支持重复执行的后台任 ...

  2. 【原创】kafka server源代码分析(二)

    十四.AbstractFetcherManager.scala 该scala定义了两个case类和一个抽象类.两个case类很简单: 1. BrokerAndFectherId:封装了一个broker ...

  3. Android源代码结构分析

    Google提供的Android包含了:Android源代码,工具链,基础C库,仿真环境,开发环境等,完整的一套.第一级别的目录和文件如下所示:----------------├── Makefile ...

  4. cocos2d-x 托付模式的巧妙运用——附源代码(二)

    转载请注明出处:http://blog.csdn.net/hust_superman/article/details/38292265,谢谢. 继上一篇将了托付类的详细实现后.这篇来将一下怎样在游戏中 ...

  5. [Android]Volley源代码分析(二)Cache

    Cache作为Volley最为核心的一部分,Volley花了重彩来实现它.本章我们顺着Volley的源代码思路往下,来看下Volley对Cache的处理逻辑. 我们回忆一下昨天的简单代码,我们的入口是 ...

  6. HDFS源代码分析(二)-----元数据备份机制

    前言 在Hadoop中,全部的元数据的保存都是在namenode节点之中,每次又一次启动整个集群,Hadoop都须要从这些持久化了的文件里恢复数据到内存中,然后通过镜像和编辑日志文件进行定期的扫描与合 ...

  7. 《转》 Ceilometer项目源代码分析----ceilometer项目源代码结构分析

    感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/gaoxingnengjisua ...

  8. STL源代码剖析(二) - 迭代器与traits技法

    提要 先看一段用迭代器的代码: int a[] = {1, 2, 3, 4, 5}; vector<int> v1( a, a+5); vector<int>::iterato ...

  9. Android 中View的绘制机制源代码分析 二

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/46842891 本篇文章接着上篇文章的内容来继续讨论View的绘制机制,上篇文章中我们主要解说 ...

随机推荐

  1. 在Asp.net MVC中应该怎样使用Spring.Net

    简单工厂 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口.简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常根据一 ...

  2. 【bzoj1965】 [Ahoi2005]SHUFFLE 洗牌 欧拉定理

    题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...

  3. iOS-多线程(2)

    多线程之NSOperation: 多线程的优点: 使用线程可以把占据时间长的程序中的任务呀放到后台去处理 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显 ...

  4. tyvj 2002 扑克牌

    期望DP 本题递推比较麻烦,可以记忆化搜索 注意搜索的边界条件 以及每一次转移 #include <iostream> #include <cstdio> #include & ...

  5. 古代猪文 BZOJ 1951

    古代猪文 [问题描述] “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  6. CSS实现Footer固定底部,超过一屏自动撑开

    方法一:给html.body都设置100%的高度,确定body下内容设置min-height有效,然后设置主体部分min-height为100%,此时若没有header.footer则刚好完美占满全屏 ...

  7. hdu3338 / 方格横纵和问题终极版,最大流斩

    此题被誉为神奇最大流,诱惑我去做了下,感觉也是通常的思路. 题意:1.用1-9去填,满足所给的行/列和要求(和那个什么游戏差不多...) 求一种合法方案,输出.如:   一看,直接就建图了,每个点在白 ...

  8. js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示

    本文本内容拷贝至:https://blog.csdn.net/xuanwuziyou/article/details/48199123 当一个网页中有大量图片时,浏览器会逐个去下载这些图片,等全部下载 ...

  9. Codeforces 889C Maximum Element(DP + 计数)

    题目链接  Maximum Element 题意  现在有这一段求序列中最大值的程度片段: (假定序列是一个1-n的排列) int fast_max(int n, int a[]) { int ans ...

  10. unity3d Resources.Load动态加载资源

    初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习Unity3d常用两种加载资源方案:Resources.Load和AssetBundle Resources.Load就是从一个缺省 ...