Hadoop官网翻译 【HDFS集中式缓存管理】

背景

显式的缓存机制,允许用户指定HDFS缓存路径。NameNode和块对应的datanode交互,要求缓存到off-heap上。
具有许多优点:

  • 防止缓存抖动,热数据频繁换入换出
  • NameNode掌握缓存信息
  • 客户端可以通过高效的读API(零拷贝读)从内存中读取,Datanode只校验一下即可。
  • 集中式管理防止多次缓存。(依赖单个DN的OS缓存时,可能导致重复。)
  • 可以采用一些非易失性存储,例如SCM缓存。

架构在这里插入图片描述

NN定期从DN获取缓存块的报告。NN可以像操作文件一样操作缓存。
NN定时扫描,决定哪些块可以缓存或者不缓存,将具体的缓存工作给DN。
也可以用户触发扫描,比如说移除缓存指令集。
坏块不会进行缓存。

定义

缓存指令

表示的是哪些文件需要被缓存,目录的话是非递归的,值缓存一级。
其他的参数,比如说复制因子,过期时间。多个缓存指令在同一个文件的话,以多的复制因子为准。
缓存指令过期时,NN不会考虑该缓存。

缓存池

管理缓存指令组的实体,规定了用户访问缓存组的权限等。
缓存池可以设置最大容量限制,通常设置为HDFS缓存保留的聚合缓存量。缓存池中还跟踪了统计信息。

cacheAdmin

用户用来和缓存池交互的指令,缓存指令和缓存池都有唯一id

  • addPool
    pool名称需要自定义唯一字符串,可以设置权限和容量,ttl等···
hdfs cacheadmin -addPool <name> [-owner <owner>] [-group <group>] [-mode <mode>] [-limit <limit>] [-maxTtl <maxTtl>]
  • modifyPool
hdfs cacheadmin -modifyPool <name> [-owner <owner>] [-group <group>] [-mode <mode>] [-limit <limit>] [-maxTtl <maxTtl>]
  • removePool
hdfs cacheadmin -removePool <name>
  • listPool
    stats 显示统计信息
hdfs cacheadmin -listPools [-stats] [<name>]
[root@cdp hadoop-3.3.1]# hdfs cacheadmin -listPools -stats
Found 1 result.
NAME       OWNER  GROUP  MODE        LIMIT  MAXTTL  DEFAULT_REPLICATION  BYTES_NEEDED  BYTES_CACHED  BYTES_OVERLIMIT  FILES_NEEDED  FILES_CACHED
test_pool  root   root   rwxr-xr-x    1000   never                    1         31124             0            30124             4             0

  • addDirective
    如果超过cachepool设置的策略,可以报错。使用-force强制
 hdfs cacheadmin -addDirective -path <path> -pool <pool-name> [-force] [-replication <replication>] [-ttl <time-to-live>]
  • listDirectives
hdfs cacheadmin -listDirectives [-stats] [-path <path>] [-pool <pool>]
  • removeDirective
hdfs cacheadmin -removeDirective <id>
  • listDirectives
    只能显示当前路径的缓存
hdfs cacheadmin -listDirectives [-stats] [-path <path>] [-pool <pool>]

配置要求

Native Libraries配置

为了将文件锁到内存中,需要JNI支持。
NativeLibraries就支持三个事情

  • compression
  • native io
  • crc32

通过hadoop checknative -a检查
可以安装配置PMDK

DRAM配置文件配置(持久内存缓存)

  • dfs.datanode.max.locked.memory
    设置可用内存大小,默认是0
  • dfs.datanode.pmem.cache.dirs
    设置持久缓存容量

可选配置项

  • dfs.namenode.path.based.cache.refresh.interval.ms
    namenode多久扫描一次缓存,默认30s
  • dfs.datanode.fsdatasetcache.max.threads.per.volume
    缓存新数据线程数,默认4
  • dfs.cachereport.intervalMsec
    datanode汇报缓存时间,默认10s
  • dfs.namenode.path.based.cache.block.map.allocation.percent
    namenode缓存映射内存百分比
  • dfs.namenode.caching.enabled
    是否开启集中缓存,其实也缓存了,但是namenode不使用这些信息
  • dfs.datanode.pmem.cache.recovery
    持久化内存上是否恢复缓存

注意项

ulimit -l 的值(KB)要比dfs.datanode.max.locked.memory(字节byte) 大,否则datanode启动不了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值