分布式文件系统之Tachyon是什么?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41946557/article/details/102754415

Tachyon

概念:

Tachyon是一个高性能、高容错、基于内存的开源分布式存储系统  ,并具有类Java的文件API、插件式的底层文件系统、兼容Hadoop MapReduce和Apache Spark等特征。Tachyon能够为集群框架(如Spark、MapReduce等)提供内存级速度的跨集群文件共享服务。Tachyon充分使用内存和文件对象之间的世代(Lineage)信息,因此速度很快,官方号称最高比HDFS吞吐量高300倍。

本质上,Tachyon是个分布式的内存文件系统,它在减轻Spark内存压力的同时赋予了Spark内存快速大量数据读写的能力。Tachyon把存储与数据读写的功能从Spark中分离,使得Spark更专注在计算的本身,以求通过更细的分工达到更高的执行效率。

架构设计:

Tachyon的架构是传统的Master—Slave架构,这里和Hadoop(Hadoop也是master-slave结构,Hadoop主要有两个结构NameNode和DateNode),Tachyon有三个主要的部件:Master, Client,与Worker。在每个Spark Worker节点上,都部署了一个Tachyon Worker,Spark Worker通过Tachyon Client访问Tachyon进行数据读写。所有的Tachyon Worker都被Tachyon Master所管理,Tachyon Master通过Tachyon Worker定时发出的心跳来判断spark worker是否已经崩溃以及每个spark worker剩余的内存空间量

 

Tachyon Master的结构

 

首先:Tachyon Master是个主管理器,处理从各个Tachyon Client发出的请求,这一系列的工作由Service Handler来完成。这些请求包括:获取Worker的信息,读取File的Block信息, 创建File等等;

其次:Tachyon Master是个Name Node,存放着所有文件的元信息,每个文件的信息都被封装成一个Inode,每个Inode都记录着属于这个文件的所有Block信息。在Tachyon 中,Block是文件系统存储的最小单位,假设每个Block是256MB,如果有一个文件的大小是1GB,那么这个文件会被切为4个Block。每个 Block可能存在多个副本,被存储在多个Tachyon Worker中,因此Master里面也必须记录每个Block被存储的Worker地址;

第三:Tachyon Master同时管理着所有的Worker,Worker会定时向Master发送心跳通知本次活跃状态以及剩余存储空间。Master是通过 Master Worker Info去记录每个Worker的上次心跳时间,已使用的内存空间,以及总存储空间等信息。

 

Tachyon worker的结构

Tachyon Worker的结构,它主要负责存储管理:

首先:Tachyon Worker的Service Handler处理来自Client发来的请求,这些请求包括:读取某个Block的信息,缓存某个Block,锁住某个Block,向本地内存存储要求 空间等等。

第二:Tachyon Worker的主要部件是Worker Storage,其作用是管理Local Data(本地的内存文件系统)以及Under File System(Tachyon以下的磁盘文件系统,比如HDFS)。

第三:Tachyon Worker还有个Data Server以便处理其他的Client对其发起的数据读写请求。当由请求达到时,Tachyon会先在本地的内存存储找数据,如果没有找到则会尝试去其 他的Tachyon Worker的内存存储中进行查找。如果数据完全不在Tachyon里,则需要通过Under File System的接口去磁盘文件系统(HDFS)中读取

Tachyon client的结构

它主要功能是向用户抽象一个文件系统接口以屏蔽掉底层实现细节。

首先,Tachyon Client会通过Master Client部件跟Tachyon Master交互,比如可以向Tachyon Master查询某个文件的某个Block在哪里。Tachyon Client也会通过Worker Client部件跟Tachyon Worker交互, 比如向某个Tachyon Worker请求存储空间。在Tachyon Client实现中最主要的是Tachyon File这个部件。在Tachyon File下实现了Block Out Stream,其主要用于写本地内存文件;实现了Block In Stream主要负责读内存文件。在Block In Stream内包含了两个不同的实现:Local Block In Stream主要是用来读本地的内存文件,而Remote Block In Stream主要是读非本地的内存文件。请注意,非本地可以是在其它的Tachyon Worker的内存文件里,也可以是在Under File System的文件里。

设计初衷:

分布式内存计算的模式也是一柄双刃剑,在提高性能的同时不得不面对分布式数据存储所产生的问题,具体问题主要有以下几个

