HDFS缓存
hdfs缓存是为了减少对数据的重复访问请求,hdfs的缓存通过缓存块实现。
缓存块
缓存块由普通文件块转换得来。缓存指在要访问的dataNode的内存中,访问时命中缓存则无需读取磁盘,可以大大提高用户读取文件的速度。
缓存块的生命周期
在缓存块中,其内部枚举State代码如下:
private static enum State {
CACHING,
CACHING_CANCELLED,
CACHED,
UNCACHING;
private State() {
}
public boolean shouldAdvertise() {
return this == CACHED;
}
}
可看到由CACHING(正在缓存),CACHING_CHACHED(缓存取消),CACHED(已缓存),UNCACHING(缓存块正在取消缓存状态)
块缓存状态保存在 FSDatasetCache的内存类Value中
private static final class Value {
final FsDatasetCache.State state;
final MappableBlock mappableBlock;
Value(MappableBlock mappableBlock, FsDatasetCache.State state) {
this.mappableBlock = mappableBlock;
this.state = state;
}
}
其中块Id对象和Value对象组成缓存映射图,保存在变量mappableBlockMap中
private final HashMap<ExtendedBlockId, FsDatasetCache.Value> mappableBlockMap = new HashMap();
块缓存时,通过传入的块的各种参数信息,使用cacheBlock方法缓存,并将块ID–>Value数据加到mappableBlockMap中
synchronized void cacheBlock(long blockId,

本文深入探讨HDFS缓存,旨在减少重复数据访问。缓存块作为基本单元,存储在DataNode内存中,提高读取速度。文章详细介绍了缓存块的生命周期,包括CACHING、CACHED和UNCACHING等状态。缓存设置涉及最大缓存空间配置,确保DataNode正常运行。最后,讨论了缓存适用于公共资源文件和短期热点数据文件的场景。
最低0.47元/天 解锁文章
2889

被折叠的 条评论
为什么被折叠?



