漫画HDFS工作原理(转)

Posted jht_newbie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漫画HDFS工作原理(转)相关的知识,希望对你有一定的参考价值。

转自:http://blog.csdn.net/netcoder/article/details/7442779?locationNum=2

对漫画内容更好的解读,可参考:

http://www.weixuehao.com/archives/596

http://blog.csdn.net/woshiwanxin102213/article/details/19990487?locationNum=4

 

HDFS系统主要由三大部分组成:client、namenode、datanodes。

①用户通过client对hdfs系统进行读写数据。

②namenode在hdfs系统中是唯一的,主要负责协调整个系统。

③datanode一般有多个,主要负责保存数据。

 

通过Client写数据到hdfs集群,主要步骤:

①用户通过client发起写数据文件请求。client将对数据进行分块(block),默认情况64M(或者128M)、每个block默认3个备份,用户可以进行配置。

分成固定大小、且合适大小的块主要是为了负载均衡和数据传输时间超过寻道时间(高吞吐率)。

②数据分块后,client对分块逐个处理,client将向namenode发起写请求并告之备份个数,如3。namenode接收到client的请求后,先分配3个datanode,然后把3个datanode节点的位置(按照距离由近到远排序)发给client。

③client取出列表中第一个datanode地址,把数据以及datanode位置信息的list发给该datanode(发送过程是以流式写入)。

④第一个datanode接收数据以及list后,保存到硬盘中,datanode在保存数据的过程中,把接收到的数据发送给list中下一个datanode。

⑤下一个datanode依次保存并转发数据,直到list的末尾。

⑥每个datanode在接收完一个block的数据之后,向namenode(感觉图有问题,应该是向client发送“done”,然后cliet收到所有的“done”消息后,告知namenode该block发送done,所有的block发送完,client通知namenode:file done, namenode记录下该文件的元数据信息(NameNode在内存中存储了meta等信息;内存有瓶颈),写结束)发送“done”消息

⑦当namenode收到针对该block所有datanode的“done”消息后,认为该block成功保存并备份到hdfs。

⑧当client完成第一个block的发送,继续重复之前步骤,发送第二个block,如此循环往复。

⑨当一个文件所有的block都写完了,client将向namenode发送关闭文件消息;namenode收到后,完成所有元数据信息的持久化。

 

通过Client从hdfs集群读数据,主要步骤:

①用户从client发起读文件请求,client向namenode发送该文件名。

②namenode向client回复保存了这个文件所有block的列表a,所有datanode保存的block列表b。

③client拿到列表后,就知道这个文件有多少block需要下载,并且知道每个block保存在哪些datanode上。client选择每个block对应的最佳(最近,l通常就是ist里面第一个)的datanode下载各个block即可。

hdfs容错机制:

主要错误类型:①节点失效 ②通信失败 ③数据损坏

一、节点失效

①如果主节点namenode挂掉,整个集群就挂了。

②从节点datanode失效检测:每3秒钟datanode主动向namenode发送心跳信息,如果namenode超过10分钟没有收到datanode的信息,就任务该datanode挂掉了,即使是因为网络原因收不到心跳信息,也会认为该datanode挂掉了。

二、网络失效

①在数据发送过程中,接受者或反馈ack(aknowledgement,确认字符)。在几次重连接后,如果ack一直没有被收到,发送方就认为接收方挂掉了或者网络连接失败。

三、数据损坏

①在发送数据的时候,数据以及数据的效验码一并发送给接收方,接收方在保存数据的同时,也保存对应的效验码。

②所有datanode都会发送block report给namenode,block repor中记录了该datanode保存的所有block的信息。

③在发送block report之前,datanode会检查block是否能通过效验码的验证,如果不能通过验证,则不会将该block的信息放到block report中。当namenode收到block report后,就会发现该datanode是否出现了数据损坏。

HDFS容错机制

一、处理写失败

①首先注意到,写数据的时候,一个block的数据在网络中是通过更小的包(packet)进行传输的。

②并且,每个datanode在收到packet后会给client发送一个ack应答。client根据收到的ack情况,判断哪些节点失效,如果发现有datanode失效,就调整复制链,跳过挂掉的datanode节点。

③当发生datanode失效时,client将向调整后的list第一个有效节点发送调整后的list。注意到,那个block还是将处于“under replicated”的状态,但是namenode将在后续处理。

二、处理读失败

①当client发起读请求后,由于namenode会发送保存了某个block的所有datanode,所以当某一个datanode挂掉,client可以从列表中其他datanode读取该block数据。

三、数据节点失效(或者数据块失效)容错处理

①namenode保存了两个列表,一个list是每个blocks保存在datanode节点的情况,另一个list是保存了每个datanode上所拥有的block情况。

②namenode会以以下策略持续更新以上两个list:1.当一个block在某个datanode上数据损坏,namenode将更新第一个list,从block下移除该datanode;2.当一个datanode挂掉会,将会同时更新这两个list。

③namenode通过扫描block list和datanode list就可以知道,哪些数据备份出现了异常,把处于异常的备份称为“under replicated”待备份,针对“under replicated”待备份的block,namenode会让拥有待备份block的datanode从其他有该block备份的datanode拷贝。

④该容错是基于,只有还有一个正确副本的情况。虽然HDFS系统不能完全保证至少有一个副本是可用的。但是HDFS系统尽力保证选择出最明智的副本位置。

 

副本放置策略:

①每个集群被物理部署到多个机架,每个机架有多个datanode

②选择第一个副本位置:如果写入者是集群中的一个成员,那么它被选为第一个备份,否则随机地选择一个datanode作为备份位置。

③接下来两个副本的选择:选择非第一个备份所在机架上两个datanode作为备份

④随后的位置选取,选择任一一个随机的datanode,只要它满足以下两个条件:1.每个datanode只有一个副本(某个block的多个副本一定会分别放在不同的datanode上) 2.每个机架最多两个副本。

请注意:有时这两个条件不能被同时满足,那怎么办?HDFS是允许使用你自己的放置算法的,如果你有更好的算法,赶紧用起来!

下一步该怎么做?

 

以上是关于漫画HDFS工作原理(转)的主要内容,如果未能解决你的问题,请参考以下文章

图文详解HDFS工作机制

生活现场从生日请客到hdfs工作原理解析

漫画解读HDFS存储原理

系统架构经典漫画讲解HDFS原理

漫画理解HDFS原理

漫画解读HDFS存储原理(转载)