1)当两个Spark作业需要共享数据时,必须通过写磁盘操作。比如:作业1要先把生成的数据写入HDFS,然后作业2再从HDFS把数据读出来。在此,磁盘的读写可能造成性能瓶颈。

2)由于Spark会利用自身的JVM对数据进行缓存,当Spark程序崩溃时,JVM进程退出,所缓存数据也随之丢失,因此在工作重启时又需要从HDFS把数据再次读出。

3)当两个Spark作业需操作相同的数据时,每个作业的JVM都需要缓存一份数据,不但造成资源浪费,也极易引发频繁的垃圾收集,造成性能的降低。

 

 

 

部署方式:

部署结构:

 

 

 

Tachyon被部署在计算平台(Spark,MR)之下以及存储平台(HDFS, S3)之上,通过全局地隔离计算平台与存储平台, Tachyon可以有效地解决上文列举的几个问题,:

1)当两个Spark作业需要共享数据时,无需再通过写磁盘,而是借助Tachyon进行内存读写,从而提高计算效率。

2)在使用Tachyon对数据进行缓存后,即便在Spark程序崩溃JVM进程退出后,所缓存数据也不会丢失。这样,Spark工作重启时可以直接从Tachyon内存读取数据了。

3)当两个Spark作业需要操作相同的数据时,它们可以直接从Tachyon获取,并不需要各自缓存一份数据,从而降低JVM内存压力,减少垃圾收集发生的频率。

 

 

使用方法:

1、类Java的文件API

 

2、假设一个Spark作业发起了一个读请求,它首先会通过Tachyon Client去Tachyon Master查询所需要的Block所在的位置。如果所在的Block在本地的Tachyon Worker里,此Client则会通过Local Block In Stream向本地的Tachyon Worker发出读请求,如果所在的Block不在本地的Tachyon Worker里,此Client则会通过Remote Block In Stream向别的Tachyon Worker发出读请求,同时在Block读入的过程中,Client也会通过Block Out Stream把Block写入到本地的内存存储里,这样就可以保证下次同样的请求可以由本机完成。

 

3、受益于Tachyon良好的设计和兼用性,用户可以很方便地将现有的利用HDFS进行存储的程序移植至Tachyon,只需要简单的两步:添加配置项,修改文件路径。

 

3.1 对于MapReduce程序

添加配置项<”fs.tachyon.impl”, ” tachyon.hadoop.TFS”>,可以在core-site.xml文件中添加,也可以在程序中使用Configuration.set()方法添加。将原有的”hdfs://ip:port/path”路径更改为”tachyon://ip:port/path”。

 

需要注意的是,由于Hadoop默认不依赖于Tachyon,还要将Tachyon的jar包添加至$HADOOP_CLASSPATH中。

 

3.2 对于Spark程序

同样地,添加配置项<”fs.tachyon.impl”, ” tachyon.hadoop.TFS”>。将原有的”hdfs://ip:port/path”路径更改为”tachyon://ip:port/path”。

 

额外地,添加配置项<”spark.tachyonStore.url”, “tachyon://ip:port/”>后,能够使用”rdd.persist(StorageLevel.OFF_HEAP)”语句将RDD缓存至Tachyon中以减少Java GC的开销。

 

3.3 其他使用方式

为了方便用户使用,Tachyon还提供了命令行工具,能够对Tachyon进行简单的交互

 

tachyon tfs cat|ls|mkdir|rm|copyFromLocal|…

 

此外,Tachyon也有自己的一套API,使用该API能够很灵活地访问Tachyon文件系统,并充分利用Tachyon的各个特性以获得最佳性能。

 

TachyonFS.createFile|delete|mkdir|rename|…

 

TachyonFile.getInStream|getOutStream|getPath|…

 

应用场景:

由于其解决分布式内存计算的分布式数据存储所产生的的问题。所以应用场景基于Spark进行大多数批处理工作。

目前,很多公司(如Pivotal、EMC、红帽等)已经在使用Tachyon,并且来自20个组织或公司(如雅虎、英特、红帽等)的60多个贡献者都在为其贡献代码。Tachyon是于UC Berkeley数据分析栈(BDAS)的存储层,它还是Fedora操作系统自带应用。

 

部分摘自 一个有理想的代码狗:https://baijiahao.baidu.com/s?id=1590729598735273612&wfr=spider&for=pc 

猜你喜欢

转载自blog.csdn.net/qq_41946557/article/details/102754415