HDFS_缓存

  1. 缓存的含义

    物理层面:利用mmap、mlock这样的系统调用将块数据锁入内存,以此达到在DataNode上缓存数据的效果。
    HDFS缓存块由普通的文件转换而来,因为缓存在DataNode内存中,因此HDFS缓存可以大大提高用户读取文件的速度

  2. 缓存的使用场景

    ① 热点公共资源文件:可以是一些存放于HDFS中的依赖资源jar包,或是一些算法学习依赖的.so文件等。这种场景更好的做法是把它做成分布式缓存,否则在程序中将会发送大量的请求到NameNode中去获取这些资源文件的内容。

    ② 短期临时的热点数据文件:比如每天运行统计的报表数据,需要读取前一天的或是最近一周的数据做离线分析。那么这个时候就可以把符合这个时间段的数据做缓存处理。

  3. 缓存块的确定

    ①CacheBlock(需要缓存的目标数据块)动作,来自于NameNode心跳处理的方法。DataNode获取到心跳返回的缓存命令,进行缓存块的动作,目标缓存块列表也是从心跳回复中获得

    ② UnCacheBlock(不需要缓存的数据块)动作:
    当块执行append写操作的时候
    当把块处理为无效块的时候
    上层NameNode发送uncache回复命令的时候(同①)

    ③ 确定缓存块
    任何少于标准副本块个数的副本应该被缓存到新的节点上
    过量副本数的缓存块应该从节点上进行移除

  4. 缓存的配置

    <name>dfs.datanode.max.locked.memory</name>
    <value>0</value>
    

    DataNode用来缓存块的最大内存空间大小,单位用字节表示。系统变量RLIMIT_MEMLOCK至少需要设置得比此配置值要大。默认情况下,此配置值为0,表示默认关闭内存缓存功能。

    dfs.datanode.fsdatasetcache.max.threads.per.volume: 用于缓存块数据的最大线程数,这个线程数是针对每个存储目录而言,默认值为4
    dfs.cachereport.IntervalMsec: 缓存块上报间隔,默认10秒

  5. 缓存的命令

    bin/hdfs cacheadmin [COMMAND]   
    

    以下为所有的[COMMAND]
    [-addDirective -path -pool [-force] [-replication ] [-ttl ]] //添加缓存单元命令

    [-modifyDirective -id [-path ] [-force] [-replication ] [-pool ] [-ttl ]] //修改缓存单元命令

    [-listDirectives [-stats] [-path ] [-pool ] [-id ]] //列出满足条件的缓存单元列表

    [-removeDirective ] //删除指定id对应的缓存单元

    [-removeDirectives -path ] //删除指定路径对应的缓存单元

    [-addPool [-owner ] [-group ] [-mode ] [-limit ][-maxTtl ]] //添加新的缓存池

    [-modifyPool [-owner ] [-group ] [-mode ] [-limit ] [-maxTtl ]] //修改缓存池

    [-removePool ] //删除指定缓存池

    [-listPools [-stats] []] //列出满足条件的缓存池

    eg:
    新建一个缓存池

    hdfs cacheadmin -addPool regan_test_pool
    

    列出所有的缓存池

    hdfs cacheadmin -listPools
    

    调用addCacheDirective命令并带上必要的参数,然后加入刚刚建好的test_pool缓存池中:

    hdfs cacheadmin -addDirective -path /tmp/regan_file -pool regan_test_pool
    

    进行list查询

    hdfs cacheadmin -listDirectives -pool regan_test_pool -stats
    

    最后,需要开启DataNode的缓存功能:

    <name>dfs.datanode.max.locked.memory</name>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值