集中缓存有两层概念:
第一层是缓存,即为存储在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集中式缓存详解 #### 一、概述 Hadoop分布式文件系统(HDFS)作为大数据处理领域的重要组成部分,其性能优化一直是研究的重点。HDFS中的集中化缓存管理提供了一种高效的缓存机制,它允许用户指定特定的...
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 ...
一致性访问主要有三种方式:文件加锁、集中式本地锁和分布式锁。文件加锁是在多用户访问同一文件时确保内容一致性;集中式本地锁由单一节点控制访问权限;分布式锁则由多个节点共同协调,确保全局一致性。 【数据...
与传统的集中式应用系统不同,集中式系统通常由少量的服务器组成,版本更新可以通过人工一对一的方式进行。而分布式系统的版本更新需要自动化的解决方案,以减少人力成本和保证更新的一致性。 版本控制是软件开发中...
集中式元数据管理模型由于其架构简单、实现容易等优点,被多数分布式文件系统采用,例如著名的Google文件系统(GFS)、Hadoop分布式文件系统(HDFS)和Lustre等。然而,随着数据量的快速增长,元数据的规模已经远远...
分布式缓存的实现策略包括本地缓存、集中式缓存和分布式一致性哈希等。 3. **数据库优化**:包括数据库设计优化(如范式理论)、SQL优化、索引优化、读写分离、分库分表等,以提高数据处理效率和系统性能。 4. **...
每个Tomcat实例负责处理一部分请求,通过会话复制或集中式缓存等方式实现会话共享。 - **会话管理**:使用如Memcached或Redis等缓存技术来实现Session的共享,确保用户在不同服务器间的无缝切换。 ##### 3. MySQL...
此外,随着数据量的急剧增长,传统的集中式数据库无法满足需求,分布式数据库(如Hadoop HBase、Cassandra)和分布式文件系统(如Hadoop HDFS)应运而生,实现数据的高效存储和检索。 面对复杂的数据存储和检索需求...
对于林业图像数据这种具有大规模特性的数据集,传统的集中式管理方式(如采用高性能服务器)存在性能瓶颈和扩展性问题。因此,本文针对这些问题,提出了基于分布式系统的解决方案。 分布式系统是一种由多台普通...
它设计用于高效地从众多源收集数据,将这些数据存储在集中式存储系统中,例如 HDFS(Hadoop 分布式文件系统),并提供高可用性和高可靠性。Flume 的核心单元是 Agent,每个 Agent 包含三个主要组件:Source、Channel...
传统的集中式存储方式在面对大规模数据时往往力不从心,而分布式存储则通过网络将企业中多台设备的磁盘空间整合成一个虚拟的存储系统,数据分散存储,提高了存储效率和系统的可用性。 结构化数据是可以通过二维表...
Cfengine采用集中式管理模式,服务器配置和管理任务在中央服务器上统一维护,客户端服务器定期检查并更新配置,实现自动化、批量化的服务器管理。 综上,大流量、高并发网站的底层系统架构是一个复杂而精细的生态...
随着互联网的快速发展,大数据的爆炸式增长,传统的集中式存储系统已无法满足需求,分布式存储技术应运而生,成为解决海量数据处理的关键。以下是深入解析数据存储技术原理及发展演进分布式存储技术的详细内容。 一...
网站系统架构设计有多种模式,包括集中式架构、分布式架构、微服务架构等。不同的架构模式适用于不同的网站系统和业务场景。 一万用户量的系统架构设计 对于一万用户量的系统,架构设计相对简单,可以使用简单的 ...
分布式Session解决方案如Redis、Memcached或特定的Session管理库,将Session数据存储在集中式存储中,确保所有服务器都能访问。 总结来说,分布式架构的学习路线涵盖了多个核心组件和技术,旨在构建可扩展、健壮和...
1. **分布式计算**:介绍分布式计算的概念,它是相对于集中式计算的一种计算模式。分布式计算通过将大型任务分解为多个子任务,分配到多台计算机上并行处理,以提高计算效率和节省时间。 2. **进程通信**:学习进程...
随着互联网的发展,数据量呈指数级增长,传统的集中式存储方式已无法满足高效、可靠和可扩展性的要求。分布式存储技术通过网络将多台计算机的存储资源整合成一个统一的存储池,使得数据可以分散存储,提高了存储效率...
ZooKeeper则是一个集中式服务,负责维护配置信息、命名、分布式同步和组服务。 在Hadoop发行版方面,Cloudera、Hortonworks和MapR各有特色。Cloudera提供了最成熟的Hadoop发行版,拥有丰富的管理工具,并贡献了...
- **知识点概述**:YARN(Yet Another Resource Negotiator)中的日志聚合(Log Aggregation)功能是指将作业运行过程中产生的日志文件集中存储到HDFS中,以便进行统一管理和分析。此功能能够帮助用户更方便地查看和...
数据湖是一个集中式的存储库,允许组织存储所有类型的数据,无论是结构化、半结构化还是非结构化,原始数据以原生格式保存,以便后续分析和挖掘。与传统数据仓库相比,数据湖更注重数据的多样性、灵活性和低成本。 ...