如何使用分層存儲讓 HDFS 變得更高效?
在eBay,我們運轉著多個由幾千個節點構成的Hadoop集群,提供給成千上萬的人使用。在這些Hadoop集群中我們存儲了幾千PB的數據。我們在本文探討了如何基于數據使用頻率來優化大數據存儲。實驗表明該方法有效降低了經濟成本。
Hadoop 及其承諾
眾所周知,商用硬件可以組裝起來創建擁有大數據存儲和計算能力的Hadoop集群。將數據拆分成多個部分,分別存儲在每個單獨的機器上,數據處理邏輯也在同樣的機器上執行。
例如:一個1000個節點組成的Hadoop集群,單節點容量有20TB,最多可以存儲20PB的數據。因此,所有的這些機器擁有足夠的計算能力來履行Hadoop的口號:“take compute to data”。
數據的溫度
集群中通常存儲著各種不同類型的數據集,不同的團隊通過該集群可以共享地處理他們不同類型的工作任務。通過數據管道,每個數據集每時每刻都會得到增長。
數 據集有一個共同特點就是初始的使用量會很大。在此期間,數據集被認為是“熱(HOT)”的。我們通過分析發現,隨著時間的推移,使用率會有一定程度的下 降,存儲的數據每周僅僅就被訪問幾次,逐漸就變為“溫(WARM)”數據。在此后90天中,當數據使用率跌至一個月幾次時,它就被定義為“冷 (COLD)”數據。
因此數據在最初幾天被認為是“熱”的,此后***個月仍然保持為“溫”的。在這期間,任務或應用會使用幾次該數據。隨著 數據的使用率下降得更多,它就變“冷”了,在此后90天內或許只被使用寥寥幾次。最終,當數據一年只有一兩次使用頻率、極少用到時,它的“溫度”就是“冰 凍”的了。
Data Age |
Usage Frequency |
Temperature |
Age < 7 days |
20 times a day |
HOT |
7 days > Age < 1 month |
5 times a week |
WARM |
1 month < Age < 3 months |
5 times a month |
COLD |
3 months < Age < 3 years |
2 times a year |
一般來講,溫度與每個數據集都緊密相關。在這個例子中,溫度是與數據的年齡成反比的。一個特定數據集的溫度也受其他因素影響的。你也可以通過算法決定數據集的溫度。
HDFS的分層存儲
HDFS從Hadoop2.3開始支持分層存儲
它是如何工作的呢?
正常情況下,一臺機器添加到集群后,將會有指定的本地文件系統目錄來存儲這塊副本。用來指定本地存儲目錄的參數是dfs.datanode.dir。另一層中,比如歸檔(ARCHIVE)層,可以使用名為StorageType的枚舉來添加。為了表明這個本地目錄屬于歸檔層,該本地目錄配置中會帶有[ARCHIVE]的前綴。理論上,hadoop集群管理員可以定義多個層級。
比 如說:如果在一個已有1000個節點,其總存儲容量為20PB的集群上,增加100個節點,其中每個節點有200TB的存儲容量。相比已有的1000個節 點,這些新增節點的計算能力就相對較差。接下來,我們在所有本地目錄的配置中增加ARCHIVE的前綴。那么現在位于歸檔層的這100個節點將會有 20PB的存儲量。***整個集群被劃分為兩層——磁盤(DISK)層和歸檔(ARCHIVE)層,每一層有20PB的容量,總容量為40PB。
基于溫度將數據映射到存儲層
在這個例子中,我們將在擁有更強計算能力節點的DISK層存儲高頻率使用的“熱(HOT)”數據。
至于“溫(WARM)”數據,我們將其大部分的副本存儲在磁盤層。對于復制因子(replication factor)為3的數據,我們將在磁盤層存儲其兩個副本,在歸檔層存儲一個副本。
如果數據已經變“冷(COLD)”,那么我們至少將在磁盤層存儲其每個塊的一個副本。余下的副本都放入歸檔層。
當 一個數據集為認為是“冰凍(FROZEN)”的,這就意味著它幾乎已經不被使用,將其存儲在具有大量CPU、能執行眾多任務節點或容器的節點上是不明智 的。我們會把它存儲到一個具有最小計算能力的節點上。因此,所有處于“冰凍(FROZEN)”狀態塊的全部副本都可以被移動到歸檔層。
跨層的數據流
當 數據***次添加到集群中,它將被存儲到默認的磁盤層。基于數據的溫度,它的一個或多個副本將被移動到歸檔層。移動器就是用來把數據從一個層移動到另一層 的。移動器的工作原理類似平衡器,除了它可以跨層地移動塊的副本。移動器可接受一條HDFS路徑,一個副本數目和目的地層信息。然后它將基于所述層的信息 識別將要被移動的副本,并調度數據在源數據節點到目的數據節點的移動。
Hadoop 2.6中支持分層存儲的變化
Hadoop 2.6中有許多的改進使其能夠進一步支持分層存儲。你可以附加一個存儲策略到某個目錄來指明它是“熱(HOT)”的,“溫(WARM)”的,“冷 (COLD)”的, 還是“冰凍(FROZEN)”的。存儲策略定義了每一層可存儲的副本數量。我可以改變目錄的存儲策略并啟動該目錄的移動器來使得策略生效。
使用數據的應用
基于數據的溫度,數據的部分或者全部副本可能存儲在任一層中。但對于通過HDFS來使用數據的應用而言,其位置是透明的。
雖 然“冰凍”數據的所有副本都在歸檔層,應用依然可以像訪問HDFS的任何數據一樣來訪問它。由于歸檔層中的節點并沒有計算能力,運行在磁盤層的映射 (map)任務將從歸檔層的節點上讀取數據,但這會導致增加應用的網絡流量消耗。如果這種情況頻繁地發生,你可以指定該數據為“溫/冷”,并讓移動器移回 一個或多個副本到磁盤層。
確定數據溫度以及完成指定的副本移動至預先定義的分層存儲可以全部自動化。
eBay的分層存儲
eBay 在其中一個具有非常大規模的集群上使用了分層存儲。該集群擁有40PB的數據。我們又額外增加了10PB計算能力受限的存儲容量。每一個新的機器都可以存 儲220TB。我們把增加的存儲標記為歸檔層,并把一些目錄標識為“溫”、“冷”或者“冰凍”。然后根據它們的溫度,移動所有或部分的副本到歸檔層。
每GB歸檔層的價格要比磁盤層價格低四倍。這種差異主要是由于在歸檔層的機器具有非常有限的計算能力,故降低了成本。
總結
無 計算能力的存儲比有計算能力的存儲要便宜。我們可以依據數據的溫度來確保具計算能力的存儲能得到充分地使用。因為每一個分塊的數據都會被復制多次(默認是 3次),根據數據的溫度,許多副本都會被移動到低成本的存儲中。HDFS支持分層存儲并提供必要的工具來進行跨層的數據移動。eBay已經在其一個非常大 規模的集群上啟用了分層存儲,用來進行數據存檔。
Benoy Antony 是Apache Hadoop委員會的一名成員,他關注于HDFS和Hadoop安全性的研究。作為一名軟件工程師,Benoy就職于eBay數據基礎設施和服務部門。