《深入HDFS》 HDFS快取

2021-10-02 07:45:11 字數 2775 閱讀 3788

hdfs快取是為了減少對資料的重複訪問請求,hdfs的快取通過快取塊實現。

快取塊快取塊由普通檔案塊轉換得來。快取指在要訪問的datanode的記憶體中,訪問時命中快取則無需讀取磁碟,可以大大提高使用者讀取檔案的速度。

快取塊的生命週期

在快取塊中,其內部列舉state**如下:

private

static

enum state

public

boolean

shouldadvertise()

}

可看到由caching(正在快取),caching_chached(快取取消),cached(已快取),uncaching(快取塊正在取消快取狀態)

塊快取狀態儲存在 fsdatasetcache的記憶體類value中

private

static

final

class

value

}

private

final hashmap

newhashmap()

;

synchronized

void

cacheblock

(long blockid, string bpid, string blockfilename,

long length,

long genstamp, executor volumeexecutor)

, pool {} already exists in the fsdatasetcache with state {}"

,new

object

);this

.numblocksfailedtocache.

incrementandget()

;}else

, pool {}"

, blockid, bpid);}

}

同理,塊快取清除時,使用uncacheblock方法,方式類似操作相反

synchronized

void

uncacheblock

(string bpid,

long blockid)

if(prevvalue == null)

else

, pool {}."

, blockid, bpid)

;this

put(key,

newfsdatasetcache.value);

break

;case cached:

this

put(key,

newfsdatasetcache.value);

if(deferred)

is anchored, and can't be uncached now. scheduling it for uncaching in {} "

, key, durationformatutils.

formatdurationhms

(this

.revocationpollingms));

this

.deferreduncachingexecutor.

schedule

(new

fsdatasetcache.uncachingtask

(key,

this

.revocationms)

,this

.revocationpollingms, timeunit.milliseconds);}

else

has been scheduled for immediate uncaching."

, key)

;this

.uncachingexecutor.

execute

(new

fsdatasetcache.uncachingtask

(key,

0l));}

break

;default

: log.

debug

("block with id {}, pool {} does not need to be uncached, because it is in state {}."

,new

object

);this

.numblocksfailedtouncache.

incrementandget()

;}}}

快取設定

datanode 用來快取塊的最大記憶體空間大小,單位用位元組表示。系統變數 rlimit_memlock 至少需要設定

得比此配置值要大,否則datanode會出現啟動失敗的現象。在預設的情況下,此配置值為0,表明預設關閉記憶體快取的功能。

>

>

dfs.datanode.max.locked.memoryname

>

>

dvalue

>

property

>

快取適用場景

快取使用於hdfs中的熱點公共資源檔案和短期臨時的熱點資料檔案

一種是公共資源檔案,如存放在hdfs上共享的全域性資源檔案(jar包等)

一種是短期使用的熱點資料檔案,如每天要做報表統計時,需讀取前一天的資料做分析(如次日留存率,日資料對比等)

《深入HDFS》 HDFS記憶體儲存

hdfs的資料儲存由多種,記憶體儲存是其中的一種,其以機器作為資料儲存的載體。記憶體可能儲存的缺點 1.資料臨時儲存在記憶體中,服務一旦停止 或宕機 資料就丟失 2.資料存在記憶體中,服務停止時持久化到磁碟 為避免以上出現的問題,選用非同步持久化的方式處理,即在記憶體儲存新資料時,持久化最舊的資料。...

深入Nginx PHP 快取詳解

以下是對nginx中的php快取進行了詳細的分析介紹,需要的朋友可以參考下 nginx快取 nginx有兩種快取機制 fastcgi cache和proxy cache 下面我們來說說這兩種快取機制的區別吧 proxy cache作用是快取後端伺服器的內容,可能是任何內容,包括靜態的和動態的 fas...

深入MyBatis 快取機制

mybatis快取機制 mybatis系統預設定義了兩層快取 一級快取和二級快取 一級快取 一級快取即本地快取,作用域預設為sqlsession。當session flush或close後,該session中的所有cache將被清空。本地快取不能被關閉,但可以呼叫clearcache 來清空本地快取...