一、NameNode和DataNode

(1)NameNode

  NameNode的作用是管理文件目录结构,是管理数据节点的。NameNode维护两套数据:一套是文件目录与数据块之间的关系,另一套是数据块与节点间的关系。前一套是静态的,是存放在磁盘上的,通过fsimage和edits文件来维护;后一套数据时动态的,不持久化到磁盘,每当集群启动的时候,会自动建立这些信息。

  (2)DataNode

  毫无疑问,DataNode是HDFS中真正存储数据的。这里要提到一点,就是Block(数据块)。假设文件大小是100GB,从字节位置0开始,每64MB字节划分为一个Block,以此类推,可以划分出很多的Block。每个Block就是64MB(也可以自定义设置Block大小)。

  (3)典型部署

  HDFS的一个典型部署是在一个专门的机器上运行NameNode,集群中的其他机器各运行一个DataNode。(当然,也可以在运行NameNode的机器上同时运行DataNode,或者一个机器上运行多个DataNode)一个集群中只有一个NameNode(但是单NameNode存在单点问题,在Hadoop 2.x版本之后解决了这个问题)的设计大大简化了系统架构

二、HDFS读写数据

当我们向hdfs 写数据的时候,客户端要做两件事.首先,将数据文件划分不同的数据块,划分的标准默认是64MB或128MB,这个是可以配置的.其次是向namenode请求一批(实际上就是默认的3个)datanode以存放数据块.当然namenode不是随便的选出三个datanode给client,它会选择三个最靠近client的三个datanode,那么这个距离是怎么计算的呢,是这样的,它会去计算两个节点与父节点带宽之和来计算两个节点的距离,在得到三个最近的datanode之后,namenode会先按与client的距离对datanode排下序,然后返回给客户端.

下面client要做的就是向namenode返回的3个datanode中传输数据了.当它在写第一个数据块时,它会先向离它最近的那个datanode写数据.那么client如何知道它向第一个datanode写入数据是否成功了呢?是这样的,client在向datanode传数据的同时,会计算下数据快的校验和,这个校验和也会传给datanode,datanode 在存储完数据后,会对数据块取下校验和与client的校验和进行比对,如果一致的话说明数据保存成功,然后它会向client进行ack,告诉client数据已经成功保存了,同时它也会告诉namenode数据块保存成功了.剩下的数据块保存到下两个datanode的过程和第一个过程是相似的,只是数据的传输不是都是client去传递的,而是datanode之间进行传递的,每个datanode成功保存完数据后都会向client进行ack并通知namenode保存数据完毕.当client接受到所有的datanode的ack后,client会告诉namenode数据块全部写入完毕.当namenode接受到client的消息后,namenode要做的就是维护两张表,一张表是每个数据块对应的datanode地址,另一张表是存储数据副本的时候经过了那些管线.

当client要从hdfs中读取数据的时候,首先客户端要知道数据存储在哪吧,怎么才能知道啊,谁知道啊?当然是namenode啊,namenode存储了所有的数据块元数据信息.client会给namenode请求数据的文件地址,namenode会返回给client关于数据块的相关信息即数据块存放在哪些datanode上了,每个datanode存放了哪些数据块,当然这些datanode也是按照与client距离排过序的.当client拿到这些信息后,它会先到离它最近的那个datanode上下载数据.

三、保障HDFS的可靠性措施

