eBay對于大家來說都非常熟悉,是美國的一家電商網站,對于他們來講每天的數據都是海量的。目前在eBay的Hadoop集群有數千個節點(具體不方便透漏),支持成千上萬的用戶使用。他們的Hadoop集群存儲數百PB的數據。這篇文章中將探討eBay如何基于數據使用頻率優化大數據存儲。這種方法有助于有效地降低成本。
Hadoop
眾所周知,商品硬件可以集合創建出具有大數據存儲和計算能力的Hadoop集群。部分數據存儲在每個單獨的機器上,數據處理邏輯也同樣在相同的機器上運行。
例如:以每個節點20 TB的存儲容量計算,一個1000個節點的Hadoop集群可以存儲多達20 PB的數據。所有這些機器都有足夠的計算能力來實現Hadoop “把運算帶給數據”的座右銘。
數據溫度
集群里通常存儲著不同類型的數據集,運行不同類型工作負荷的團隊使用這些數據集運算數據。每時每刻,數據管道都傳來大量的數據增加到這些數據集中。
數據集的一個共同特點是重初始使用。在此期間,數據集被認為是“熱的”(HOT)。根據分析,我們發現數據集的使用頻率隨著時間的推移呈現明顯下降局勢,這時存儲的數據一周被訪問幾次,這個階段的數據我們稱其為“溫的”(WARM)數據。接下來的90天,當數據使用率下降到每月幾次,它被定義為 “冷的”(COLD)數據。
因此在最初幾天數據可以被認為是“熱的”(HOT),然后它會在“溫的”(WARM)階段持續一個月。在此期間,工作或應用程序會使用這些數據幾次。接下來數據使用率進一步下滑;數據變為“冷的”(COLD),在之后的九十天里,數據使用只有為數不多的那么幾次。最后,當數據使用屈指可數,頻率降低到一年一兩次的地步,數據的“溫度”就稱為“凍結”。
數據時間 |
一般情況來說,數據溫度與所有數據集息息相關。從上面可以看出,溫度與數據時間是成反比的。其他因素也可以影響一個特定數據集的溫度。你還可以寫出計算數據集溫度的算法。
HDFS的分層存儲
HDFS從Hadoop 2.3版本開始支持分層存儲。
它是如何工作的呢?
正常情況下,一臺機器添加到集群,本地文件系統目錄會被指定存儲該塊的副本。用于指定本地存儲目錄的參數是dfs.datanode.data.dir。另一層,如歸檔層(ARCHIVE),則可以使用名為StorageType的枚舉進行添加。為了表明一個本地目錄是屬于歸檔層的,該目錄的前綴會配置為[ARCHIVE]。從理論上講,Hadoop集群管理員規定多層是次可以存在的。
例如:一個1000個節點的現有集群,它能存儲總計20 PB的數據,現在,在此基礎上添加每個節點存儲量為200 TB的100個節點到該集群上。這些新添加的節點與原有的1000個節點相比,計算能力十分有限。讓我們把所有本地數據目錄的前綴改為ARCHIVE。這100個節點形成了現在的歸檔層,并且可以存儲20 PB的數據。現在,集群的總容量為40 PB,分為兩層——磁盤層和 歸檔層,每層有20 PB的容量。
基于溫度將數據映射到一個存儲層
在這個例子中,我們將高使用率的熱(HOT)數據存儲在具有更好的計算能力節點的磁盤層內。
溫(WARM)數據的大部分副本也保留在磁盤層。至于replication factor為3的數據,我們將在磁盤層存放兩個副本,在歸檔層存放一個副本。
如果是冷(COLD)數據,我們會將每個冷數據塊的至少一個副本存放在磁盤層,所有其他副本存在歸檔層。
當一個數據集被視為是冷凍(FROZEN)的,這意味著它幾乎不會再被使用,將其存儲在具有大量CPU功率以運行多個任務或容器的節點上顯然不是明智的決定。我們會將其保存在具有最小計算能力的節點上。因此,冷凍數據所有數據塊的一切副本都保存在存檔層。
跨層數據流
當數據被添加到集群中,它首先被存儲在默認層,即磁盤層。之后,根據該數據的溫度,它的一個或多個副本被移動到存檔層。Mover可以協助數據從一個存儲層移動到另一個存儲層。Mover的工作方式類似于Balancer,除了它是專門用于跨層數據塊副本移動的工具。Mover接受HDFS路徑、副本數量和目的層信息,然后根據層信息識別要移動的副本,并安排數據從源數據節點移動到目標數據節點。
Hadoop2.6版本用以支持分層存儲的更新
Hadoop 2.6版本的許多改進進一步支持分層存儲。你可以在目錄上掛上存儲策略,以表示數據的溫度。存儲策略規定副本數量需定位在每一層。改變目錄的存儲策略,然后調用該目錄的Mover來使存儲策略起到效果是有可能的。
使用數據的應用程序
根據數據溫度分類,數據的部分或全部副本可能在任意一層上。但對于通過HDFS使用該數據的應用程序來說,數據位置卻是顯而易見的。
即使冷凍數據的所有副本都存儲在歸檔層,應用程序仍然可以訪問它,就像訪問任何HDFS數據。但因為歸檔層節點沒有計算能力,在磁盤層節點上運行的映射任務將讀取歸檔層節點的數據,從而導致該應用程序的網絡流量增加。如果這種情況發生太過頻繁,你可以宣布該數據已成為溫/冷數據,Mover會將其一個或多個副本運回磁盤層。
數據溫度的確定和指定副本移動到預先定義的分層存儲可以做到完全自動化。
在eBay的分層存儲
分層存儲是在eBay一個非常大的集群中已經實現。該集群存有40 PB的數據。我們增加了計算能力有限的額外10 PB存儲空間。目前,每個新機可以存儲220 TB數據。額外的存儲空間已標記為ARCHIVE,一些目錄則根據數據溫度確認為溫數據、冷數據或凍結數據。根據其溫度,所有或其中幾個副本已移動到歸檔存儲空間。
歸檔層每GB的價格僅為磁盤層價格的四分之一,這主要是由于歸檔層的機器只具有非常有限的計算能力,從而降低了成本。
總結
無計算能力的存儲比有計算能力的存儲便宜。我們可以利用數據溫度確保有效使用有計算能力的存儲空間。因為每個數據塊都會被復制幾次(默認為3),根據數據溫度,一些副本可以移動到低成本存儲空間。HDFS支持分層存儲,并提供跨層移動數據的必要工具。分層存儲現已在eBay一個非常大規模的集群中實現歸檔數據功能。