Hadoop块缓存
Posted 健哥说编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop块缓存相关的知识,希望对你有一定的参考价值。
块缓存
DataNode的块缓存。
堆外缓存。
堆外缓存名称叫:off-heap。
参考:
https://www.cnblogs.com/zhangningbo/p/4146398.html
网方文档:
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/CentralizedCacheManagement.html
通常dataNode从硬盘中读取块。但对于访问频繁的文件,其对应的块可能被显式的缓存在datanode的内存中,以堆外缓存的(off-heap block cache)的形式存在。默认的情况下,一个块仅缓存在一个DataNode的内存中。
可以利用块缓存的优势提高读操作的性能,如连接(join)操作中使用的一个小的查询表就是一个很好的块缓存的候选。
用户或应用通过在缓存池中增加一个cache directive来告诉namenode需要缓存哪些文件以久缓存多久。
hdfs的cacheadmin可用于管理缓存块。
cacheadmin主要包含两种操作:
1:cache pool操作,即缓存空间操作。
2:directives操作,即需要缓存哪些目录或是文件。
D:\a>hdfs cacheadmin
Usage: bin/hdfs cacheadmin [COMMAND]
[-addDirective -path <path> -pool <pool-name> [-force] [-replication <
replication>] [-ttl <time-to-live>]]
[-modifyDirective -id <id> [-path <path>] [-force] [-replication <repl
ication>] [-pool <pool-name>] [-ttl <time-to-live>]]
[-listDirectives [-stats] [-path <path>] [-pool <pool>] [-id <id>]
[-removeDirective <id>]
[-removeDirectives -path <path>]
[-addPool <name> [-owner <owner>] [-group <group>] [-mode <mode>] [-li
mit <limit>] [-maxTtl <maxTtl>]
[-modifyPool <name> [-owner <owner>] [-group <group>] [-mode <mode>] [
-limit <limit>] [-maxTtl <maxTtl>]]
[-removePool <name>]
[-listPools [-stats] [<name>]]
[-help <command-name>]
示例,显示已经缓存列表:
[wangjian@hadoop41 ~]$ hdfs cacheadmin -listPools
Found 0 results.
添加一个缓存,即给创建一个有名称的缓存,仅是创建一个名称,这个缓存下还没有文件或是目录:
[wangjian@hadoop41 ~]$ hdfs cacheadmin -addPool poolA
Successfully added cache pool poolA.
再次查看缓存列表,可以查看它的名称,拥有者,拥有组,及权限,大小限制及过期时间等:
[wangjian@hadoop41 ~]$ hdfs cacheadmin -listPools
Found 1 result.
NAME OWNER GROUP MODE LIMIT MAXTTL
poolA wangjian wangjian rwxr-xr-x unlimited never
查看被缓存的目录或是文件,以下显示目前还没有:
[wangjian@hadoop41 ~]$ hdfs cacheadmin -listDirectives
Found 0 entries
现在我们将一个文件,添加到缓存poolA中去,其中-pool是必选参数:
[wangjian@hadoop41 ~]$ hdfs cacheadmin -addDirective -path /test/b.txt -pool poolA
Added cache directive 1
再次查看被缓存的目录或是文件,其中REPL为副本数量,expiry为过期时间,path为缓存的目录或文件:
[wangjian@hadoop41 ~]$ hdfs cacheadmin -listDirectives
Found 1 entry
ID POOL REPL EXPIRY PATH
1 poolA 1 never /test/b.txt
现在我们可以直接删除这个缓存池,则缓存池中的directives也一同被删除:
[wangjian@hadoop41 app]$ hdfs cacheadmin -removePool poolA
Successfully removed cache pool poolA.
[wangjian@hadoop41 app]$ hdfs cacheadmin -listPools
Found 0 results.
[wangjian@hadoop41 app]$ hdfs cacheadmin -listDirectives
Found 0 entries
关于缓存的一些配置:
Required(必选配置)
Be sure to configure the following:
dfs.datanode.max.locked.memory(配置key)
This determines the maximum amount of memory a DataNode will use for caching. On Unix-like systems, the “locked-in-memory size” ulimit (ulimit -l) of the DataNode user also needs to be increased to match this parameter (see below section on OS Limits). When setting this value, please remember that you will need space in memory for other things as well, such as the DataNode and application JVM heaps and the operating system page cache.
This setting is shared with the Lazy Persist Writes feature. The Data Node will ensure that the combined memory used by Lazy Persist Writes and Centralized Cache Management does not exceed the amount configured in dfs.datanode.max.locked.memory.
翻译:
用于指定DataNode所使用的最大缓存数量。默认为空值,即为Linux上限制的最大内存限制,一般Linux上默认的值为:unlimit。可以使用ulimit命令查看每一个shell可以占用的资源:
[wangjian@hadoop41 app]$ ulimit
unlimited
可以使用ulimit -l设置可用的内存资源。
其他更多属性,请参数官方文档:
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/CentralizedCacheManagement.html
以上是关于Hadoop块缓存的主要内容,如果未能解决你的问题,请参考以下文章