Spark入门实战系列--10.分布式内存文件系统Tachyon介绍及安装部署

【注】该系列文章以及使用到安装包/测试数据 能够在《倾情大奉送--Spark入门实战系列》获取

1Tachyon介绍

1.1 Tachyon简介

随着实时计算的需求日益增多,分布式内存计算也持续升温,怎样将海量数据近乎实时地处理,或者说怎样把离线批处理的速度再提高到一个新的高度是当前研究的重点。近年来,内存的吞吐量成指数倍增加,而磁盘的吞吐量增加缓慢,那么将原有计算框架中文件落地磁盘替换为文件落地内存,也是提升效率的优化点。html

目前已经使用基于内存计算的分布式计算框架有:SparkImpalaSAPHANA等。可是其中不乏一些仍是有文件落地磁盘的操做,若是能让这些落地磁盘的操做所有落地到一个共享的内存中,那么这些基于内存的计算框架的效率会更高。java

TachyonAmpLab李浩源所开发的一个分布式内存文件系统,能够在集群里以访问内存的速度来访问存在Tachyon里的文件。Tachyon是架构在最底层的分布式文件存储和上层的各类计算框架之间的一种中间件,其主要职责是将那些不须要落地到DFS里的文件落地到分布式内存文件系统中来达到共享内存,从而提升效率。同时能够减小内存冗余、GC时间等,Tachyon的在大数据中层次关系以下图所示:node

clip_image002

 Tachyon容许文件之内存的速度在集群框架中进行可靠的共享,就像Spark MapReduce那样。经过利用信息继承、内存侵入,Tachyon得到了高性能。Tachyon工做集文件缓存在内存中,而且让不一样的 Jobs/Queries以及框架都能之内存的速度来访问缓存文件。所以,Tachyon能够减小那些须要常用数据集经过访问磁盘来得到的次数。git

1.2 Tachyon系统架构

1.2.1 系统架构

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

clip_image004

1.2.2 Tachyon Master结构

Tachyon Master的结构其主要功能以下:首先,Tachyon Master是个主管理器,处理从各个Client发出的请求,这一系列的工做由Service Handler来完成。这些请求包括:获取Worker的信息,读取FileBlock信息,建立File等等;其次,Tachyon Master是个Name Node,存放着全部文件的信息,每一个文件的信息都被封装成一个Inode,每一个Inode都记录着属于这个文件的全部Block信息。在Tachyon中,Block是文件系统存储的最小单位,假设每一个Block256MB,若是有一个文件的大小是1GB,那么这个文件会被切为4Block。每一个Block可能存在多个副本,被存储在多个Tachyon Worker中,所以Master里面也必须记录每一个Block被存储的Worker地址;第三,Tachyon Master同时管理着全部的WorkerWorker会定时向Master发送心跳通知本次活跃状态以及剩余存储空间。Master是经过Master Worker Info去记录每一个Worker的上次心跳时间,已使用的内存空间,以及总存储空间等信息。web

clip_image006

1.2.3 Tachyon Worker结构

Tachyon Worker主要负责存储管理:首先,Tachyon WorkerService Handler处理来自Client发来的请求,这些请求包括:读取某个Block的信息,缓存某个Block,锁住某个Block,向本地内存存储要求空间等等。第二,Tachyon Worker的主要部件是Worker Storage,其做用是管理Local Data(本地的内存文件系统)以及Under File SystemTachyon如下的磁盘文件系统,好比HDFS)。第三,Tachyon Worker还有个Data Server以便处理其余的Client对其发起的数据读写请求。当由请求达到时,Tachyon会先在本地的内存存储找数据,若是没有找到则会尝试去其余的Tachyon Worker的内存存储中进行查找。若是数据彻底不在Tachyon里,则须要经过Under File System的接口去磁盘文件系统(HDFS)中读取。shell

clip_image008

1.2.4 Tachyon Client结构

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的文件里。apache

clip_image010

1.2.5 场景说明

