如何使用分層儲存讓 HDFS 變得更高效?

2021-09-23 02:53:14 字數 3579 閱讀 9036

在ebay,我們運轉著多個由幾千個節點構成的hadoop集群,提供給成千上萬的人使用。在這些hadoop集群中我們儲存了幾千pb的資料。我們在本文**了如何基於資料使用頻率來優化大資料儲存。實驗表明該方法有效降低了經濟成本。

hadoop 及其承諾

眾所周知,商用硬體可以組裝起來建立擁有大資料儲存和計算能力的hadoop集群。將資料拆分成多個部分,分別儲存在每個單獨的機器上,資料處理邏輯也在同樣的機器上執行。

例如:乙個1000個節點組成的hadoop集群,單節點容量有20tb,最多可以儲存20pb的資料。因此,所有的這些機器擁有足夠的計算能力來履行hadoop的口號:「take compute to data」。

資料的溫度

集群中通常儲存著各種不同型別的資料集,不同的團隊通過該集群可以共享地處理他們不同型別的工作任務。通過資料管道,每個資料集每時每刻都會得到增長。

數 據集有乙個共同特點就是初始的使用量會很大。在此期間,資料集被認為是「熱(hot)」的。我們通過分析發現,隨著時間的推移,使用率會有一定程度的下 降,儲存的資料每週僅僅就被訪問幾次,逐漸就變為「溫(warm)」資料。在此後90天中,當資料使用率跌至乙個月幾次時,它就被定義為「冷 (cold)」資料。

因此資料在最初幾天被認為是「熱」的,此後第乙個月仍然保持為「溫」的。在這期間,任務或應用會使用幾次該資料。隨著 資料的使用率下降得更多,它就變「冷」了,在此後90天內或許只被使用寥寥幾次。最終,當資料一年只有一兩次使用頻率、極少用到時,它的「溫度」就是「冰 凍」的了。

一般來講,溫度與每個資料集都緊密相關。在這個例子中,溫度是與資料的年齡成反比的。乙個特定資料集的溫度也受其他因素影響的。你也可以通過演算法決定資料集的溫度。

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已經在其乙個非常大 規模的集群上啟用了分層儲存,用來進行資料存檔。

如何讓Object 變得有序

如何讓object 變得有序 1,方法一 繼承comparable,實現compareto方法,compareto 只有乙個引數,但它有四個限制條件,具體我也沒有研究,可檢視相關資訊。如果該類實現這個方法 它就具有比較規則定義,那麼以後放在collection中就能實現直接排序,或者與另乙個同 類的...

如何讓介面變得小清新

繁瑣複雜的介面會讓瀏覽網頁的人莫名煩躁,所以現在要說的是如何化複雜為簡單,視覺介面上的設計無論是web 移動或客戶端,要想視覺更加清爽下面的建議都會有幫助的。1.讓布局更有空間感 在乙個有限的空間裡塞滿大量的元素和資訊,就算設計再華麗,資訊再精彩,焦點還是無法長期停留在該空間。對於資訊量豐富的介面,...

如何讓生活變得更美好

我的秘訣是就是多做一些自己讓自己真正感覺愉悅和自豪的事,不是沉迷於電影,電視,等精神鴉片,而是做些實實在在,有益身心的事,騎車,跑步,游泳來強健體魄,寫程式,寫書,改 善自己的 境遇,把自己想做的事付諸實施,變成現實,這些才能真正地讓生活變得更美好.在這個前所未有的年代,在剩下的時光裡,先做這三件事...