`
乡里伢崽
  • 浏览: 109015 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hdfs 的集中式缓存

    博客分类:
  • hdfs
 
阅读更多
集中缓存有两层概念:
第一层是缓存,即为存储在HDFS中文件提供缓存的机制,从而可以加速DFSClient对文件的读操作;
第二层概念是集中式的管理,传统的HDFS缓存依赖了OS本身的缓存机制,但是这种缓存机制不能被管理员或中央节点进行管理,不能自由的控制哪些文件缓存,哪些文件不进行缓存;集中式的管理可以提高了对缓存内存的可控性;
HDFS中集中缓存架构如下所示:
[url]http://yanbohappy-wordpress.stor.sinaapp.com/uploads/2014/04/architecure.png
[/url]

1、User通过api入口与NN进行交互,告诉NN缓存哪些文件,或者取消对那些文件的缓存;
2、NN中维护了缓存path列表;在每次接受到User的缓存请求时候,把请求的Path转化为一系列的Blocks,并把这些Blocks加入到一个待cache的队列中
3、在DN中缓存的真实内容是Blocks,在DN每次心跳协议与NN进行交互时候,NN会把属于该DN的缓存的Blocks放在心跳协议的返回值中返回给DN,DN进行缓存中
4、同时DN维持一个NN之间类似心跳协议的定时协议,定时同步DN中缓存Block的状态;
5、DFSClient在读取缓存中的文件Blocks时,可以直接从Cache中读取;

HDFS集中缓存两个主要概念:Cache Directive和Cahce Pool

1、Cache Directive:一个directive是一个缓存的path,它可以是目录,也可以是文件;注意:目录的缓存是非递归的,只缓存目录内第一层的文件,不会缓存目录中目录;一个Directive有一个参数replication,表示该path的缓存的副本数;注意,可以对一个文件进行多次缓存;一个Directive有一个参数expiration,可以控制缓存的TTL(time-to-live),目前该时间为绝对时间,可以表示为分钟,小时和天数,比如 -ttl 30m, 4h, 2d。 测试显示一个cache过期了,NN不会自动将它从缓存列表中删除,只是在不再反馈给DFSClient进行读操作,cache的内存是否会自动释放,待测试; 测试结果表示不会释放内存,所以过期的cache,还是需要手动的去删除它;
2、Cache Pool:是Cache的管理单元,每个Pool拥有与Unix相似的权限,同时Pool也有quota limit限制

cacheadmin 命令行控制

1、Directive控制:集中缓存中一个文件是否会被缓存,完全用管理员来控制,管理员可以通过" hdfs cacheadmin -addDirective"来添加缓存,该命令会返回一个缓存id;“hdfs cacheadmin -removeDirective”通过该命令来删除指定缓存id的缓存;“ hdfs cacheadmin -removeDirectives”通过该命令来删除指定缓存path的缓存,该命令可以一次删除多个缓存;“hdfs cacheadmin -listDirectives”显示当前所有的缓存;详细的参数,在命令行中输入 hdfs cacheadmin可以看得到;或者参考:http://hadoop.apache.org/docs/r2.3.0/hadoop-project-dist/hadoop-hdfs/CentralizedCacheManagement.html 官方文档
2、Pool控制:可以通过"hdfs cacheadmin -addPool"创建一个pool,“hdfs cacheadmin -modifyPool”删除一个pool,"hdfs cacheadmin -removePool"删除一个pool,“ hdfs cacheadmin -removePool”删除一个pool

HDFS相关配置信息:

1、dfs.datanode.max.locked.memory:集中cache的[必须配置]官方描述如下"The amount of memory in bytes to use for caching of block replicas in memory on the datanode. The datanode's maximum locked memory soft ulimit (RLIMIT_MEMLOCK) must be set to at least this value, else the datanode will abort on startup. By default, this parameter is set to 0, which disables in-memory caching. If the native libraries are not available to the DataNode, this configuration has no effect." ;单位为byte,默认该值为0,从描述中可以看到。如果该值为0,相当于关闭了集中缓存的功能;同时该值不能大于ulimit的限制;从描述中还可以看到,集中缓存对native lib有依赖,描述如下:"In order to lock block files into memory, the DataNode relies on native JNI code found in libhadoop.so. Be sure to enable JNI if you are using HDFS centralized cache management."
2、dfs.cachereport.intervalMsec:单位为毫秒,用于控制DN向NN汇报DN上缓存的状态,,默认为10秒;
3、dfs.namenode.path.based.cache.refresh.interval.ms:NN维持的cahce会可以自动更新,如果文件被追加写,目录下面新增了文件,NN会扫描path所有的block进行更新;该参数就是用来控制这个扫描的间隔,单位为毫秒,默认为5分钟;
4、dfs.datanode.fsdatasetcache.max.threads.per.volume:DN中维护缓存的状态或者IO读写的线程数,默认为4

DFSClient读逻辑:

HDFS的读主要有三种: 网络I/O读 -> short circuit read -> zero-copy read。网络I/O读就是传统的HDFS读,通过DFSClient和Block所在的DataNode建立网络连接传输数据。

当DFSClient和它要读取的block在同一台DataNode时,DFSClient可以跨过网络I/O直接从本地磁盘读取数据,这种读取数据的方式叫short circuit read。目前HDFS实现的short circuit read是通过共享内存获取要读的block在DataNode磁盘上文件的file descriptor(因为这样比传递文件目录更安全),然后直接用对应的file descriptor建立起本地磁盘输入流,所以目前的short circuit read也是一种zero-copy read。

增加了Centralized cache的HDFS的读接口并没有改变。DFSClient通过RPC获取LocatedBlock时里面多了个成员表示哪个DataNode把这个block cache到内存里面了。如果DFSClient和该block被cache的DataNode在一起,就可以通过zero-copy read大大提升读效率。而且即使在读取的过程中该block被uncache了,那么这个读就被退化成了本地磁盘读,一样能够获取数据。

对上层应用的影响:

对于HDFS上的某个目录已经被addDirective缓存起来之后,如果这个目录里新加入了文件,那么新加入的文件也会被自动缓存。这一点对于Hive/Impala式的应用非常有用。

HBase in-memory table:可以直接把某个HBase表的HFile放到centralized cache中,这会显著提高HBase的读性能,降低读请求延迟。

和Spark RDD的区别:多个RDD的之间的读写操作可能完全在内存中完成,出错就重算。HDFS centralized cache中被cache的block一定是先写到磁盘上的,然后才能显式被cache到内存。也就是说只能cache读,不能cache写。

目前的centralized cache不是DFSClient读了谁就会把谁cache,而是需要DFSClient显式指定要cache谁,cache多长时间,淘汰谁。目前也没有类似LRU的置换策略,如果内存不够用的时候需要client显式去淘汰对应的directive到磁盘。

现在还没有跟YARN整合,需要用户自己调整好留给DataNode用于cache的内存和NodeManager的内存使用。

例子:
  hdfs cacheadmin -addDirective -path /user/hive/warehouse/fact.db/city -pool financial -replication 1 

以上代码表示把HDFS上的文件city(其实是hive上的一个fact表)放到HDFS centralized cache的financial这个cache pool下,而且这个文件只需要被缓存一份。


 [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
分享到:
评论

相关推荐

    HDFS集中式缓存

    DFS中的集中化缓存管理是一个明确的缓存机制,它允许用户指定要缓存的HDFS路径。NameNode会和保存着所需快数据的所有DataNode通信,并指导他们把块数据缓存在off-heap缓存中

    hdfs源码.zip

    3.5.3 HDFS集中式缓存架构 247 3.5.4 CacheManager类实现 248 3.5.5 CacheReplicationMonitor 250 3.6 ClientProtocol实现 251 3.6.1 创建文件 251 3.6.2 追加写文件 254 3.6.3 创建新的数据块 257 ...

    HDFS实例基本操作

    在安装好HDFS的前提下,此项目包含HDFS的基本操作,上传,下载,创建文件夹等。

    论文研究-HDFS数据节点本地缓存的设计与实现 .pdf

    HDFS数据节点本地缓存的设计与实现,赵婧,王洪波,随着互联网应用的不断丰富和网络数据的急剧增长,海量数据的处理与存储已成为当前互联网应用中的最主要问题之一。Hadoop分布式文件

    HDFS Comics HDFS 漫画

    HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...

    HDFS管理工具HDFS Explorer下载地址、使用方法.docx

    windows平台下的HDFS文件浏览器,就像windows管理器一样管理你的hdfs文件系统。现在官网已经停止更新这款软件。具体配置如下: HDFS配置页面及端口http://master:50070 配置HDFS服务器 配置WebHDFS HDFS Explorer...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    MR处理HDFS日志样例

    MR处理HDFS日志样例

    HDFS配置文件hdfs-site

    HDFS测试环境配置文件,稳定运行无异常,分享给大家学习参考用;

    实验二:熟悉常用的HDFS操作

    A.2实验二:熟悉常用的HDFS操作 本实验对应第4章的内容。 A.2.1 实验目的 (1)理解 HDFS在Hadoop体系结构中的角色。(2)熟练使用HDFS操作常用的 Shell命令。(3)熟悉HDFS操作常用的Java API。 A.2.2 实验平台 (1)操作...

    HDFS体系架构汉化文档.pdf

    Hadoop分布式文件系统( HDFS )是一种旨在在商品硬件上运行的分布式文系统。它与现有的分布式文件系统许多相似之处。 但是,与其他分布式文件系统的区别很明显。 HDFS 具有高度的容错能力,旨在部署低成本硬件上。 ...

    HDFS文件操作命令与HDFS编程

    文档详细的讲述了Hadoop中HDFS文件操作命令和HDFS编程

    HDFS文件的上传

    hdfs 文件的上传,hdfs fs -put /文件名

    HDFS文件的下载

    hdfs文件的下载

    分布式存储系统——HDFS

    1. 分布式文件系统与HDFS 2. HDFS 的shell 操作 3. HDFS 体系结构与基本概念 4 HDFS 的web 接口 5. HDFS 的java 访问接口 6. HDFS 的RPC 机制 7. NameNode 的接口分析 8. DataNode 的接口分析 9. HDFS 的写数据过程...

    实验二、HDFS shell操作及HDFS Java API编程

    适合刚接触hadoop的学生或小白,内容包括HDFS shell操作及HDFS Java API编程 有图片有代码

    HDFS基本命令.docx

    HDFS基本命令

    人工智能-项目实践-数据预处理-将数据预处理后缓存到hdfs

    将数据预处理后缓存到hdfs

    HDFS+Explorer+Installer.rar

    hdfs远程操作工具HDFS+Explorer.hdfs

    hadoop-hdfs-client-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar; 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-client-2.9.1.pom;...

Global site tag (gtag.js) - Google Analytics