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需要缓存哪些文件以久缓存多久。

hdfscacheadmin可用于管理缓存块。

cacheadmin主要包含两种操作:

1cache pool操作,即缓存空间操作。

2directives操作,即需要缓存哪些目录或是文件。

 

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 sizeulimit (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块缓存的主要内容,如果未能解决你的问题,请参考以下文章

磁盘块大小和 hadoop 块大小

如何备份hadoop数据

Hadoop块大小和文件大小问题?

Hadoop块压缩

Hadoop:NameNode如何知道哪些块对应于一个文件?

Hadoop Block