大数据时代的杀手锏----Tachyon

一、Tachyon系统的简介

  Tachyon是一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存在tachyon里的文件。把 Tachyon是架构在最底层的分布式文件存储和上层的各种计算框架之间的一种中间件。主要职责是将那些不需要落地到DFS里的文件,落地到分布式内存文 件系统中,来达到共享内存,从而提高效率。同时可以减少内存冗余,GC时间等。

          图1-tachyon在大数据中的层次关系

  Spark平台以分布式内存计算的模式达到更高的计算性能,在最近引起了业界的广泛关注,其开源社区也十分活跃。然而,分布式内存计算的模式也是一柄双刃剑,在提高性能的同时不得不面对分布式数据存储所产生的问题,具体问题主要有以下几个:

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

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

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

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

图2-tachyon的部署

  当使用tachyon之后问题得到了解决:

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

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

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

二、Tachyon的架构

  Tachyon的架构是传统的Master—slave架构,这里和Hadoop类似,TachyonMaster里WorkflowManager是 Master进程,因为是为了防止单点问题,通过Zookeeper做了HA,可以部署多台Standby Master。Slave是由Worker Daemon和Ramdisk构成。这里个人理解只有Worker Daemon是基于JVM的,Ramdisk是一个off heap memory。Master和Worker直接的通讯协议是Thrift。

  图3显示了Tachyon在Spark平台的部署:总得来说,Tachyon有三个主要部件:Master,Client,Worker。在每个Spark Worker节点上,都部署了一个Tachyon Worker,Spark Worker通过Tachyon Worker访问Tachyon进行数据读写。所有的Tachyon都被Tachyon Master管理,Tachyon Master通过Tachyon Worker定时发出的心跳来判断Worker是否已经崩溃以及每个Worker剩余的内存空间量。

  图3-Tachyon在Spark平台的部署

1)、Tachyon Master

  Tachyon Master是一个主管理器,处理各个Client发出的请求,这一系列的工作由Service Handler来实现的。这些请求包括:

  首先获取Worker的信息,读取File的Block信息,创建File等等;

  其次,Tachyon Master是个Name Node,存放着所有文件的信息,每个文件的信息都被封装成一个Inode,每个Inode都记录着属于这个文件的所有Block信息。在Tachyon中,Block是 文件系统存储的最小单位,假设每个Block是256MB,如果有一个文件的大小是1GB,那么这个文件会被切为4个Block。

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

图4-Tachyon的Master设计

  Tachyon的文件系统信息依靠Journal日志保存,Journal包括两部分:一是Meta信息在某个时刻的快照Image;二是增量Log。Tachyon Master启动时首先从快照Image文件中读取文件系统Meta的信息,包括各种数据节点(文件/目录/Raw表/CheckPoint/依赖关系等)信息,然后再继续冲EditLog中读取操作记录,EditLog的内容基本对应于Tachyon文件系统Client的一些相关操作,包括文件的添加、删除、重命名、数据块的添加等。

  图4是Tachyon Master启动流程;

图5-Tachyon Master的启动流程

2)、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)中读取。

图6-Tachyon的Worker设计

3)、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的文件里。

图7-Tachyon的Client设计

图8显示了Tachyon的读取文件操作;

图8-读文件的操作

图9显示了Tachyon的写文件操作;

 

图9-写文件操作

 

 

 

[转载:Tachyon:Spark生态系统中的分布式内存文件系统]

posted @ 2016-03-04 11:04  liurio  阅读(336)  评论(0编辑  收藏  举报