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

相關文章
相關標籤/搜索