如今咱们经过一个简单的场景把各个部件都串起来:假设一个Spark做业发起了一个读请求,它首先会经过Tachyon ClientTachyon Master查询所须要的Block所在的位置。若是所在的Block不在本地的Tachyon Worker里,此Client则会经过Remote Block In Stream向别的Tachyon Worker发出读请求,同时在Block读入的过程当中,Client也会经过Block Out StreamBlock写入到本地的内存存储里,这样就能够保证下次一样的请求能够由本机完成。浏览器

1.3 HDFSTachyon

HDFSHadoop Distributed File System)是一个分布式文件系统。HDFS具备高容错性(fault-tolerant)特色,而且设计用来部署在低廉的硬件上。并且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了POSIX的要求,这样能够实现以流的形式访问(streaming access)文件系统中的数据。缓存

HDFS采用Master/Slave架构。HDFS集群是由一个Namenode和必定数目的Datanode组成的。Namenode是一台中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode通常是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户可以以文件的形式在上面存储数据。从内部看,一个文件其实被分红一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操做,好比打开、关闭、重命名文件或目录,它也负责肯定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求,在Namenode的统一调度下对数据块进行建立、删除和复制。

HDFS架构示意图以下图所示。

clip_image012

NamenodeDatanode被设计成能够在普通的商用机器上运行,这些机器通常运行着GNU/Linux操做系统。HDFS采用Java语言开发,所以任何支持Java的机器均可以部署NamenodeDatanode。因为采用了可移植性极强的Java语言,使得HDFS能够部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其余机器则分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的状况比较少见。

集群中单一Namenode的结构大大简化了系统的架构。Namenode是全部HDFS元数据的仲裁者和管理者,这样用户数据永远不会流过Namenode

对比HDFSTachyon,首先从二者的存储结构来看,HDFS设计为用来存储海量文件的分布式系统,Tachyon设计为用来缓存经常使用数据的分布式内存文件系统。从这点来看,Tachyon能够认为是操做系统层面上的CacheHDFS能够认为是磁盘。

在可靠性方面,HDFS采用副本技术来保证出现系统宕机等意外状况时文件访问的一致性以及可靠性;而Tachyon是依赖于底层文件系统的可靠性来实现自身文件的可靠性的。因为相对于磁盘资源来讲,内存是很是宝贵的,因此Tachyon经过在其underfs(通常使用HDFS)上写入CheckPoint日志信息来实现对文件系统的可恢复性。

从文件的读取以及写入方式来看,Tachyon能够更好地利用本地模式来读取文件信息,当文件读取客户端和文件所在的Worker位于一台机器上时,客户端会直接绕过Worker直接读取对应的物理文件,减小了本机的数据交互。而HDFS在遇到这样的状况时,会经过本地Socket进行数据交换,这也会有必定的系统资源开销。在写入文件时,HDFS只能写入磁盘,而Tachyon却提供了5种数据写入模式用以知足不一样需求。

2Tachyon编译部署

Tachyon目前的最新发布版为0.7.1,其官方网址为http://tachyon-project.org/Tachyon文件系统有3种部署方式:单机模式、集群模式和高可用集群模式,集群模式相比于高可用集群模式区别在于多Master节点。下面将介绍单机和集群环境下去安装、配置和使用Tachyon

2.1 编译Tachyon

2.1.1 下载并上传源代码

第一步   下载到Tachyon源代码:

对于已经发布的版本能够直接从github下载Tachyon编译好的安装包并解压,因为TachyonSpark版本有对应关系,另外该系列搭建环境为Spark1.1.0,对应下载Tachyon0.5.0,版本对应参考http://tachyon-project.org/documentation/Running-Spark-on-Tachyon.html描述:

clip_image014

下载地址为https://github.com/amplab/tachyon/releases ,为如下演示咱们在这里下载的是tachyon-0.5.0.tar.gz源代码包,文件大小为831K,以下图所示:

clip_image016

第二步   在主节点上解压缩

$cd /home/hadoop/upload/

$tar -xzf tachyon-0.5.0.tar.gz

第三步   tachyon-0.5.0.tar.gz更名并移动到/app/complied目录下

$mv tachyon-0.5.0 /app/complied/tachyon-0.5.0-src

$ll /app/complied

clip_image018

2.1.2编译代码

