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 ...