天天看點

大資料存儲平台之異構存儲實踐

經常做資料處理的夥伴們肯定會有這樣一種體會:最近一周内的資料會被經常使用到,而比如最近幾周的資料使用率會有下降,每周僅僅被通路幾次;在比如3月以前的資料使用率會大幅下滑,存儲的資料可能一個月才被通路幾次。這就産生了一種熱和冷資料,對需要頻繁通路的資料我們稱之為“熱”資料,反之我們稱之為”冷”資料,而處于中間的資料我們稱之為”溫”資料。在資料被視為公司資産的時代,每個公司基本都會儲存最近數年的資料,而這些資料尤其是冷資料的累積也給存儲平台帶來了甜蜜的負擔。下面就來分享下如何解決這些“負擔”。首先如何定義資料為冷熱資料呢,eBay公司根據資料年齡和使用頻率來定義不失為一種辦法,下圖為eBay關于資料溫度的定義

 資料age 

 使用頻率

溫度

Age < 7天

1天20次

HOT

7 天 > Age < 1 月

1周5次

WARM

1 月 < Age < 3 月

1月5次

COLD

3 月 < Age < 3 年

1年2次

FROZEN

從Hadoop2.6開始,HDFS更好的支援了這種冷熱資料的分離存儲,我們可以按HDFS路徑指定其存儲政策,目前HDFS支援的存儲政策有:HOT、WARM、COLD、All_SSD、One_SSD、Lazy_Persist,我們着重介紹SSD相關的存儲政策,具體如下:

All_SSD - 用于将所有副本存儲在SSD中

One_SSD - 用于将其中一個副本存儲在SSD中。剩餘的副本存儲在DISK中

Lazy_Persist - 用于在記憶體中寫入單個副本的塊。該副本首先寫入RAM_DISK,然後在DISK中延續

1.  如果檔案或目錄特定于存儲政策,則傳回。

2.  對于未指定的檔案或目錄,如果是根目錄,則傳回預設存儲政策。否則,傳回其父級的有效存儲政策。

我們在實踐過程中,因為有一部分實時分析的需求,一部分是曆史資料的儲存,曆史資料很少參與計算,隻需偶爾查詢會用到。那麼對于曆史資料來說,我們可以使用一批計算能力較弱,而硬碟較多、容量較大的SATA盤,而實時分析的場景,需要高性能的計算力和硬碟吞吐能力,我們選用SSD硬碟來支撐,此外HDFS還提供了記憶體存儲類型,但我們的記憶體還是有限,暫未使用到。實際上,我們的每台伺服器的12塊硬碟slot中有3個是SSD,其餘9個是SATA。我們實踐結果表明,使用這種政策的效果比以前好了4倍以上。

要使用存儲政策,我們需要在在每個資料節點上hdfs-site.xml中參數dfs.datanode.data.dir配置的由逗号分隔的存儲位置使用的存儲類型進行标記。例如:

2.      使用[SSD]file:/// dfs/dn來辨別這個存儲位置為SSD硬碟

此外,預設情況下的存儲格式為DISK。

下面介紹設定存儲政策指令:

         hdfsstoragepolicies -setStoragePolicy -path <path> -policy <policy>

相應的擷取存儲政策指令為:

總結下:我們可以在一個限定的Hadoop叢集中進行設定不同的磁盤使用不同的存儲政策,還可以利用API将資料存儲到不同的存儲層。HDFS設計的詳細存儲類型和存儲政策如下表,有興趣的同學可以看看:

Policy ID

Policy Name

Block Placement (n  replicas)

Fallback storages for creation

Fallback storages for replication

15

Lazy_Persist

RAM_DISK: 1, DISK: n-1

DISK

12

All_SSD

SSD: n

10

One_SSD

SSD: 1, DISK: n-1

SSD, DISK

7

Hot (default)

DISK: n

<none>

ARCHIVE

5

Warm

DISK: 1, ARCHIVE: n-1

ARCHIVE, DISK

2

Cold

ARCHIVE: n

注:HDFS新加的ARCHIVE存儲類型, 它是一種支援PB級的高容量存儲但很少的 計算能力,用于歸檔資料使用,從上圖可以看出冷資料适合使用archive存儲類型

繼續閱讀