为了更好地契合用户的本地环境,如Java版本、Hadoop版本或其余一些软件包的版本,能够下载Tachyon源码自行编译。Tachyon开源在GitHub上,能够很方便地得到其不一样版本的源码。Tachyon项目采用Maven进行管理,所以能够采用 mvn package 命令进行编译打包。编译Tachyon源代码的时候,须要从网上下载依赖包,因此整个编译过程机器必须保证在联网状态。编译执行以下脚本:

$cd /app/complied/tachyon-0.5.0-src

$export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

$mvn clean package -Djava.version=1.7 -Dhadoop.version=2.2.0 -DskipTests

clip_image020

整个编译过程编译了约3个任务,整个过程耗时大约4分钟。

clip_image022

使用以下命令查看编译后该Tachyon项目大小为72M

$cd /app/complied/tachyon-0.5.0-src

$du -s /app/complied/tachyon-0.5.0-src

clip_image024

完成这一步后,咱们就获得了可以运行在用户本地环境的Tachyon,下面咱们分别介绍如何在单机和分布式环境下配置和启动Tachyon,在进行部署以前先把编译好的文件复制到/app/hadoop下并把文件夹命名为Tachyon-0.5.0

$cd /app/complied

$cp -r tachyon-0.5.0-src /app/hadoop/tachyon-0.5.0

$ll /app/hadoop

clip_image026

2.2 单机部署Tachyon

这里要注意一点,Tachyon在单机(local)模式下启动时会自动挂载RamFS,因此请保证使用的帐户具备sudo权限。

【注】编译好的Tachyon将本系列附属资源/install中提供,具体名称为10.tachyon-0.5.0-hadoop2.2.0-complied.zip

2.2.1 配置Tachyon

Tachyon相关配置文件在$TACHYON_HOME/conf目录下,在workers文件中配置须要启动TachyonWorker的节点,默认是localhost,因此在单机模式下不用更改(在Tachyon-0.5.0版本中,该文件为slaves)。在这里须要修改tachyon-env.sh配置文件,具体操做是将tachyon-env.sh.template复制为tachyon-env.sh

$cd /app/hadoop/tachyon-0.5.0/conf

$cp tachyon-env.sh.template tachyon-env.sh      

$ll

$vi tachyon-env.sh

clip_image028

并在tachyon-env.sh中修改具体配置,下面列举了一些重要的配置项:

lJAVA_HOME:系统中java的安装路径

lTACHYON_MASTER_ADDRESS:启动TachyonMaster的地址,默认为localhost,因此在单机模式下不用更改

lTACHYON_UNDERFS_ADDRESSTachyon使用的底层文件系统的路径,在单机模式下能够直接使用本地文件系统,如"/tmp/tachyon",也可使用HDFS,如"hdfs://ip:port"

lTACHYON_WORKER_MEMORY_SIZE:每一个TachyonWorker使用的RamFS大小

clip_image030

2.2.2 格式化Tachyon

完成配置后便可以单机模式启动Tachyon,启动前须要格式化存储文件,格式化和启动Tachyon的命令分别为:

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon format

clip_image032

存储文件为$TACHYON_HOME/underfs/tmp/tachyon目录下

2.2.3 启动Tachyon

使用以下命令启动Tachyon,能够看到在/nmt/ramdisk目录下格式化RamFS

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon-start.sh local

clip_image034

2.2.4 验证启动

使用JPS命令查看Tachyon进程,分别为:TachyonWorkerTachyonMaster

clip_image036

查看Tachyon监控页面,访问地址为http://hadoop1:19999

clip_image038

2.2.5 中止Tachyon

中止Tachyon的命令为:

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon-stop.sh 

clip_image040

2.3 集群模式部署Tachyon

2.3.1 集群环境

集群包含三个节点(该集群环境能够参考第二课《2.Spark编译与部署(上)--基础环境搭建》进行搭建),运行进程分布以下:

序号

IP地址

机器名

运行进程

核数/内存

用户名

目录

1

192.168.0.61

hadoop1

TachyonMaster

TachyonWorker

1/3G

hadoop

/app

/app/hadoop

/app/hadoop/Tach...

2

192.168.0.62

hadoop2

TachyonWorker

1/2G

hadoop

3

192.168.0.63

hadoop3

