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的兼容很是不友好;测试
总之,从集中式缓存来看,收益很是明显,可是还存在一些小问题,在实际应用过程当中还须要优化和改进优化