转自: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 mysql 存储过程捕获所有异常,以及日志记录异常信息

    Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息 1.1. 异常的处理模式exit  continue undo模式 1 1.2. 捕获所有异常使用        DECLARE ...

  2. 无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。

    原因是在web.config 文件中多次引用了“添加外部引用” <system.serviceModel> <bindings> <basicHttpBinding> ...

  3. [Linux性能调优] 磁盘I/O队列调度策略

    这两天的一个小任务是MongoDB服务器的调优,恰好这段时间对Linux的各种性能诊断.调优感兴趣,就顺着这个任务多翻了些书和文章. 新学到的一个东西是 Linux磁盘的I/O队列调度策略,至少MyS ...

  4. Spring-boot之 rabbitmq

    今天学习了下spring-boot接入rabbitmq. windows下的安装:https://www.cnblogs.com/ericli-ericli/p/5902270.html 使用博客:h ...

  5. C语言 · 猜算式 · 乘法竖式

    题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273 x   15 ------ 1365 273 ------ 4095 请你观察如下的乘法算式 *** x   *** ------- ...

  6. Stack堆栈的数据结构

    1.

  7. Cesium高度解析

    var viewer = new Cesium.Viewer('cesiumContainer', { shadows : true }); //为true时,球体会有高程遮挡效果(在没有地形时候也会 ...

  8. 网络编程 -- RPC实现原理 -- 目录

    -- 啦啦啦 -- 网络编程 -- RPC实现原理 -- NIO单线程 网络编程 -- RPC实现原理 -- NIO多线程 -- 迭代版本V1 网络编程 -- RPC实现原理 -- NIO多线程 -- ...

  9. MySQL 数据热备份

    mysqlhotcopy使用lock tables.flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能运行在数据库目录所在的机器上. 与 ...

  10. 通过User-agent进行SQL注入

    声明:本文由Bypass整理并翻译,仅用于安全研究和学习之用. 文章来源:https://hackerone.com/reports/297478 我发现了一个SQL注入漏洞 /dashboard/d ...