《深入HDFS》 HDFS記憶體儲存

2021-10-02 07:20:27 字數 1828 閱讀 3850

hdfs的資料儲存由多種,記憶體儲存是其中的一種,其以機器作為資料儲存的載體。

記憶體可能儲存的缺點:

1.資料臨時儲存在記憶體中,服務一旦停止(或宕機),資料就丟失

2.資料存在記憶體中,服務停止時持久化到磁碟

為避免以上出現的問題,選用非同步持久化的方式處理,即在記憶體儲存新資料時,持久化最舊的資料。

hdfs使用lazy_persist記憶體儲存策略:

非同步儲存步驟如下:

l )對目標檔案目錄設定 storagepolicy 為 lazy_persist 的記憶體儲存策略。

2 )客戶端程序向 namenode 發起建立/寫檔案的請求 。

3 )客戶端請求到具體的 datanode 後 datanode 會把這些資料塊寫入 ram 記憶體中,同

時啟動非同步執行緒服務將記憶體資料持久化寫到磁碟上 。

檔案記憶體儲存策略設定

檔案儲存策略預設使用的是: storagepolicy.default

如果要使用記憶體儲存,可使用如下方法:

1.命令列

hdfs storagepolicies -setstoragepolicy -path  -policy lazy_ persist
2.呼叫程式
fsdataoutputstream fos =fs.

create

(path ,fspermission.

getfiledefault()

,enumset.

of(createflag.create , createflag.lazy_persist)

,bufferlength,replicationfactor,blocksize,null)

;// dfsclient 建立檔案方法

public dfsoutputstream create

(string src , fspermission permission,enumset

flag,

short replication,

long blocksize,progressable progress,

int buffersize, checksumopt checksumopt)

throws ioexception

lazy_persist的使用

因使用的是記憶體儲存,儲存介質是ram_disk,因此在使用之前需設定虛擬記憶體。如tmpfs檔案系統,tmpfs被掛在到/dev/shm,實際上儲存在該目錄下的檔案是儲存在記憶體中的。

如果想要更改,則進行設定:

sudo

mount t tmpfs -o size=16g tmpfs /mnt/dn-tmpfs/

將虛擬記憶體盤設定到dfs.datanode.data.dir中,如:

>

>

dfs.datanode data . dirname

>

>

/grid/0 , /grid/l , /grid/2, [ram_disk] /mnt/dn-tmpfsvalue

>

property

>

使用時應確認異構儲存策略是否被關閉,屬性dfs.storage.policy.enabled

確認是否設定最大記憶體, dfs.datanode.max.locked.memory,看看是否超過datanode界定啊的最大記憶體大小。

《深入HDFS》 HDFS快取

hdfs快取是為了減少對資料的重複訪問請求,hdfs的快取通過快取塊實現。快取塊快取塊由普通檔案塊轉換得來。快取指在要訪問的datanode的記憶體中,訪問時命中快取則無需讀取磁碟,可以大大提高使用者讀取檔案的速度。快取塊的生命週期 在快取塊中,其內部列舉state 如下 private stati...

mysql 索引 記憶體 深入了解MySQL儲存索引

一 關於儲存引擎 建立合適的索引是sql效能調優中最重要的技術之一。在學習建立索引之前,要先了解mysql的架構細節,包括在硬碟上面如何組織的,索引和記憶體用法和操作方式,以及儲存引擎的差異如何影響到索引的選擇。myisam 一種非事務性的儲存引擎,是mysql 5.5之前版本預設的儲存引擎。inn...

深入談談整型 浮點型在記憶體中的儲存方式

一 正整型 正整型,沒什麼好說的,就是補碼儲存方式,正數的補碼和原碼相同,即先轉換為二進位制,然後高位擴充套件0,一直填充至32位 比如 5這個數的儲存方式如下 先轉換為二進位制 101 因為只有3位,所以前面填充29個0,即 00000000 00000000 00000000 00000101 ...