HDFS中的集中缓存(Centralized Cache Management in HDFS)
来源:互联网 发布:正版游戏 知乎 编辑:程序博客网 时间:2024/06/05 16:10
集中缓存有两层概念:
- 第一层是缓存,即为存储在HDFS中文件提供缓存的机制,从而可以加速DFSClient对文件的读操作;
- 第二层概念是集中式的管理,传统的HDFS缓存依赖了OS本身的缓存机制,但是这种缓存机制不能被管理员或中央节点进行管理,不能自由的控制哪些文件缓存,哪些文件不进行缓存;集中式的管理可以提高了对缓存内存的可控性;
HDFS中集中缓存架构如下所示:
- User通过api入口与NN进行交互,告诉NN缓存哪些文件,或者取消对那些文件的缓存;
- NN中维护了缓存path列表;在每次接受到User的缓存请求时候,把请求的Path转化为一系列的Blocks,并把这些Blocks加入到一个待cache的队列中
- 在DN中缓存的真实内容是Blocks,在DN每次心跳协议与NN进行交互时候,NN会把属于该DN的缓存的Blocks放在心跳协议的返回值中返回给DN,DN进行缓存中
- 同时DN维持一个NN之间类似心跳协议的定时协议,定时同步DN中缓存Block的状态;
- DFSClient在读取缓存中的文件Blocks时,可以直接从Cache中读取;
HDFS集中缓存两个主要概念:Cache Directive和Cahce Pool
- Cache Directive:一个directive是一个缓存的path,它可以是目录,也可以是文件;注意:目录的缓存是非递归的,只缓存目录内第一层的文件,不会缓存目录中目录;一个Directive有一个参数replication,表示该path的缓存的副本数;注意,可以对一个文件进行多次缓存;一个Directive有一个参数expiration,可以控制缓存的TTL(time-to-live),目前该时间为绝对时间,可以表示为分钟,小时和天数,比如 -ttl 30m, 4h, 2d。 测试显示一个cache过期了,NN不会自动将它从缓存列表中删除,只是在不再反馈给DFSClient进行读操作,cache的内存是否会自动释放,待测试; 测试结果表示不会释放内存,所以过期的cache,还是需要手动的去删除它;
- Cache Pool:是Cache的管理单元,每个Pool拥有与Unix相似的权限,同时Pool也有quota limit限制
cacheadmin 命令行控制
- Directive控制:集中缓存中一个文件是否会被缓存,完全用管理员来控制,管理员可以通过" hdfs cacheadmin -addDirective"来添加缓存,该命令会返回一个缓存id;“hdfs cacheadmin -removeDirective”通过该命令来删除指定缓存id的缓存;“ hdfs cacheadmin -removeDirectives”通过该命令来删除指定缓存path的缓存,该命令可以一次删除多个缓存;“hdfs cacheadmin -listDirectives”显示当前所有的缓存;详细的参数,在命令行中输入 hdfs cacheadmin可以看得到;或者参考:http://hadoop.apache.org/docs/r2.3.0/hadoop-project-dist/hadoop-hdfs/CentralizedCacheManagement.html 官方文档
- Pool控制:可以通过"hdfs cacheadmin -addPool"创建一个pool,“hdfs cacheadmin -modifyPool”删除一个pool,"hdfs cacheadmin -removePool"删除一个pool,“ hdfs cacheadmin -removePool”删除一个pool
HDFS相关配置信息:
- dfs.datanode.max.locked.memory:集中cache的[必须配置]官方描述如下"The amount of memory in bytes to use for caching of block replicas in memory on the datanode. The datanode's maximum locked memory soft ulimit (RLIMIT_MEMLOCK) must be set to at least this value, else the datanode will abort on startup. By default, this parameter is set to 0, which disables in-memory caching. If the native libraries are not available to the DataNode, this configuration has no effect." ;单位为byte,默认该值为0,从描述中可以看到。如果该值为0,相当于关闭了集中缓存的功能;同时该值不能大于ulimit的限制;从描述中还可以看到,集中缓存对native lib有依赖,描述如下:"In order to lock block files into memory, the DataNode relies on native JNI code found in libhadoop.so. Be sure to enable JNI if you are using HDFS centralized cache management."
- dfs.cachereport.intervalMsec:单位为毫秒,用于控制DN向NN汇报DN上缓存的状态,,默认为10秒;
- dfs.namenode.path.based.cache.refresh.interval.ms:NN维持的cahce会可以自动更新,如果文件被追加写,目录下面新增了文件,NN会扫描path所有的block进行更新;该参数就是用来控制这个扫描的间隔,单位为毫秒,默认为5分钟;
- dfs.datanode.fsdatasetcache.max.threads.per.volume:DN中维护缓存的状态或者IO读写的线程数,默认为4
Jira:https://issues.apache.org/jira/browse/HDFS-4949
0 0
- HDFS中的集中缓存(Centralized Cache Management in HDFS)
- HDFS中的集中缓存 (Centralized Cache Management in HDFS)
- Centralized Cache Management in HDFS
- Centralized Cache Management in HDFS
- HDFS集中式缓存管理(Centralized Cache Management)
- HDFS集中式缓存管理(Centralized Cache Management)
- HDFS缓存集中管理特性:Centralized Cache Management
- HDFS centralized cache management
- HDFS新特性Centralized Cache Management介绍
- Hadoop浅解Centralized Cache Management(集中式缓存管理)
- HDFS中的集中化缓存管理
- HDFS集中式的缓存管理原理与代码剖析
- HDFS集中式的缓存管理原理与代码剖析
- HDFS集中式的缓存管理原理与代码剖析
- HDFS集中化缓存管理
- HDFS缓存机制
- HDFS中心缓存管理
- HDFS缓存机制
- Linux上ipv6的RA配置
- ubuntu+apache2+php5+mysql5.0的安装(apt-get安装路径)
- JNI 数据类型
- 公司只能给你位置,不能给你未来
- linux命令学习
- HDFS中的集中缓存(Centralized Cache Management in HDFS)
- Oracle 触发器 插入,更新,删除,数据同步,两表同步
- ZOJ Problem Set - 3782 Ternary Calculation
- 网页灰色效果样式
- Android uses-permission权限大全
- 客户端登录界面,根据输入框的弹出改变界面样式,解决键盘挡住输入框的问题
- 蛋疼的让C#控制台程序(Console)像窗体(Winform)一样(关闭,托盘图标,事件响应,手动退出等)
- UVA 12105 - Bigger is Better(DP+高精度)
- [leetcode] Merge Sorted Array 直接插入排序法解题