HDFS必须要了解的知识点
HDFS 就是Hadoop 分布式文件系统,也是Hadoop的三大重要组件之一,它主要是处理大数据场景下数据的增、删、改、查,因此它的场景特点有:数据量非常大、一般适合存储读写大文件、对于文件数据的可靠性要求较高。
HDFS主要的三大组件分别是Client、Namenode、Datanode;其中Client作为HDFS对外提供服务的一个接口,能否让用户的分布式操作和在一台主机操作一样的方便,对于用户来说,分布式系统是无感知的;其次,Client还有数据切片功能,我们在数据写入前通过Client对文件进行分片处理,减轻Namenode的处理数据负担;Namenode是作为元数据(如数据存储位置、分片数量等)的存储方,从Hadoop 2.x开始就不用SecondNamenode ,而采用主备方式 Active Namenode和StandBy Namenode ;Datanode是存储真实数据的节点,一般数据经过分片存储到Datanode之后,Datanode会将数据复制多份(一般三份)同步给其他Datanode ,这样也减轻了Client的写入负担。
对于读的流程,Client 去Namenode里面去查找元数据,根据元数据信息去各个Datanode里面去读取数据。
对于写的流程,Client会将数据进行分片,然后将请求传到Namenode ,Namenode 首先会将操作记录在editlog(editlog主要作用是如果Namenode突然故障的话,内存里的操作数据会丢失,它用来将内存里的数据进行持久化操作),同时editlog会被记录到JournalNode(用来同步主备Namenode之间的editlog)中,Standby Namenode会将editlog同步到自己这里,并形成fsImage(整体内存快照);而Client接受到NameNode的分配信息后,会按照NameNode分配的节点进行写操作。
NameNode出现故障后的流程:首先NameNode出现故障,会由Standby Namenode进行接替,同时内存的数据会将最近最近一次存储的fsImage和从Jounalnode同步过来的editlog进行一次合并(这种的好处是不会让editlog无限增大,增加故障后加载读取editlog的负担,这种增量更新也能快速的让Standby Namenode尽快接替工作)
总结:1.HDFS是一个分布式文件系统,简单理解就是多台机器组成的一个文件系统
2.HDFS有3个重要模块,Client对外提供统一操作接口,NameNode用来协调和管理数据(存储元数据,指导Client如何将分片数据存储在Datanode上),是一 个典型的master-slave架构,Datanode用来真正存储数据
3.HDFS会对大文件进行切块,并且每个切块会存储备份,保证数据的高可用,适合存储大数据
4.Namenode通过fsimage和editlog来实现数据恢复和高可用
5.HDFS不适用于大量小文件存储(因为所有文件的元数据都存在于Namenode中,大量小文件会造成Namenode太大负担),不支持并发写入(HDFS的写流程非常复杂,并发写入会特别复杂,所以不支持),不支持文件随机修改(只支持覆盖,由于文件被切片,需要先找到内容在哪个块,再读入内存,修改完成之后再更新所有备份导致效率低下),查询效率大概在秒级(设计之初是用来做离线计算的,所以查询效率不高)
- 点赞
- 收藏
- 关注作者
评论(0)