您的位置:首页 > 大数据 > Hadoop

HDFS缓存管理操作实战

2016-01-26 13:40 555 查看

HDFS缓存管理操作实战

Debugo
2014-12-21 232 阅读

Hadoop
HDFS
System

HDFS提供了一个高效的缓存加速机制——Centralized Cache Management,可以将一些经常被读取的文件(例如Hive中的fact表)pin到内存中。这些DataNode的缓存也是由NameNode所管理的(NameNode所管理的cache依然是以block形式,而DataNode也会定期向NameNode汇报缓存状态),而客户端可以高效得读取被缓存的数据块;为了能锁定内存,该实现依赖于JNI使用libhadoop.so,所以POSIX资源限制也要进行相应的设置(ulimit
-l),并确保下面的参数被设置。




参数设置

dfs.datanode.max.locked.memory


该参数用于确定每个DataNode给缓存使用的最大内存量。设置这个参数和ulimit -l时,需要注意内存空间还需要一些内存用于做其他事情,比如,DataNode和应用程序JVM堆内存、以及操作系统的页缓存,以及计算框架的任务。所以不要使用太高的内存百分比。

下面是可选参数,可用于调优:
dfs.namenode.path.based.cache.refresh.interval.ms


NameNode会使用该参数作为两次子路径缓存重复扫描的时间间隔,单位为毫秒。使用该参数来计算要缓存的块,以及每个DataNode包含一个应该被缓存的块的副本。默认为300000ms(5分钟)
dfs.datanode.fsdatasetcache.max.threads.per.volume


DataNode会使用这个参数作为用于缓存新数据的每个卷的最大线程数。默认为4.

dfs.cachereport.intervalMsec

DataNode会使用该参数作为两次发送给NameNode的缓存状态报告的时间间隔。单位为毫秒。默认为10000ms(10秒)
dfs.namenode.path.based.cache.block.map.allocation.percent


分配给缓存块映射占Java堆内存的百分比。缓存块映射是一个使用hash链接的hash映射。太小的映射空间会导致缓存块太大时访问太过缓慢,而大的映射空间会消耗更多内存。默认为0.25(0.25%)

Caching Concept

缓存指令(Cache Directive):一个指令(directive)是一个缓存的path,它可以是目录(仅包含该目录下的文件,不包含子目录),也可以是文件;指令(Directive)有一个参数replication,表示该path被缓存的副本数;另外,可以对一个文件进行多次缓存。
缓存池(cache pool)是一个管理实体,拥有类UNIX的权限,可以限制哪个用户和组可以访问该缓存池。写权限允许用户向缓存池添加或从中删除缓存指令(directive) 。读权限允许用户列出缓存池内的缓存指令,还有其他元数据。执行权限不能被使用。缓存池也可以添加资源管理。它可以强加一个最大限制值,可以限制写入缓存池中的指令的字节数。通常,缓存池限制值之和约等于为HDFS在集群中做缓存而保留的总内存量。从缓存池中也可以获得许多统计信息,用于集群用户决定应该缓存什么。缓存池也可以强加一个TTL最大值(time
to live)。缓存指令由一个唯一的无重复的64位整数ID来标识。即使缓存指令后来被删除了,ID也不会重复使用。而缓存池由一个唯一的字符串名称来标识。

缓存管理命令—hdfs cacheadmin

1. 缓存命令

(1). addDirective:添加指令
hdfs cacheadmin
-addDirective -path path
-pool pool-name
[-force]
[-replication replication]
[-ttl time-to-live]


-path 添加的路径

-pool 加入的缓冲池名称

-force 不检查缓存池的资源限制

-replication 要使用的副本数,默认为1

-ttl 缓存指令可以保持多长时间。可以按照分钟,小时,天来指定,如30m,4h,2d。有效单位为[smhd]。“never”表示永不过期的指令。如果未指定该值,那么,缓存指令就不会过期。

(2). removeDirective:通过id删除指令
hdfs cacheadmin
-removeDirective id


(3). removeDirectives:删除执行path下所有缓存命令
hdfs cacheadmin
-removeDirective path


(4). listDirectives:显示某一路径下的缓存信息
hdfs cacheadmin
-listDirectives [-stats]
[-path path]
[-pool pool]


-stats 显示 列出基于path的缓存指令统计信息。

2. 缓存池命令
(1). 添加/修改缓存池:addPool/modifyPool
hdfs cacheadmin
-addPool name [-owner owner]
[-group
group]
[-mode mode]
[-limit limit]
[-maxTtl maxTtl]

hdfs cacheadmin
-modifyPool name [-owner owner]
[-group
group]
[-mode mode]
[-limit limit]
[-maxTtl maxTtl]


其中,

-owner/group是该pool的属主/组,默认为当前用户

-mode是POSIX风格权限,默认为0755

-limit为该pool中可以缓存的最大字节数,默认没有限制

-maxTtl 最大的生存期,可以是120s, 30m, 4h, 2d等。
(2). 移除缓冲池:removePool
hdfs cacheadmin
-removePool name

(3). 列出缓冲池:listPools
hdfs cacheadmin
-listPools [-stats]
[name]


-stats为显示统计信息

3. 命令实战

当前参数设置:




#创建缓存组,默认为cache_data
hdfs cacheadmin -addPool cache_data -mode 0777
Successfully added cache pool cache_data.
#生成一个1GB大小的文件
dd if=/dev/zero of=/tmp/test.zero bs=1M count=1024
+0 records in
+0 records out
24 bytes (1.1 GB) copied, 1.25545 s, 855 MB/s
hdfs dfs -put /tmp/test.zero /data
#生成缓存指令
hdfs cacheadmin -addDirective -path /data -pool cache_data -ttl 1d
Added cache directive 1
#显示缓存池的信息
hdfs cacheadmin -listPools -stats cache_data
Found 1 result.
NAME        OWNER  GROUP  MODE            LIMIT  MAXTTL  BYTES_NEEDED  BYTES_CACHED  BYTES_OVERLIMIT  FILES_NEEDED  FILES_CACHED
cache_data  hdfs   hdfs   rwxrwxrwx   unlimited   never    1073741824    1073741824                0             1             1
#统计信息,显示EXP Date
hdfs cacheadmin -listDirectives -path /data

Found 1 entry
ID POOL         REPL EXPIRY                    PATH
cache_data      1 2014-12-22T15:38:31+0800  /data
#删除缓存指令和缓存池
hdfs cacheadmin -removeDirectives -path /data
Removed cache directive 1
Removed every cache directive with path /data
hdfs cacheadmin -removePool cache_data
Successfully removed cache pool cache_data.

官方文档http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/CentralizedCacheManagement.html

网上有位大大的译文:http://www.cnblogs.com/zhangningbo/p/4146398.html

性能对比和原理描述,可以参考Hadoop Summit 2014的slide
http://www.slideshare.net/Hadoop_Summit/inmemory-caching-in-hdfs-lower-latency-same-great-taste-33921794

其中wordcount的对比:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: