Hadoop单节点故障改进方案对比(2)

ADFS的现有架构从上到下分为三层,如图表 1所示: 最上层(StateManager, Zookeeper和MetaChecker)负责元数据持久化和校验,无状态的中间层(Stateless Namenode)负责事务逻辑和最底层(Datanode)负责文件块的物理存储和访问。将命名空间(Namespace)、块对应关系(BlocksMap)和Datanode信息存储到innode数据库中,避免了重启时需要通过Datanode的blockReport来构建BlocksMap和Datanode信息,提供了快速重启的必要条件。通过缓存,SSD和RAID卡来提高IO性能等来提高性能。通过MetaChecker 异步地检查元数据的正确性。Zookeeper在ADFS的架构中也承担比较重要的角色,它不仅负责记录租约,正在写入的文件,以及多块、少块和坏块等结构,而且还负责State Manager的主备选举。以后会将Zookeeper负责的namenode部分的功能放到数据库中,Zookeeper仅负责主备选举。通过配置文件,和Zookeeper替换namenode。

优点:单个namenode down掉可以快速切换,提供正常服务;元数据等持久化,namenode重启等不需要很长的时间;

缺点:元数据持久化,数据库应该有瓶颈;同时服务的仅一个namenode,因此仍然存在性能瓶颈

2.4 XFS

命名空间由Master进行管理,XFS的Master通过主从热备实现了高可用解决方案,由Zookeeper实现监控、选举和切换;文件标识和块管理由独立的MetaServer进行管理,它记录了文件属性、长度以及该文件拥有的块等信息;与Datanode类似,块物理存储和访问由NodeServer负责。客户端在访问XFS时,先通过文件名在Master上获取MetaServer标识和文件标识等信息,然后在指定的MetaServer上获得需要请求的文件信息或者块信息,如果要访问文件的块,则通过NodeServer获取块内容。

实现推测:

1、 master部分实现了一个简单的命名空间如树形结构,文件id,Meta id等,客户端获得这些值到元数据服务器去获得文件的其他属性,及其块映射关系;

2、 客户端通过获得的块位置到相应的NodeServer节点操作相应的数据块;

3、 Master通过Zookeeper实现高可用,元数据服务器可以实现冗余模式保证高可用;

Xfs架构图如下

 

Hadoop单节点故障改进方案对比

 

2.5 MAPR

通过官方介绍,实现了无锁存储服务,据说比hdfs速度快3倍;namenode实现分布式话,默认存储3份,可以指定元数据存储分数,并且具有自动修复功能,如果某台机器坏了,会在其他机器修复该元数据,保存该数据始终有3份。

2.6 Clover

由中科院研发,实现了元数据的分布式冗余

 

2.7 Ceph

Ceph为一个分布式存储系统,提供了restful及其fuse(目前可能已经实现内核态)接口,元数据存储和对象存储均实现了支持冗余分布式,元数据与对象分开存储,客户端通过元数据服务器获得对象的位置,然后通过客户端直接获取。

 

CEPH采用元数据和文件数据分开处理的体系结构,由三个子系统组成:客户端(CLIENT),元数据服务器集群(Metadata Cluster)和对象存储集群(Object StorageCluster)。MDS维护全局的名字空间,负责处理元数据相关的请求以及相心的权限管理:对象存储设备负责文

件数据和元数据的存储,为客户端和MDS提供统一的数据读写服务。在CEPH中,元数据保存在对象存储设备中,MDS幂IJ用缓存的数据对外提供服务。由于MDS本身并不

存储数据,所以可以很方便地进行目录子树的复制迁移以实现负载均衡。通过监控访问的热度等进行负载均衡。

2.8 其他

AvatarNode

通过NFS共享EditLog文件,人工切换namenode,可在秒到分钟内完成;

优点:由于采用热备,单个namenodedown掉可以快速切换,提供正常服务;

缺点:同时服务的仅一个namenode,因此仍然存在性能瓶颈;

Cloudera CDH4与AvatarNode类似。

2.9 命名空间

存储系统都涉及到命名空间的概念,从上面的调研已经明确,命名空间一般分为2类:树形命名空间和平坦命名空间。具体如下:

树形命名空间:元数据以树形结构维护,文件系统最大的问题就是扩展性,完全取决于他的树状结构,扩展起来相当困难。

平坦命名空间:元数据以2层或者层数很少来维护,实现对象存储的概念。亚马逊支撑对象数可以支撑上千亿,是现在最大的存储集群。

不同业务,可能命名空间选择不一样。

2.10 元数据管理

动态子树:出现热点数据或者MDS负载过高时可以很方便地进行目录子树的复制和迁

移,易于扩展MDS和负载均衡,但实现较为复杂。

静态子树:元数据与MDS的对应关系一旦确立就不会改变,容易出现负载不均衡。

Hash算法:初始的时候,可以通过良好的设计使得元数据在MDS间均匀分布,整体负载比较均衡,但是在增加或减少MDS的时候,需要重新调整hash函数,会导致人量的数据迁移。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f38bc9beedec88fde5595c2f65b262b6.html