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 來清空本地快取...