Spark入門實戰系列--10.分布式內存文件系統Tachyon介紹及安裝部署


【注】該系列文章以及使用到安裝包/測試數據 可以在《傾情大奉送--Spark入門實戰系列》獲取

1Tachyon介紹

1.1 Tachyon簡介

隨着實時計算的需求日益增多,分布式內存計算也持續升溫,怎樣將海量數據近乎實時地處理,或者說怎樣把離線批處理的速度再提升到一個新的高度是當前研究的重點。近年來,內存的吞吐量成指數倍增長,而磁盤的吞吐量增長緩慢,那么將原有計算框架中文件落地磁盤替換為文件落地內存,也是提高效率的優化點。

目前已經使用基於內存計算的分布式計算框架有:SparkImpalaSAPHANA等。但是其中不乏一些還是有文件落地磁盤的操作,如果能讓這些落地磁盤的操作全部落地到一個共享的內存中,那么這些基於內存的計算框架的效率會更高。

TachyonAmpLab李浩源所開發的一個分布式內存文件系統,可以在集群里以訪問內存的速度來訪問存在Tachyon里的文件。Tachyon是架構在最底層的分布式文件存儲和上層的各種計算框架之間的一種中間件,其主要職責是將那些不需要落地到DFS里的文件落地到分布式內存文件系統中來達到共享內存,從而提高效率。同時可以減少內存冗余、GC時間等,Tachyon的在大數據中層次關系如下圖所示:

clip_image002

 Tachyon允許文件以內存的速度在集群框架中進行可靠的共享,就像Spark MapReduce那樣。通過利用信息繼承、內存侵入,Tachyon獲得了高性能。Tachyon工作集文件緩存在內存中,並且讓不同的 Jobs/Queries以及框架都能以內存的速度來訪問緩存文件。因此,Tachyon可以減少那些需要經常使用數據集通過訪問磁盤來獲得的次數。

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剩余的內存空間量。

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的上次心跳時間,已使用的內存空間,以及總存儲空間等信息。

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)中讀取。

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM