HDFS高可靠性是如何实现的
四个组件的可靠性与NN主备机制:
JN(日志节点),Zookeeper,NameNode主备部署(HA机制),数据存储三副本;
修改:editlog实际上是NN节点生成上传,JN什么都不做,只做存储使用。
HDFS是大容量,高吞吐量、高容错的分布式文件存储系统,采用的是流式数据访问的方式;
上面的因素决定了HDFS的两个特点:
适合场景:HDFS适合大容量和流式数据访问场景;
不适合场景:随机读写、大量小文件、低延迟读取
TIPS:随机读写与低延迟读取是因为流式数据访问的特性决定,并且HDFS仅支持尾追加,不支持对数据进行修改。
而大量小文件的主要原因是元数据过多,元数据保存在NN中,在运行时同时加载在内存中,并且NN在同一时间只有一台在工作,会造成性能上的影响。
要点:①HDFS的主要特点:
流式数据访问,多副本机制(default三副本),一次读多次写,仅允许尾添加,不允许修改的特点(WROM, write once read many)TIPS:流式数据访问方式≠访问流式数据,而是一种从头到尾的遍历形式的数据访问的方式,正是因为这种原因,修改文件中部数据会造成后部数据的连锁效应,代价过大。
②HDFS底层文件约束:
HDFS本身是寄生在OS文件系统之上,所以对底层的基础文件系统是有一定的约束要求,在华为hadoop结构中,主要有Redhat、centOS和SuSe的部分版本有可用。
③主要节点与功能介绍:
NameNode:管理节点,管理元数据,同一时刻只有一个实例在工作,主备部署,在HDFS中,备并不仅仅是备份工作,除此之外还承担元数据持久化的任务,因为在HDFS中,元数据文件全部运行在内存中,在运行管理元数据的同时再进行元数据持久化会造成很大的压力,因此在HDFS与别人不同的是,备NameNode负责完成元数据整理和持久化的任务。
扩展知识点:一个HDFS是控制节点还是数据绝点取决于改点运行的服务是NameNode还是DataNode,而主备节点的选举是依据配置了NameNode的节点向ZooKeeper注册的先后顺序,通常情况下备份节会利用ZooKeeper的特征创建临时节点,一旦临时节点消失,则zooKeeper会通知备NameNode升任主NameNode,在这里还有一些特殊变化,因为此时备NameNode升任为主也就失去了整理和持久化元数据的职责,数据就会全部运行在当前单主的NameNode内存中,带来性能下降和安全隐患。
依照前面组件介绍所说,HDFS本身是需要底层OS的支持,所以在元数据的安全方面,建议采用物理Raid的方式(推荐Raid1)进行部署。
DateNode:数据节点,用于存放数据的节点,数据节点有相应的备份机制,默认采用三副本,所以在实际部署中DataNode节点并不需要提供硬盘Raid级别的数据防护。
TIPS:既然是数据节点,肯定是支持多实例部署,在HDFS的结构中,default是以128M为一个block来存储和管理的。
每个实例(HOST)只能有一个DataNode,每个DataNode可以有最多6个Data,每个Data可以挂载一块逻辑磁盘,每个逻辑磁盘可以对应一个硬盘或raid后空间。
JournalNode:主NameNode操作日志生成Editlog实时上传给JN,JN多实例部署,每个JN数据是一样的。JN负责存储Editlog,备NameNode在触发条件的时候下载相应的editlog信息,并且在首次选举为备份节点时,当Editlog大小达到64M或者历经60分钟时,会触发备NN节点的数据整理动作会从主NN节点上下载最初版的FsImage(仅首次下载),将Editlog和FsImage进行一次整理合并操作。并生成FsImage.ckpt文件并进行持久化操作,与此同时将该文件同步给主NN节点,主NN节点在收到备NN节点的FsImage.ckpt文件后,重命名为Fsimage,对原有的Fsimage进行替换,实现了主节点的元数据持久化操作。
ZKFC:与ZK之间通讯用组件,NN并不直接和Zookeeper通讯,而是使用ZKFC,ZKFC与NN节点一同部署
Client:提供HDFS的访问方式
⑥HDFS文件存储策略
文件存储具有多副本的要求,默认三副本(依照距离定义分布,本服务器为0,本机架其他服务器为2,其他机架为4)。
如果制定了策略则需要先符合文件存储策略之后再进行相应的副本操作。
策略是集群范围生效:
1. 磁盘I/O性能分布;
2. 标签优先级,可以指定一层或者多层Tag,Tag之间是或的关系;
3. 异构服务器,依照服务器性能不同有所区分。
异构服务区有较强的约束条件;首先要制定机架强制组,并且第一份副本必须要写入机架强制组,如机架强制组无法写入,则本次写入失败,剩余的副本优先选择本地,再到随机的机架节点
⑦Colocation同分布
对于需要频繁操作的文件,通过Group ID关联,使得频繁访问在同一实例内运行,减少东西流量,类似于VM的亲密和排斥的部署关系,不过文件并无互斥的关系可供选择。
- 点赞
- 收藏
- 关注作者
评论(0)