转自: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工作原理(转)的更多相关文章

  1. 一图看懂hadoop分布式文件存储系统HDFS工作原理

    一图看懂hadoop分布式文件存储系统HDFS工作原理

  2. HADOOP1.X中HDFS工作原理

    转载自:http://www.daniubiji.cn/archives/596 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据googl ...

  3. Hadoop中HDFS工作原理

    转自:http://blog.csdn.net/sdlyjzh/article/details/28876385 Hadoop其实并不是一个产品,而是一些独立模块的组合.主要有分布式文件系统HDFS和 ...

  4. 通过漫画轻松掌握HDFS工作原理

  5. 漫画描述HDFS工作原理

    作者不详,内容浅显易懂,特拿来与大家分享.

  6. hdfs工作原理

    一.NameNode和DataNode (1)NameNode NameNode的作用是管理文件目录结构,是管理数据节点的.NameNode维护两套数据:一套是文件目录与数据块之间的关系,另一套是数据 ...

  7. hadoop平台上HDFS和MAPREDUCE的功能、工作原理和工作过程

    作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...

  8. HDFS的工作原理(读和写操作)

    工作原理: NameNode和DateNode,NameNode相当于一个管理者,它管理集群内的DataNode,当客户发送请求过来后,NameNode会 根据情况指定存储到哪些DataNode上,而 ...

  9. 大数据 --> 分布式文件系统HDFS的工作原理

    分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数 ...

随机推荐

  1. Atitit s2018.2 s2 doc list on home ntpc.docx  \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 讯飞科大 语音云.docx \Atitit 代码托管与虚拟主机.docx \Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx \Atitit 几大研发体系对比 Stage-Gat

    Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系  法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别   ...

  2. vs2013cs页面的代码太长,除了方法,没有折叠,如何处理

    VS再带一款插件,工具->扩展和更新,然后选择"联机",在搜索框搜索C# outline 2013,然后安装重启vs即可

  3. HashMap中capacity、loadFactor、threshold、size等概念的解释<转>

    最近在看HashMap的源码,有很多概念都很模糊,今天写了一个测试例子,加深对这几个概念的理解,并演示了扩容及树化的过程(见下篇博文:). 注:本文基于JDK 1.8  HashMap的结构 约定 约 ...

  4. zookeeper入门及使用(一)- 安装及操作

    zookeeper是什么? highly reliable distributed coordination,用来做高可靠的分布式协调者,可用来: 业务发现(service discovery)找到分 ...

  5. hdoj:2080

    夹角有多大II Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  6. java 爬取 国税局 省市区级联关系

    爬取网址 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html 因为数据比较大,存储为一个json,会内存溢出. 所以按照每 ...

  7. sprintf的Bug

    ]; sprintf(buffer,,,); 这样一般不崩溃,但是10次,有那么一次会崩溃 我只能说后面改成 0.0就可以了...

  8. Android学习:简易图片浏览

    这个例子学习混合使用XML布局和代码来控制UI,习惯上把变化小.行为固定的组件放在XML布局文件中管理,而那些变化较多.行为控制复杂的组件则交给Java代码来管理. 先在布局文件中定义一个线性布局容器 ...

  9. 省市区联动,非ajax请求。

    需求 不允许用 ajax 请求的方式加载数据,所以把所有的省市区写在数组里,用js动态加载. 数据源 民政部门户网站:http://www.mca.gov.cn/article/sj/xzqh/201 ...

  10. vim 撤销 回退操作

    在vi中按u可以撤销一次操作 u   撤销上一步的操作Ctrl+r 恢复上一步被撤销的操作 注意:如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了.重做如果你撤销得太多 ...