TachyonWorker

1/2G

hadoop

2.3.2 配置conf/worker

Tachyon相关配置文件在$TACHYON_HOME/conf目录下,对slaves文件中配置须要启动TachyonWorker的节点,在这里须要设置hadoop1hadoop2hadoop3三个节点:

$cd /app/hadoop/tachyon-0.5.0/conf

$vi slaves                                                             

clip_image042

2.3.3 配置conf/tachyon-env.sh

$TACHYON_HOME/conf目录下,将tachyon-env.sh.template复制为tachyon-env.sh,并在achyon-env.sh中修改具体配置。不一样于单机模式,这里须要修改TachyonMaster地址以及底层文件系统路径:

$cd /app/hadoop/tachyon-0.5.0/conf

$cp tachyon-env.sh.template tachyon-env.sh      

$vi tachyon-env.sh

在该文件中修改一下两个参数,这里使用底层文件系统为HDFS

export TACHYON_MASTER_ADDRESS=hadoop1

export TACHYON_UNDERFS_ADDRESS=hdfs://hadoop1:9000

clip_image044

2.3.4 向各个节点分发Tachyon

使用以下命令把hadoop文件夹复制到hadoop2hadoop3机器

$cd /app/hadoop/

$scp -r tachyon-0.5.0 hadoop@hadoop2:/app/hadoop/

$scp -r tachyon-0.5.0 hadoop@hadoop3:/app/hadoop/

clip_image046

2.3.5 启动HDFS

$cd /app/hadoop/hadoop-2.2.0/sbin

$./start-dfs.sh

clip_image048

2.3.6 格式化Tachyon

启动前须要格式化存储文件,格式化命令为:

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon format

clip_image050

能够看到在HDFS/tmp建立了tachyon文件夹

clip_image052

2.3.7 启动Tachyon

在这里使用SudoMout参数,须要在启动过程当中输入hadoop的密码,具体过程以下:

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon-start.sh all SudoMount

clip_image054

启动Tachyon有了更多的选项:

l./tachyon-start.sh all Mount在启动前自动挂载TachyonWorker所使用的RamFS,而后启动TachyonMaster和全部TachyonWorker。因为直接使用mount命令,因此须要用户为root

l./tachyon-start.sh all SudoMount在启动前自动挂载TachyonWorker所使用的RamFS,而后启动TachyonMaster和全部TachyonWorker。因为使用sudo mount命令,因此须要用户有sudo权限;

l./tachyon-start.sh all NoMount认为RamFS已经挂载好,不执行挂载操做,只启动TachyonMaster和全部TachyonWorker

所以,若是不想每次启动Tachyon都挂载一次RamFS,能够先使用命令./tachyon-mount.sh Mount workers ./tachyon-mount.sh SudoMount workers挂载好全部RamFS,而后使用./tachyon-start.sh all NoMount 命令启动Tachyon

单机和集群式模式的区别就在于节点配置和启动步骤,事实上,也能够在集群模式下只设置一个TachyonWorker,此时就成为伪分布模式。

2.3.8 验证启动

使用JPS命令查看Tachyon进程,分别为:TachyonWorkerTachyonMaster

clip_image056

能够在浏览器内打开TachyonWebUI,如 http://hadoop1:19999,查看整个Tachyon的状态,各个TachyonWorker的运行状况、各项配置信息和浏览文件系统等。

clip_image058

 

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon runTests

2.4 Tachyon的配置

这里以0.5.0版本为例,介绍Tachyon中可配置参数的具体含义。Tachyon中的可配置项分为两类,一种是系统环境变量,用于在不一样脚本间共享配置信息;另外一种是程序运行参数,经过-D选项传入运行TachyonJVM中。程序运行参数又分为:

