hadoop hdfs读写流程和主从架构模式

区块链技术没有中心


hdfs 读写流程

(1)架构体系 主从模式 (集中式管理)

(2)主:namenode 从:datanode

(3)缺点:namenode 只有一个datanode有多个,单点故障缺点,这个缺点怎么解决,高可用的方式,副namenode不是secondarynamenode但功能是一样的。

(4)当主namenode坏掉了,这个副namenode马上就能接替namenode的工作,而secondarynamenode不能接替

(5)在高可用中没有secondarynamenode

(6)高可用中有两个namenode一个主,一个副,由zookeeper 来控制两个namenode的切换,管理namenode

(7)namenode作用是记录集群情况 集群文件存储的元数据

(8)namenode 元数据中有版本号,datanode里也有一个版本号,当datanode中的版本号与namenode中的版本号不一致时,datanode就起不来了,启动集群中,jps少了一个datanode(解决是把datanode的文件夹删了,从新格式化,因为有一个版本不一致)(9)特殊情况比如有三个datanode结点,其中有一个datanode结点的版本不一致,解决方法(在另外两个datanode利用sct把这两个下的所有数据全部拷贝到这个坏掉的datanode。如果只有三datanode,备份数是三,一个掉线了,就不能在往里边存数据了,因为你存一个数据,不满足三个备份数,掉一个机子,这个集群就锁死了。如果有四个datanode,备份数是3,如果坏掉一个,不用处理,不影响)

(10)datanode里存储的是数据块,存储的是真实的数据,也有一个版本和nomedate保持一致

hadoop hdfs读写流程和主从架构模式_第1张图片

hadoop hdfs读写流程和主从架构模式_第2张图片

(11) hdfs 中的读写流程

    a.写入,有一个叫客户端发起写请求,到namenode,namenode响应了客户端 会自动创建返加一个对象(FSdataInputStrem),namenode返回可使用的资源(写入了,多大,能不能写由namenode决定,如里namenode说可以写,写在哪儿告诉客户端,)客户端根据使用资源情况对要写入的数据分块(分块这件事是在客户端完成,传的时候是一块一块传的)逐一上传块到datanode上。datanode获取上传的块数据并写入磁盘。完成后,做两件事:1.报告给namenode 的块信息(存在磁盘的哪个位置了) 2.告诉客户端写入成功。客户端继续后续块的写入。

        在此期间,namenode接收到datanode的块写入完成信息之后根据备份数通知其它datanode备份数据,直到满足备份数停止。就完成了一次写入,在写入的过程中,备份有一个算法策略(鸡蛋不放在同一蓝子里,如果你的集群在一个机架上,为了以后副本的速度,先在当前机子上备份一份,在另一台机子上在备份一份。如果在不同机架上,是在这个机架上备份两分,在不同的机架上在备份一份。因为为了容错,不是机子坏了,而是机架整个断电了,在另一个机架上还有数据。没有必要这个机架上每个机子上都备份,有两个机子备份就可以。四份的话,每个机架中的两个机子备份)

(12)读:客户端发起读请求到namenode,到namenode,namenode响应了客户端 会自动创建返加一个对象(FSdataInputStrem),开始读取datanode的数据块,在读数据块的时候是有先后的,在写块的时候是告诉namenode的。第一块在那个磁盘的哪个位置,第二块在那个磁盘的位置,所以朋顺序的。客户端根据使用资源到对应的datanode上读 块的数据。读 完后,客户端合并文件数据。(第一块数据,到哪儿读如果备份数是三,就有三个计算机ip地址,如果这个datanode正在忙,所以就需要等,如果还没等到就换下一个地址,如果都得不到,在一轮一轮试,如果试几轮都得不到,说明集群坏了,三次可以证明就坏掉了,所有的默认设置都是三次)就像连网一样,第一次访问半天没有响就,如果在一次连网就会反应很块。

secondarynamenode-----------对现在的元数据合并后给namenode用,

备份:冷备份 各热备份      



你可能感兴趣的:(hdfs)