漫画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工作原理(转)的更多相关文章
- 一图看懂hadoop分布式文件存储系统HDFS工作原理
一图看懂hadoop分布式文件存储系统HDFS工作原理
- HADOOP1.X中HDFS工作原理
转载自:http://www.daniubiji.cn/archives/596 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据googl ...
- Hadoop中HDFS工作原理
转自:http://blog.csdn.net/sdlyjzh/article/details/28876385 Hadoop其实并不是一个产品,而是一些独立模块的组合.主要有分布式文件系统HDFS和 ...
- 通过漫画轻松掌握HDFS工作原理
- 漫画描述HDFS工作原理
作者不详,内容浅显易懂,特拿来与大家分享.
- hdfs工作原理
一.NameNode和DataNode (1)NameNode NameNode的作用是管理文件目录结构,是管理数据节点的.NameNode维护两套数据:一套是文件目录与数据块之间的关系,另一套是数据 ...
- hadoop平台上HDFS和MAPREDUCE的功能、工作原理和工作过程
作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...
- HDFS的工作原理(读和写操作)
工作原理: NameNode和DateNode,NameNode相当于一个管理者,它管理集群内的DataNode,当客户发送请求过来后,NameNode会 根据情况指定存储到哪些DataNode上,而 ...
- 大数据 --> 分布式文件系统HDFS的工作原理
分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数 ...
随机推荐
- 关于Java 软件工程师应该知道或掌握的技术栈
鄙人星云,今天突然想写这么一篇需要持续更新的文章,主要目的用于总结当前最流行的技术和工具,方便自己也方便他人. 更新时间:2018-10-23 09:26:19 码农职业路径图 码农入门职业路径图 J ...
- 获取CPU序列号的Delphi程序
Unit CPUid; Interface Type TCpuType = (cpu8086, cpu286, cpu386, cpu486, cpuPentium); Function CpuTyp ...
- 并发框架Disruptor译文
Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易.这个系统是建立在JVM平台上,其核心是一个业务逻辑 ...
- 华为AR配置内部服务器示例(只有1个公网IP)
AR配置公网和私网用户都可以通过公网地址访问内部服务器示例(只有1个公网IP) 适用于:V200R003C01及以后的系统软件版本. 组网需求: 由于只有1个公网IP(100.100.1.2),想实现 ...
- keras 设置GPU使用率
import tensorflow as tffrom keras.backend.tensorflow_backend import set_session config = tf.ConfigP ...
- kafka调试工具kafkacat的使用
一. 安装 kafkacat 是基于kafka C语言的librdkafka库的 kafka客户端,不依赖java,小巧轻便,支持主流系统.在高版本的debain.Ubuntu下可以直接apt-get ...
- [Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ...
[Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ... 摘要 介绍 Java 并发包里的几个主要 ExecutorService . 正文 ...
- 【python】——python3 与 python2 的那些不兼容
python2 python3 string.uppercase string.ascii_uppercase string.lowercase string.ascii_lowercase xran ...
- 设计模式——proxy代理模式
目录 概述 定义 角色 为什么会有代理模式? 应用场景 示例 静态代理 例子 动态代理 JDK中生成代理对象的API 代码示例: 代码示例2 Cglib代理 代码示例 AOP(AspectOrient ...
- 23命令模式Command
一.什么是命令模式 Command模式也叫命令模式 ,是行为设计模 式的一种.Command模式通过被称为 Command的类封装了对目标对象的调用行为以及调用参数. 二.命令模式的应用场景 在面向对 ...