《深入HDFS》--HDFS缓存

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

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, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值