2.3添加了集中式緩存管理,由Datanode堆外內存組成,Namenode統一管理node
第二階段:
Datanode把文件存放位置告訴DFSClient)緩存
DFSClient—socket—>Datanode (拿到文件存放地址) DFSClient直接去讀取本地文件 問題:雖然避免一次中轉,但存在權限問題(安全漏洞)
短路讀安全
DFSClient經過Unix Domain Socket機制向Datanode獲取文件描述符 解決了安全的問題 問題 ① Namenode並不知道這些Cache,在分配讀的時候會重複建立Cache ② Cache對任務調度透明,可能會出現低優先級Cache淘汰高優先級Cache
第三階段:集中式緩存app
第一個值默認是0,表示集中式緩存特性關閉,應該設置爲適當的值打開該特性
須要注意:系統memlock至少與配置值相同(該值依賴於系統memlock)socket
## 單位是byte <property> <name>dfs.datanode.max.locked.memory</name> <value>0</value> </property> ##################如下配置不是必須################################ <property> <name>dfs.namenode.path.based.cache.refresh.interval.ms</name> <value>30000</value> </property> <property> <name> dfs.namenode.path.based.cache.block.map.allocation.percent </name> <value>0.25</value> </property> <property> <name>dfs.cachereport.intervalMsec</name> <value>10000</value> </property> property> <name>dfs.datanode.fsdatasetcache.max.threads.per.volume</name> <value>4</value> </property>
$HADOOP_HOME/bin/hdfs cacheadmin -addPool factPool -owner hadoop-user -group hadoop-user -mod 777 -limit 1024000000 -ttl 2d $HADOOP_HOME/bin/hdfs cacheadmin -addDirective -path /user/hive/warehouse/dw.db/user -pool factPool -force -replication 3 -ttl 1d
內存資源通常比較有限,應更合理的去使用oop
經過前述分析,能夠看到HDFS集中式緩存優點很是明顯:
一、顯著提高數據讀性能;
二、提高集羣內存利用率;性能
雖然優點明顯,可是HDFS集中式緩存目前還有一些不足:
一、內存置換策略尚不支持,若是內存資源不足,緩存會失敗;(查詢最新官網看看而且作測試)
二、集中式緩存與Balancer之間還不能很好的兼容,大量的Block遷移會形成頻繁內存數據交換;
三、緩存能力僅對讀有效,對寫來講其實存在反作用,尤爲是append;
四、與Federation的兼容很是不友好;測試
總之,從集中式緩存來看,收益很是明顯,可是還存在一些小問題,在實際應用過程當中還須要優化和改進優化