HDFS具备了较为完善的冗余备份和故障恢复机制,可以实现在集群中可靠地存储海量文件。

  (1)冗余备份:HDFS将每个文件存储成一系列的数据块(Block),默认块大小为64MB(可以自定义配置)。为了容错,文件的所有数据块都可以有副本(默认为3个,可以自定义配置)。当DataNode启动的时候,它会遍历本地文件系统,产生一份HDFS数据块和本地文件对应关系的列表,并把这个报告发送给NameNode,这就是报告块(BlockReport),报告块上包含了DataNode上所有块的列表。

  (2)副本存放:HDFS集群一般运行在多个机架上,不同机架上机器的通信需要通过交换机。通常情况下,副本的存放策略很关键,机架内节点之间的带宽比跨机架节点之间的带宽要大,它能影响HDFS的可靠性和性能。HDFS采用一种称为机架感知(Rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。在大多数情况下,HDFS副本系数是默认为3,HDFS的存放策略是将一个副本存放在本地机架节点上,一个副本存放在同一个机架的另一个节点上,最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,提高了写操作的效率。机架的错误远远比节点的错误少,所以这种策略不会影响到数据的可靠性和可用性。

  图6.副本存放的策略

  (3)心跳检测:NameNode周期性地从集群中的每个DataNode接受心跳包和块报告,NameNode可以根据这个报告验证映射和其他文件系统元数据。收到心跳包,说明该DataNode工作正常。如果DataNode不能发送心跳信息,NameNode会标记最近没有心跳的DataNode为宕机,并且不会给他们发送任何I/O请求。

  (4)安全模式

  (5)数据完整性检测

  (6)空间回收

  (7)元数据磁盘失效

  (8)快照(HDFS目前还不支持)

四、故障的规避.

因为是分布式文件系统,网路中什么事情都有可能发生,如datanode挂掉,datanode不能返回客户端想要的数据,datanode在保存数据的时候数据损毁,或者最严重的namenode挂掉.

下面看看这个四个问题,hadoop是如何规避的呢。

首先是datanode挂掉,当hdfs启动后每个datanode节点会定期上报自己的健康状况,每个datanode会每三秒向namenode发送心跳,证明自己还或者,假如namenode是秒钟没有收到datanode发送的心跳,namenode会认为这个datanode已经挂掉了.

下一个问题datanode不能返回客户端想要的数据,当客户端datanode请求数据或写入数据的时候,datanode无相应怎么办呢,当客户端长时间没有接收到datanode的ack后,client也为认为这个datanode已经挂掉了,于是会跳过这个datanode,请求下个datanode.

第三个问题,datanode保存的数据发生损坏,这个该怎么办呢,datanode会定期上报自己所存的数据快健康状况,健康状况是通过校验和来判断的,当nomenode收到datanode发送的数据块健康状况的报告后它就知道那些数据块损毁,然后它就会去更新它维护的两张表,即数据块在哪些datanode上存着,每个datanode上存放了哪些数据块,如果namenode发现哪个数据块的副本没有达到标准,它会通知其它的datanode从已有数据块的datanode上copy相应的数据块.

第四个问题,namenode挂掉,这个问题是最严重的,目前的最好的解决办法就是加一个辅助namenode即secondNamenode,以备分数据块的元数据信息,尽可能的避免数据丢失.

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工作原理(转)

    转自:http://blog.csdn.net/netcoder/article/details/7442779?locationNum=2 对漫画内容更好的解读,可参考: http://www.we ...

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

  6. 漫画描述HDFS工作原理

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

  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. maven 构建spring ssh mybatis 配置

    详情参与 http://blog.csdn.net/yuguiyang1990/article/details/8811817 前面我们使用Maven构建了Struts2项目,这里我们来试一下Hibe ...

  2. Ogre1.8.1源码编译

    本文的编译环境为Windows7_SP1 + VS2010_SP1 + CMake2.8.11   :) 资源下载 1. 下载Ogre1.8.1的源代码,下载链接地址:http://www.ogre3 ...

  3. APM终端用户体验监控分析(下)

    一.前言 [APM 终端用户体验监控分析(上)][1]从 APM 终端用户产品特性.使用建议.以及从[真实用户体验][2]和[模拟性能监控][3]两方面入手给大家进行了简单的分享. 本文为下篇,将给大 ...

  4. POJ 3978 Primes(素数筛选法)

    题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include< ...

  5. (转)单机上配置hadoop

    哈哈,几天连续收到百度两次电话,均是利好消息,于是乎不知不觉的自己的工作效率也提高了,几天折腾了好久终于在单机上配置好了hadoop,然后也成功的运行了一个用例,耶耶耶耶耶耶. 转自:http://w ...

  6. MySQL 百万级分页优化

    MySQL 百万级分页优化 http://www.jb51.net/article/31868.htm 一般刚开始学SQL的时候,会这样写 : , ; 但在数据达到百万级的时候,这样写会慢死 : , ...

  7. procedure can't return a result set in the given context

    调用存储过程失败!出现如下错误:PROCEDURE ipbx.qu_ery can't return a result set in the given context, ipbx是数据库, qu_e ...

  8. Good Bye 2015 C. New Year and Domino 二维前缀

    C. New Year and Domino   They say "years are like dominoes, tumbling one after the other". ...

  9. 【转】Linux写时拷贝技术(copy-on-write)

    http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html 源于网上资料 COW技术初窥: 在Linux程序中,fork()会 ...

  10. 使用yum安装CDH Hadoop集群

    使用yum安装CDH Hadoop集群 2013.04.06 Update: 2014.07.21 添加 lzo 的安装 2014.05.20 修改cdh4为cdh5进行安装. 2014.10.22  ...