隨着實時計算的需求日益增多,分佈式內存計算也持續升溫,怎樣將海量數據近乎實時地處理,或者說怎樣把離線批處理的速度再提高到一個新的高度是當前研究的重點。近年來,內存的吞吐量成指數倍增加,而磁盤的吞吐量增加緩慢,那麼將原有計算框架中文件落地磁盤替換爲文件落地內存,也是提升效率的優化點。html
目前已經使用基於內存計算的分佈式計算框架有:Spark、Impala及SAP的HANA等。可是其中不乏一些仍是有文件落地磁盤的操做,若是能讓這些落地磁盤的操做所有落地到一個共享的內存中,那麼這些基於內存的計算框架的效率會更高。java
Tachyon是AmpLab的李浩源所開發的一個分佈式內存文件系統,能夠在集羣裏以訪問內存的速度來訪問存在Tachyon裏的文件。Tachyon是架構在最底層的分佈式文件存儲和上層的各類計算框架之間的一種中間件,其主要職責是將那些不須要落地到DFS裏的文件落地到分佈式內存文件系統中來達到共享內存,從而提升效率。同時能夠減小內存冗餘、GC時間等,Tachyon的在大數據中層次關係以下圖所示:node
Tachyon容許文件之內存的速度在集羣框架中進行可靠的共享,就像Spark和 MapReduce那樣。經過利用信息繼承、內存侵入,Tachyon得到了高性能。Tachyon工做集文件緩存在內存中,而且讓不一樣的 Jobs/Queries以及框架都能之內存的速度來訪問緩存文件。所以,Tachyon能夠減小那些須要常用數據集經過訪問磁盤來得到的次數。git
Tachyon在Spark平臺的部署:總的來講,Tachyon有三個主要的部件:Master, Client,與Worker。在每一個Spark Worker節點上,都部署了一個Tachyon Worker,Spark Worker經過Tachyon Client訪問Tachyon進行數據讀寫。全部的Tachyon Worker都被Tachyon Master所管理,Tachyon Master經過Tachyon Worker定時發出的心跳來判斷Worker是否已經崩潰以及每一個Worker剩餘的內存空間量。github
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。每一個Block可能存在多個副本,被存儲在多個Tachyon Worker中,所以Master裏面也必須記錄每一個Block被存儲的Worker地址;第三,Tachyon Master同時管理着全部的Worker,Worker會定時向Master發送心跳通知本次活躍狀態以及剩餘存儲空間。Master是經過Master Worker Info去記錄每一個Worker的上次心跳時間,已使用的內存空間,以及總存儲空間等信息。web
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)中讀取。shell
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
如今咱們經過一個簡單的場景把各個部件都串起來:假設一個Spark做業發起了一個讀請求,它首先會經過Tachyon Client去Tachyon Master查詢所須要的Block所在的位置。若是所在的Block不在本地的Tachyon Worker裏,此Client則會經過Remote Block In Stream向別的Tachyon Worker發出讀請求,同時在Block讀入的過程當中,Client也會經過Block Out Stream把Block寫入到本地的內存存儲裏,這樣就能夠保證下次一樣的請求能夠由本機完成。瀏覽器
HDFS(Hadoop 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架構示意圖以下圖所示。
Namenode和Datanode被設計成能夠在普通的商用機器上運行,這些機器通常運行着GNU/Linux操做系統。HDFS採用Java語言開發,所以任何支持Java的機器均可以部署Namenode或Datanode。因爲採用了可移植性極強的Java語言,使得HDFS能夠部署到多種類型的機器上。一個典型的部署場景是一臺機器上只運行一個Namenode實例,而集羣中的其餘機器則分別運行一個Datanode實例。這種架構並不排斥在一臺機器上運行多個Datanode,只不過這樣的狀況比較少見。
集羣中單一Namenode的結構大大簡化了系統的架構。Namenode是全部HDFS元數據的仲裁者和管理者,這樣用戶數據永遠不會流過Namenode。
對比HDFS和Tachyon,首先從二者的存儲結構來看,HDFS設計爲用來存儲海量文件的分佈式系統,Tachyon設計爲用來緩存經常使用數據的分佈式內存文件系統。從這點來看,Tachyon能夠認爲是操做系統層面上的Cache,HDFS能夠認爲是磁盤。
在可靠性方面,HDFS採用副本技術來保證出現系統宕機等意外狀況時文件訪問的一致性以及可靠性;而Tachyon是依賴於底層文件系統的可靠性來實現自身文件的可靠性的。因爲相對於磁盤資源來講,內存是很是寶貴的,因此Tachyon經過在其underfs(通常使用HDFS)上寫入CheckPoint日誌信息來實現對文件系統的可恢復性。
從文件的讀取以及寫入方式來看,Tachyon能夠更好地利用本地模式來讀取文件信息,當文件讀取客戶端和文件所在的Worker位於一臺機器上時,客戶端會直接繞過Worker直接讀取對應的物理文件,減小了本機的數據交互。而HDFS在遇到這樣的狀況時,會經過本地Socket進行數據交換,這也會有必定的系統資源開銷。在寫入文件時,HDFS只能寫入磁盤,而Tachyon卻提供了5種數據寫入模式用以知足不一樣需求。
Tachyon目前的最新發布版爲0.7.1,其官方網址爲http://tachyon-project.org/。Tachyon文件系統有3種部署方式:單機模式、集羣模式和高可用集羣模式,集羣模式相比於高可用集羣模式區別在於多Master節點。下面將介紹單機和集羣環境下去安裝、配置和使用Tachyon。
第一步 下載到Tachyon源代碼:
對於已經發布的版本能夠直接從github下載Tachyon編譯好的安裝包並解壓,因爲Tachyon與Spark版本有對應關係,另外該系列搭建環境爲Spark1.1.0,對應下載Tachyon0.5.0,版本對應參考http://tachyon-project.org/documentation/Running-Spark-on-Tachyon.html描述:
下載地址爲https://github.com/amplab/tachyon/releases ,爲如下演示咱們在這裏下載的是tachyon-0.5.0.tar.gz源代碼包,文件大小爲831K,以下圖所示:
第二步 在主節點上解壓縮
$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
爲了更好地契合用戶的本地環境,如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
整個編譯過程編譯了約3個任務,整個過程耗時大約4分鐘。
使用以下命令查看編譯後該Tachyon項目大小爲72M
$cd /app/complied/tachyon-0.5.0-src
$du -s /app/complied/tachyon-0.5.0-src
完成這一步後,咱們就獲得了可以運行在用戶本地環境的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
這裏要注意一點,Tachyon在單機(local)模式下啓動時會自動掛載RamFS,因此請保證使用的帳戶具備sudo權限。
【注】編譯好的Tachyon將本系列附屬資源/install中提供,具體名稱爲10.tachyon-0.5.0-hadoop2.2.0-complied.zip
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
並在tachyon-env.sh中修改具體配置,下面列舉了一些重要的配置項:
lJAVA_HOME:系統中java的安裝路徑
lTACHYON_MASTER_ADDRESS:啓動TachyonMaster的地址,默認爲localhost,因此在單機模式下不用更改
lTACHYON_UNDERFS_ADDRESS:Tachyon使用的底層文件系統的路徑,在單機模式下能夠直接使用本地文件系統,如"/tmp/tachyon",也可使用HDFS,如"hdfs://ip:port"
lTACHYON_WORKER_MEMORY_SIZE:每一個TachyonWorker使用的RamFS大小
完成配置後便可以單機模式啓動Tachyon,啓動前須要格式化存儲文件,格式化和啓動Tachyon的命令分別爲:
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon format
存儲文件爲$TACHYON_HOME/underfs/tmp/tachyon目錄下
使用以下命令啓動Tachyon,能夠看到在/nmt/ramdisk目錄下格式化RamFS
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon-start.sh local
使用JPS命令查看Tachyon進程,分別爲:TachyonWorker和TachyonMaster
查看Tachyon監控頁面,訪問地址爲http://hadoop1:19999
中止Tachyon的命令爲:
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon-stop.sh
集羣包含三個節點(該集羣環境能夠參考第二課《2.Spark編譯與部署(上)--基礎環境搭建》進行搭建),運行進程分佈以下:
序號 |
機器名 |
運行進程 |
核數/內存 |
用戶名 |
目錄 |
|
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 |
Tachyon相關配置文件在$TACHYON_HOME/conf目錄下,對slaves文件中配置須要啓動TachyonWorker的節點,在這裏須要設置hadoop1、hadoop2和hadoop3三個節點:
$cd /app/hadoop/tachyon-0.5.0/conf
$vi slaves
在$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
使用以下命令把hadoop文件夾複製到hadoop2和hadoop3機器
$cd /app/hadoop/
$scp -r tachyon-0.5.0 hadoop@hadoop2:/app/hadoop/
$scp -r tachyon-0.5.0 hadoop@hadoop3:/app/hadoop/
$cd /app/hadoop/hadoop-2.2.0/sbin
$./start-dfs.sh
啓動前須要格式化存儲文件,格式化命令爲:
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon format
能夠看到在HDFS的/tmp建立了tachyon文件夾
在這裏使用SudoMout參數,須要在啓動過程當中輸入hadoop的密碼,具體過程以下:
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon-start.sh all SudoMount
啓動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,此時就成爲僞分佈模式。
使用JPS命令查看Tachyon進程,分別爲:TachyonWorker和TachyonMaster
能夠在瀏覽器內打開Tachyon的WebUI,如 http://hadoop1:19999,查看整個Tachyon的狀態,各個TachyonWorker的運行狀況、各項配置信息和瀏覽文件系統等。
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon runTests
這裏以0.5.0版本爲例,介紹Tachyon中可配置參數的具體含義。Tachyon中的可配置項分爲兩類,一種是系統環境變量,用於在不一樣腳本間共享配置信息;另外一種是程序運行參數,經過-D選項傳入運行Tachyon的JVM中。程序運行參數又分爲:
l 通用配置(Common Configuration)
l TachyonMaster配置(Master Configuration)
l TachyonWorker配置(Worker Configuration)
l 用戶配置(User Configuration)
要修改或添加這些可配置項,可修改conf/tachyon-env.sh文件。
配置項 |
配置項說明 |
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 |
配置項 |
配置項說明 |
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 |
若是啓用,Zookeeper的election文件夾路徑,默認爲/election |
tachyon.zookeeper.leader.path |
若是啓用,Zookeeper的leader文件夾路徑,默認爲/leader |
tachyon.underfs.hdfs.impl |
實現HDFS的類,默認org.apache.hadoop.hdfs,DistributedFileSystem |
tachyon.max.columns |
Tachyon中RawTable容許的最大列數,默認爲1000 |
tachyon.table.metadata.byte |
Tachyon中RawTable元數據容許存儲的最大字節數,默認爲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 |
配置項 |
配置項說明 |
tachyon.master.worker.timeout.ms |
TachyonMaster和TachyonWorker心跳包失效時長,默認爲60000ms |
tachyon.master.journal.folder |
TachyonMaster的journal日誌存放路徑,默認爲$TACHYON_HOME/journal/ |
tachyon.master.hostname |
TachyonMaster的主機名 |
tachyon.master.port |
TachyonMaster的遠程調用通信端口,默認爲19998 |
tachyon.master.web.port |
TachyonMaster的WebUI端口,默認爲19999 |
tachyon.master.web.threads |
TachyonMaster的WebUI線程數,默認爲9 |
tachyon.master.whitelist |
可緩存的路徑前綴列表,列表以逗號隔開,表示該路徑下的文件可以被緩存至內存,默認爲/,即根目錄 |
tachyon.master.temporary.folder |
TachyonMaster的臨時文件夾,默認爲/tmp |
tachyon.master.heartbeat.interval.ms |
TachyonMaster心跳包間隔時間,默認爲1000ms |
tachyon.master.selector.threads |
TachyonMaster的thrift監聽線程數,默認爲3 |
tachyon.master.queue.size.per.selector |
TachyonMaster的thrift消息隊列長度,默認爲3000 |
tachyon.master.server.threads |
TachyonMaster節點的thrift服務線程數,默認爲CPU核數的2倍 |
tachyon.master.pinlist |
常駐內存的文件列表,以逗號隔開,表示該路徑下的文件不會從內存中剔除,默認爲null |
配置項 |
配置項說明 |
tachyon.worker.data.folder |
TachyonWorker在RamFS中的工做路徑,默認爲$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 |
TachyonWorker向TachyonMaster發送心跳包的時間間隔,默認爲1000ms |
tachyon.worker.selector.threads |
TachyonWorker的thrift監聽線程數,默認爲3 |
tachyon.worker.queue.size.per.selector |
TachyonWorker的thrift消息隊列長度,默認爲3000 |
tachyon.worker.server.threads |
TachyonWorker的thrift服務線程數,默認爲CPU核數 |
tachyon.worker.user.timeout.ms |
TachyonWorker和用戶之間心跳包失效時長,默認爲10000ms |
tachyon.worker.checkpoint.threads |
TachyonWorker的checkpoint線程數,默認爲1 |
tachyon.worker.per.thread.checkpoint.cap.mb.sec |
TachyonWorker的checkpoint的速度,默認爲1000MB/s |
tachyon.worker.network.type |
TachyonWorker在傳輸文件數據時使用的傳輸方式,默認爲NETTY,可選爲NIO或NETTY |
配置項 |
配置項說明 |
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 |
Tachyon的命令行界面讓用戶能夠對文件系統進行基本的操做。調用命令行工具使用如下腳本:
$./tachyon tfs
文件系統訪問的路徑格式以下:
tachyon://<master node address>:<master node port>/<path>
在Tachyon命令行使用中tachyon://<master node address>:<master node port>前綴能夠省略,該信息從配置文件中讀取。
能夠經過以下命令查看Tachyon全部接口命令
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon tfs -help
其中大部分的命令含義能夠參考Linux下同名命令,命令含義:
命令 |
含義 |
cat |
將文件內容輸出到控制檯 |
count |
顯示匹配指定的前綴「路徑」的文件夾和文件的數量。 |
ls |
列出指定路徑下全部的文件和目錄信息,如大小等。 |
lsr |
遞歸地列出指定路徑下全部的文件和目錄信息,如大小等。 |
mkdir |
在給定的路徑建立一個目錄,以及任何須要的父目錄。若是路徑已經存在將會失敗。 |
rm |
刪除一個文件。若是是一個目錄的路徑將會失敗。 |
rmr(0.5.0版本不包含) |
刪除一個文件或目錄,以及該目錄下的全部文件夾和文件 |
tail |
輸出指定文件的最後1 kb到控制檯。 |
touch |
在指定的路徑建立一個0字節的文件。 |
mv |
移動指定的源文件或源目錄到一個目的路徑。若是目的路徑已經存在將會失敗。 |
copyFromLocal |
將本地指定的路徑複製到Tachyon中指定的路徑。若是Tachyon中指定的路徑已經存在將會失敗。 |
copyToLocal |
從Tachyon中指定的路徑複製本地指定的路徑。 |
fileinfo |
輸出指定文件的塊信息。 |
location |
輸出存放指定文件的所在節點列表信息。 |
report |
向master報告文件丟失 |
request |
根據指定的dependency ID,請求文件。 |
pin |
將指定的路徑常駐在內存中。若是指定的是一個文件夾,會遞歸地包含全部文件以及任何在這個文件夾中新建立的文件。 |
unpin |
撤銷指定路徑的常駐內存狀態。若是指定的是一個文件夾,會遞歸地包含全部文件以及任何在這個文件夾中新建立的文件。 |
Free(0.5.0版本不包含) |
釋放一個文件或一個文件夾下的全部文件的內存。文件/文件夾在underfs仍然是可用的。 |
在操做以前須要把$TACHYON_HOME/bin配置到/etc/profile 配置文件的PATH中,並經過source /etc/profile生效
將本地$TACHYON_HOME/conf目錄拷貝到Tachyon文件系統的根目錄下的conf子目錄
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon tfs copyFromLocal ../conf /conf
$./tachyon tfs ls /conf
把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
使用ls和lsr命令查看Tachyon文件系統下的文件信息,其中lsr命令能夠遞歸地查看子目錄。
$./tachyon tfs ls /conf
$./tachyon tfs ls tachyon://hadoop1:19998/conf
$./tachyon tfs lsr /
統計當前路徑下的目錄、文件信息,包括文件數、目錄樹以及總的大小
$./tachyon tfs count /
查看指定文件的內容
$./tachyon tfs cat /conf/slaves
$./tachyon tfs cat tachyon://hadoop1:19998/conf/slaves
(1)mkdir:建立目錄,支持自動建立不存在的父目錄;
(2)rm:刪除文件,不能刪除目錄,注意,遞歸刪除根目錄是無效的
(3)rmr:刪除目錄,支持遞歸,包含子目錄和文件,其中0.5.0版本不提供該命令
(4)touch:建立文件,不能建立已經存在的文件。
$./tachyon tfs mkdir /mydir
$./tachyon tfs ls /
$./tachyon tfs rm /mydir
$./tachyon tfs touch /mydir/my.txt
$./tachyon tfs lsr /mydir
$./tachyon tfs rm /mydir/my.txt
$./tachyon tfs touch /mydir2/2/2/my.txt
$./tachyon tfs lsr /mydir2
$./tachyon tfs rm /mydir2
$./tachyon tfs rm /
$./tachyon tfs ls /
pin命令將指定的路徑常駐在內存中,若是指定的是一個文件夾會遞歸地包含全部文件以及任何在這個文件夾中新建立的文件。unpin命令撤銷指定路徑的常駐內存狀態。
pin執行前或unpin執行後的Web Interface界面
$./tachyon tfs pin /conf/log4j.properties
$./tachyon tfs unpin /conf/log4j.properties
修改$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
$cd /app/hadoop/hadoop-2.2.0/sbin
$./start-dfs.sh
在這裏使用SudoMout參數,須要在啓動過程當中輸入hadoop的密碼,具體過程以下:
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon-start.sh all SudoMount
在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>
$cd /app/hadoop/spark-1.1.0/sbin
$./start-all.sh
第一步 準備測試數據文件
使用Tachyon命令行準備測試數據文件
$cd /app/hadoop/tachyon-0.5.0/bin
$./tachyon tfs copyFromLocal ../conf/tachyon-env.sh /tachyon-env.sh
$./tachyon tfs ls /
第二步 啓動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()
把前面的測試文件另存爲tachyon-env-bak.sh文件
scala>s.saveAsTextFile("tachyon://hadoop1:19998/tachyon-env-bak.sh")
第四步 在Tachyon的UI界面查看
能夠查看到該文件在Tachyon文件系統中保存成tahyon-env-bak.sh文件夾
該文件夾中包含兩個文件,分別爲part-00000和part-00001:
其中tahyon-env-bak.sh/part-0001文件中內容以下:
另外經過內存存在文件的監控頁面能夠觀測到,這幾個操做文件在內存中:
該配置文件爲$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>
$cd /app/hadoop/hadoop-2.2.0/sbin
$./start-yarn.sh
第一步 建立結果保存目錄
$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
第三步 查看結果
查看HDFS,能夠看到在/class10中建立了output目錄
查看part-r-0000文件內容,爲tachyon-env.sh單詞計數
(1)《Tachyon:Spark生態系統中的分佈式內存文件系統》 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