l  通用配置(Common Configuration

l  TachyonMaster配置(Master Configuration

l  TachyonWorker配置(Worker Configuration

l  用户配置(User Configuration

要修改或添加这些可配置项,可修改conf/tachyon-env.sh文件。

2.4.1 Tachyon环境变量

配置项

配置项说明

JAVA_HOME

系统中JDK的安装路径

TACHYON_RAM_FOLDER

配置ramfs挂载的文件目录,默认为/mnt/ramdisk

TACHYON_MASTER_ADDRESS

启动TachyonMaster的地址,默认为localhost,因此在单机模式下不用更改

TACHYON_UNDERFS_ADDRESS

Tachyon使用的底层文件系统的路径,本地文件系统(单机模式下),如"/tmp/tachyon",或HDFS,如"hdfs://ip:port"

TACHYON_WORKER_MEMORY_SIZE

每一个TachyonWorker使用的RamFS大小,默认为1GB

2.4.2 Tachyon通用配置

配置项

配置项说明

tachyon.underfs.address

Tachyon在底层文件系统的的路径,默认为$TACHYON_UNDERFS_ADDRESS

tachyon.home

Tachyon的安装路径,启动Tachyon时为当前 tachyon 文件夹的路径

tachyon.data.folder

Tachyon数据在底层文件系统的存放路径,默认为$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data

tachyon.workers.folder

TachyonWorkers在底层文件系统的工做路径,默认为$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers

tachyon.usezookeeper

TachyonMaster是否使用ZooKeeper容错,默认为false

tachyon.zookeeper.adress

若是启用,ZooKeeper的地址

tachyon.zookeeper.election.path

若是启用,Zookeeperelection文件夹路径,默认为/election

tachyon.zookeeper.leader.path

若是启用,Zookeeperleader文件夹路径,默认为/leader

tachyon.underfs.hdfs.impl

实现HDFS的类,默认org.apache.hadoop.hdfs,DistributedFileSystem

tachyon.max.columns

TachyonRawTable容许的最大列数,默认为1000

tachyon.table.metadata.byte

TachyonRawTable元数据容许存储的最大字节数,默认为5242880,即5MB

tachyon.underfs.glusterfs.impl

若是使用GlusterFS为底层文件系统,实现GlusterFS的类,默认为org.apache.hadoop.fs.glusterfs.GlusterFileSystem

tachyon.underfs.glusterfs.mounts

若是使用GlusterFS为底层文件系统,GlusterFS卷的挂载目录

tachyon.underfs.glusterfs.volumes

若是使用GlusterFS为底层文件系统,GlusterFS的卷名

tachyon.underfs.glusterfs.mapred.system.dir

若是使用GlusterFS为底层文件系统,GlusterFS用于存放MapReduce中间数据的可选子目录,默认为glusterfs:///mapred/system

tachyon.web.resources

Tachyon WebUI可用的资源,默认为$tachyon.home/core/src/main/webapp

tachyon.async.enabled

是否启用异步模式,默认为false

tachyon.underfs.hadoop.prefixes

底层使用hadoop文件系统的前缀列表,默认为"hdfs://""s3://""s3n://""glusterfs:///"

tachyon.test.mode

是否启用测试模式,默认为false

tachyon.master.retry

链接重试次数,默认为29

2.4.3 TachyonMaster配置

配置项

配置项说明

tachyon.master.worker.timeout.ms

TachyonMasterTachyonWorker心跳包失效时长,默认为60000ms

tachyon.master.journal.folder

TachyonMasterjournal日志存放路径,默认为$TACHYON_HOME/journal/

tachyon.master.hostname

TachyonMaster的主机名

tachyon.master.port

TachyonMaster的远程调用通信端口,默认为19998

tachyon.master.web.port

TachyonMasterWebUI端口,默认为19999

tachyon.master.web.threads

TachyonMasterWebUI线程数,默认为9

tachyon.master.whitelist

可缓存的路径前缀列表,列表以逗号隔开,表示该路径下的文件可以被缓存至内存,默认为/,即根目录

tachyon.master.temporary.folder

TachyonMaster的临时文件夹,默认为/tmp

tachyon.master.heartbeat.interval.ms

TachyonMaster心跳包间隔时间,默认为1000ms

tachyon.master.selector.threads

TachyonMasterthrift监听线程数,默认为3

tachyon.master.queue.size.per.selector

TachyonMasterthrift消息队列长度,默认为3000

tachyon.master.server.threads

TachyonMaster节点的thrift服务线程数,默认为CPU核数的2

tachyon.master.pinlist

常驻内存的文件列表,以逗号隔开,表示该路径下的文件不会从内存中剔除,默认为null

2.4.4 TachyonWorker配置

配置项

配置项说明

tachyon.worker.data.folder

TachyonWorkerRamFS中的工做路径,默认为$TACHYON_RAM_FOLDER/tachyonworker/

tachyon.work.port

TachyonWorker的远程调用通信端口,默认为29998

tachyon.worker.data.port

TachyonWorker的数据传输服务的端口,默认为29999

tachyon.worker.memory.size

TachyonWorker所使用的RamFS大小,默认为$TACHYON_WORKER_MEMORY_SIZE

tachyon.worker.heartbeat.timeout.ms

TachyonWorker心跳包失效的时长,默认为10000ms

tachyon.worker.to.master.heartbeat.interval.ms

TachyonWorkerTachyonMaster发送心跳包的时间间隔,默认为1000ms

tachyon.worker.selector.threads

TachyonWorkerthrift监听线程数,默认为3

tachyon.worker.queue.size.per.selector

TachyonWorkerthrift消息队列长度,默认为3000

tachyon.worker.server.threads

TachyonWorkerthrift服务线程数,默认为CPU核数

tachyon.worker.user.timeout.ms

TachyonWorker和用户之间心跳包失效时长,默认为10000ms

tachyon.worker.checkpoint.threads

TachyonWorkercheckpoint线程数,默认为1

tachyon.worker.per.thread.checkpoint.cap.mb.sec

TachyonWorkercheckpoint的速度,默认为1000MB/s

tachyon.worker.network.type

TachyonWorker在传输文件数据时使用的传输方式,默认为NETTY,可选为NIONETTY

2.4.5 用户配置

配置项

配置项说明

tachyon.user.failed.space.request.limits

用户向文件系统请求空间失败时的最大重试次数,默认为3

tachyon.user.quota.unit.bytes

客用户一次向TachyonWorker请求的最少字节数,默认为8388608,即8MB

tachyon.user.file.buffer.byte

用户读写文件时的缓存区大小,默认为1048576,即1MB

tachyon.user.default.block.size.byte

用户建立文件时的默认块大小,默认为1073741824,即1GB

tachyon.user.remote.read.buffer.size.byte

用户读远程文件时的缓冲区大小,默认为1048576,即1MB

tachyon.user.heartbeat.interval.ms

用户心跳包时间间隔,默认为1000ms

tachyon.user.file.writetype.default

用户在使用tachyon.hadoop.TFS时的默认写类型,默认为CACHE_THROUGH

3Tachyon命令行使用

Tachyon的命令行界面让用户能够对文件系统进行基本的操做。调用命令行工具使用如下脚本:

$./tachyon tfs

文件系统访问的路径格式以下:

tachyon://<master node address>:<master node port>/<path>

Tachyon命令行使用中tachyon://<master node address>:<master node port>前缀能够省略,该信息从配置文件中读取。

3.1 接口说明

能够经过以下命令查看Tachyon全部接口命令

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon tfs -help

clip_image060

其中大部分的命令含义能够参考Linux下同名命令,命令含义:

 

命令

含义

cat

将文件内容输出到控制台

count

显示匹配指定的前缀路径的文件夹和文件的数量。

ls

列出指定路径下全部的文件和目录信息,如大小等。

lsr

递归地列出指定路径下全部的文件和目录信息,如大小等。

mkdir

在给定的路径建立一个目录,以及任何须要的父目录。若是路径已经存在将会失败。

rm

删除一个文件。若是是一个目录的路径将会失败。

rmr0.5.0版本不包含)

删除一个文件或目录,以及该目录下的全部文件夹和文件

tail

输出指定文件的最后1 kb到控制台。

touch

在指定的路径建立一个0字节的文件。

mv

移动指定的源文件或源目录到一个目的路径。若是目的路径已经存在将会失败。

copyFromLocal

将本地指定的路径复制到Tachyon中指定的路径。若是Tachyon中指定的路径已经存在将会失败。

copyToLocal

Tachyon中指定的路径复制本地指定的路径。

fileinfo

输出指定文件的块信息。

location

输出存放指定文件的所在节点列表信息。

report

master报告文件丢失

request

根据指定的dependency ID,请求文件。

pin

将指定的路径常驻在内存中。若是指定的是一个文件夹,会递归地包含全部文件以及任何在这个文件夹中新建立的文件。

unpin

撤销指定路径的常驻内存状态。若是指定的是一个文件夹,会递归地包含全部文件以及任何在这个文件夹中新建立的文件。

Free0.5.0版本不包含)

释放一个文件或一个文件夹下的全部文件的内存。文件/文件夹在underfs仍然是可用的。

3.2 接口操做示例

在操做以前须要把$TACHYON_HOME/bin配置到/etc/profile 配置文件的PATH中,并经过source /etc/profile生效

clip_image062

3.2.1 copyFromLocal

将本地$TACHYON_HOME/conf目录拷贝到Tachyon文件系统的根目录下的conf子目录

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon tfs copyFromLocal ../conf /conf

$./tachyon tfs ls /conf

clip_image064

3.2.2 copyToLocal

Tachyon文件系统文件复制到本地,须要注意的是命令中的src必须是Tachyon文件系统中的文件不支持目录拷贝,不然报错没法复制

$mkdir -p /home/hadoop/upload/class10/conflocal

$./tachyon tfs copyToLocal /conf /home/hadoop/upload/class10/conflocal

$./tachyon tfs copyToLocal /conf/tachyon-env.sh /home/hadoop/upload/class10/conflocal/tachyon-env.sh

$ll /home/hadoop/upload/class10/conflocal

clip_image066

3.2.3 lslsr

使用lslsr命令查看Tachyon文件系统下的文件信息,其中lsr命令能够递归地查看子目录。

$./tachyon tfs ls /conf

$./tachyon tfs ls tachyon://hadoop1:19998/conf

$./tachyon tfs lsr /

clip_image068

3.2.4 count

统计当前路径下的目录、文件信息,包括文件数、目录树以及总的大小

$./tachyon tfs count /

clip_image070

3.2.5 cat

查看指定文件的内容

$./tachyon tfs cat /conf/slaves

$./tachyon tfs cat tachyon://hadoop1:19998/conf/slaves

clip_image072

3.2.6 mkdirrmrmrtouch

(1)mkdir:建立目录,支持自动建立不存在的父目录;

(2)rm:删除文件,不能删除目录,注意,递归删除根目录是无效的

(3)rmr:删除目录,支持递归,包含子目录和文件,其中0.5.0版本不提供该命令

(4)touch:建立文件,不能建立已经存在的文件。

$./tachyon tfs mkdir /mydir

$./tachyon tfs ls /

$./tachyon tfs rm /mydir

clip_image074

$./tachyon tfs touch /mydir/my.txt

$./tachyon tfs lsr /mydir

$./tachyon tfs rm /mydir/my.txt

clip_image076

$./tachyon tfs touch /mydir2/2/2/my.txt

$./tachyon tfs lsr /mydir2

$./tachyon tfs rm /mydir2

$./tachyon tfs rm /

$./tachyon tfs ls /

clip_image078

3.2.7 pinunpin

pin命令将指定的路径常驻在内存中,若是指定的是一个文件夹会递归地包含全部文件以及任何在这个文件夹中新建立的文件。unpin命令撤销指定路径的常驻内存状态。

clip_image080

pin执行前或unpin执行后的Web Interface界面

$./tachyon tfs pin /conf/log4j.properties

clip_image082

$./tachyon tfs unpin /conf/log4j.properties

clip_image084

4Tachyon实战应用

4.1 配置及启动环境

4.1.1 修改spark-env.sh

修改$SPARK_HOME/conf目录下spark-env.sh文件:

$cd /app/hadoop/spark-1.1.0/conf

$vi spark-env.sh

在该配置文件中添加以下内容:

export SPARK_CLASSPATH=/app/hadoop/tachyon-0.5.0/client/target/tachyon-client-0.5.0-jar-with-dependencies.jar:$SPARK_CLASSPATH

clip_image086

4.1.2 启动HDFS

$cd /app/hadoop/hadoop-2.2.0/sbin

$./start-dfs.sh

4.1.3 启动Tachyon

在这里使用SudoMout参数,须要在启动过程当中输入hadoop的密码,具体过程以下:

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon-start.sh all SudoMount

4.2 Tachyon上运行Spark

4.2.1 添加core-site.xml

Tachyon的官方文档说Hadoop1.X集群须要添加该配置文件(参见http://tachyon-project.org/documentation/Running-Spark-on-Tachyon.html),实际在Hadoop2.2.0集群测试的过程当中发现也须要添加以下配置文件,不然没法识别以tachyon://开头的文件系统,具体操做是在$SPARK_HOME/conf目录下建立core-site.xml文件

$cd /app/hadoop/spark-1.1.0/conf

$touch core-site.xml

$vi core-site.xml

在该配置文件中添加以下内容:

<configuration>

  <property>

    <name>fs.tachyon.impl</name>

    <value>tachyon.hadoop.TFS</value>

  </property>

</configuration>

clip_image088

4.2.2 启动Spark集群

$cd /app/hadoop/spark-1.1.0/sbin

$./start-all.sh

4.2.3 读取文件并保存

第一步   准备测试数据文件

使用Tachyon命令行准备测试数据文件

$cd /app/hadoop/tachyon-0.5.0/bin

$./tachyon tfs copyFromLocal ../conf/tachyon-env.sh /tachyon-env.sh

$./tachyon tfs ls /

clip_image090

第二步   启动Spark-Shell

$cd /app/hadoop/spark-1.1.0/bin

$./spark-shell

第三步   对测试数据文件进行计数并另存

对前面放入到Tachyon文件系统的文件进行计数

scala>val s = sc.textFile("tachyon://hadoop1:19998/tachyon-env.sh")

scala>s.count()

clip_image092

clip_image094

把前面的测试文件另存为tachyon-env-bak.sh文件

scala>s.saveAsTextFile("tachyon://hadoop1:19998/tachyon-env-bak.sh")

clip_image096

clip_image098

第四步   TachyonUI界面查看

能够查看到该文件在Tachyon文件系统中保存成tahyon-env-bak.sh文件夹

clip_image100

该文件夹中包含两个文件,分别为part-00000part-00001

clip_image102

其中tahyon-env-bak.sh/part-0001文件中内容以下:

clip_image104

另外经过内存存在文件的监控页面能够观测到,这几个操做文件在内存中:

clip_image106

4.3 Tachyon运行MapReduce

4.3.1 修改core-site.xml

该配置文件为$Hadoop_HOME/conf目录下的core-site.xml文件

$cd /app/hadoop/hadoop-2.2.0/etc/hadoop

$vi core-site.xml

修改core-site.xml文件配置,添加以下配置项:

<property>

  <name>fs.tachyon.impl</name>

  <value>tachyon.hadoop.TFS</value>

</property>

<property>

  <name>fs.tachyon-ft.impl</name>

  <value>tachyon.hadoop.TFSFT</value>

</property>

clip_image108

4.3.2 启动YARN

$cd /app/hadoop/hadoop-2.2.0/sbin

$./start-yarn.sh

4.3.3 运行MapReduce例子

第一步   建立结果保存目录

$cd /app/hadoop/hadoop-2.2.0/bin

$./hadoop fs -mkdir /class10

第二步   运行MapReduce例子

$cd /app/hadoop/hadoop-2.2.0/bin

$./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount -libjars $TACHYON_HOME/client/target/tachyon-client-0.5.0-jar-with-dependencies.jar  tachyon://hadoop1:19998/tachyon-env.sh hdfs://hadoop1:9000/class10/output

clip_image110

clip_image112

第三步   查看结果

查看HDFS,能够看到在/class10中建立了output目录

clip_image114

查看part-r-0000文件内容,为tachyon-env.sh单词计数

clip_image116

 

5 、参考资料

(1)TachyonSpark生态系统中的分布式内存文件系统》 http://www.csdn.net/article/2015-06-25/2825056

(2)Tachyon的安装、配置和使用》 http://blog.csdn.net/u014252240/article/details/42238081

(3)Tachyon官方网站http://tachyon-project.org/documentation/Running-Spark-on-Tachyon.html

相关文章
相关标签/搜索