Hadoop从2.3.0版本开始支持HDFS缓存机制,HDFS允许用户将一部分目录或文件缓存在HDFS当中,NameNode会通知拥有对应块的DataNodes将其缓存在DataNode的内存当中
集中式缓存管理有着许多显著的优势:
防止那些被频繁使用的数据从内存中清除
因为DataNode的缓存由NameNode来管理,applications在做任务安排时可以查询这个缓存的列表,使用一个被缓存的块副本能够提高读性能
当块被DataNode缓存之后,客户端可以使用一个新的、高效的、zero-copy的读API,因为缓存中的数据已经被计算过checksum,当使用新API时,客户端基本上是零开销的
可以提高集群的内存利用率。当使用操作系统的缓存时,对一个块的重复读会导致所有的副本都会被放到缓冲区当中,当使用集中式缓存时,用户可以指定n个副本中的m个才会被缓存,可以节约n-m的内存
用法
集中式缓存对那些频繁访问的的文件是非常有用的,例如hive中经常被使用的fact表就非常适合缓存;另一方面,缓存一年的查询结果可能没那么有用了,因为这个结果可能只会被查看一次
也有助于提高混合类型作业的SLA性能,把高优先级的数据缓存起来可以确保它不会与低优先级的数据竞争磁盘IO
使用:
[hadoop@master hadoop]$ hdfs cacheadmin -addPool admin 【添加一个pool】
Successfully added cache pool admin.
[hadoop@master hadoop]$ hdfs cacheadmin -listPools 【查看pool列表】
Found 1 result.
NAME OWNER GROUP MODE LIMIT MAXTTL
admin hadoop hadoop rwxr-xr-x unlimited never
[hadoop@master hadoop]$ hdfs cacheadmin -addDirective -path /input -pool admin 【将一个目录加入pool】
Added cache directive 1
[hadoop@master hadoop]$ hdfs cacheadmin -listDirectives 【查看已缓存的数据】
Found 2 entries
ID POOL REPL EXPIRY PATH
1 admin 1 never /input
2 test 1 never /output/0
[hadoop@master hadoop]$ hdfs cacheadmin -removeDirective 1 【按id清除缓存】
Removed cached directive 1
[hadoop@master hadoop]$ hdfs cacheadmin -listDirectives
Found 1 entry
ID POOL REPL EXPIRY PATH
2 test 1 never /output/0
[hadoop@master hadoop]$ hdfs cacheadmin -removeDirectives -path /output/0 【按path清除缓存】
Removed cache directive 2
Removed every cache directive with path /output/0
[hadoop@master hadoop]$ hdfs cacheadmin -listDirectives
Found 0 entries
相关阅读: