Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的 机器上。它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统。

1、分布式文件系统

多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统。

分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储。换句话说,它们是横跨在多台计算机上的存储系统。存储在分布式文件系统上的数据自动分布在不同的节点上。

分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理来自网络和其它地方的超大规模数据提供所需的扩展能力。

2、分离元数据和数据:NameNode和DataNode

存储到文件系统中的每个文件都有相关联的元数据。元数据包括了文件名、i节点(inode)数、数据块位置等,而数据则是文件的实际内容。

在传统的文件系统里,因为文件系统不会跨越多台机器,元数据和数据存储在同一台机器上。

为了构建一个分布式文件系统,让客户端在这种系统中使用简单,并且不需要知道其他客户端的活动,那么元数据需要在客户端以外维护。HDFS的设计理念是拿出一台或多台机器来保存元数据,并让剩下的机器来保存文件的内容。

NameNode和DataNode是HDFS的两个主要组件。其中,元数据存储在NameNode上,而数据存储在DataNode的集群上。 NameNode不仅要管理存储在HDFS上内容的元数据,而且要记录一些事情,比如哪些节点是集群的一部分,某个文件有几份副本等。它还要决定当集群的节点宕机或者数据副本丢失的时候系统需要做什么。

存储在HDFS上的每份数据片有多份副本(replica)保存在不同的服务器上。在本质上,NameNode是HDFS的Master(主服务器),DataNode是Slave(从服务器)。

3、HDFS写过程

NameNode负责管理存储在HDFS上所有文件的元数据,它会确认客户端的请求,并记录下文件的名字和存储这个文件的DataNode集合。它把该信息存储在内存中的文件分配表里。

例如,客户端发送一个请求给NameNode,说它要将“zhou.log”文件写入到HDFS。那么,其执行流程如图1所示。具体为:

第一步:客户端发消息给NameNode,说要将“zhou.log”文件写入。(如图1中的①)

第二步:NameNode发消息给客户端,叫客户端写到DataNode A、B和D,并直接联系DataNode B。(如图1中的②)

第三步:客户端发消息给DataNode B,叫它保存一份“zhou.log”文件,并且发送一份副本给DataNode A和DataNode D。(如图1中的③)

第四步:DataNode B发消息给DataNode A,叫它保存一份“zhou.log”文件,并且发送一份副本给DataNode D。(如图1中的④)

第五步:DataNode A发消息给DataNode D,叫它保存一份“zhou.log”文件。(如图1中的⑤)

第六步:DataNode D发确认消息给DataNode A。(如图1中的⑤)

第七步:DataNode A发确认消息给DataNode B。(如图1中的④)

第八步:DataNode B发确认消息给客户端,表示写入完成。(如图1中的⑥)

图1 HDFS写过程示意图

在分布式文件系统的设计中,挑战之一是如何确保数据的一致性。对于HDFS来说,直到所有要保存数据的DataNodes确认它们都有文件的副本 时,数据才被认为写入完成。因此,数据一致性是在写的阶段完成的。一个客户端无论选择从哪个DataNode读取,都将得到相同的数据。

4、HDFS读过程

为了理解读的过程,可以认为一个文件是由存储在DataNode上的数据块组成的。客户端查看之前写入的内容的执行流程如图2所示,具体步骤为:

第一步:客户端询问NameNode它应该从哪里读取文件。(如图2中的①)

第二步:NameNode发送数据块的信息给客户端。(数据块信息包含了保存着文件副本的DataNode的IP地址,以及DataNode在本地硬盘查找数据块所需要的数据块ID。) (如图2中的②)

第三步:客户端检查数据块信息,联系相关的DataNode,请求数据块。(如图2中的③)

第四步:DataNode返回文件内容给客户端,然后关闭连接,完成读操作。(如图2中的④)

图2 HDFS读过程示意图

客户端并行从不同的DataNode中获取一个文件的数据块,然后联结这些数据块,拼成完整的文件。

5、通过副本快速恢复硬件故障

当一切运行正常时,DataNode会周期性发送心跳信息给NameNode(默认是每3秒钟一次)。如果NameNode在预定的时间内没有收到 心跳信息(默认是10分钟),它会认为DataNode出问题了,把它从集群中移除,并且启动一个进程去恢复数据。DataNode可能因为多种原因脱离 集群,如硬件故障、主板故障、电源老化和网络故障等。

对于HDFS来说,丢失一个DataNode意味着丢失了存储在它的硬盘上的数据块的副本。假如在任意时间总有超过一个副本存在(默认3个),故障 将不会导致数据丢失。当一个硬盘故障时,HDFS会检测到存储在该硬盘的数据块的副本数量低于要求,然后主动创建需要的副本,以达到满副本数状态。

6、跨多个DataNode切分文件

在HDFS里,文件被切分成数据块,通常每个数据块64MB~128MB,然后每个数据块被写入文件系统。同一个文件的不同数据块不一定保存在相同的DataNode上。这样做的好处是,当对这些文件执行运算时,能够通过并行方式读取和处理文件的不同部分。

当客户端准备写文件到HDFS并询问NameNode应该把文件写到哪里时,NameNode会告诉客户端,那些可以写入数据块的 DataNode。写完一批数据块后,客户端会回到NameNode获取新的DataNode列表,把下一批数据块写到新列表中的DataNode上。

简述hdfs工作原理_简述HDFS的原理?相关推荐

  1. 简述一下动态sql的执行原理_简述一下Pogo Pin电连接器的设计原理和考虑因素

    "简述一下Pogo Pin电连接器的设计原理和考虑因素"由电蜂优选为您整理. 目前随着电子科技时代的快速发展,电连接器的发展也逐渐成为主流发展趋势之一.例如电动汽车新能源的开发与研 ...

  2. hdfs mv命令_如何HDFS mv命令工作

    當用戶調用hdfs dfs -mv時,HDFS保證重命名操作的原子性.當此命令運行時,客戶端對NameNode進行RPC調用.該RPC的NameNode實現在修改inode樹時保存鎖定,並且只有在重命 ...

  3. 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...

    先给出结论,最重要的区别在于:增量式编码器没有记忆,断电重启必须回到参考零位,才能找到需要的位置,而绝对式编码器,有记忆,断电重启不用回到零位,即可知道目标所在的位置. 接下来细说一下,主要包含如下的 ...

  4. 分类计数原理与分步计数原理_分类加法计数原理与分步乘法计数原理的解题策略之一...

    分类加法计数原理与分步乘法计数原理 [最新考纲] 1.理解分类加法计数原理和分步乘法计数原理. 2.会用分类加法计数原理或分步乘法计数原理分析和解决一些简单的实际问题. 知 识 梳 理 1.分类加法计 ...

  5. 简述ospf的工作原理_简述洛氏硬度计的工作原理及应用领域

    简述洛氏硬度计的工作原理及应用领域,其采用金刚石锥体或钢球作为压头.它应用一个次要负载,接着是一个主要负载,然后将负载减少到 初的次要负载.材料的硬度通过使用线性测量仪或其他工具从次要负载的第二次穿透 ...

  6. 简述冯诺依曼工作原理_深入浅出讲解计算机原理

    当前最先进的计算机都采用的是冯诺依曼体系结构,所以冯诺依曼是当之无愧的数字计算机之父. 冯诺依曼体系结构特点: (1)计算机处理的数据和指令一律用二进制数表示 (2)顺序执行程序 计算机运行过程中,把 ...

  7. 简述java程序的工作过程_简述 Java 程序的开发过程。_学小易找答案

    [填空题]两个啮合齿轮在啮合区内,一个齿轮的轮齿用()绘制,另一个齿轮的轮齿被遮挡的部分用()绘制,被遮挡的部分也可以省略不画. [单选题]只有建立了统一的学校集体,才能在儿童的意识中唤起舆论的强大力 ...

  8. 简述什么是图灵机_图灵机简介和原理分析

    图灵机简介和原理分析 摘要 : 1936 年, 阿兰·图灵提出了一种抽象的计算模型 -- 图 灵机 (Turing Machine) .图灵机是指一个抽象的机器,可被视作任 意解决有限数学逻辑过程的机 ...

  9. 简述js原型链_简述js

    简述js原型链 (在React 16.8.0之前)((before React 16.8.0)) Yeah, I know that there are terabytes of data avail ...

  10. java hdfs创建文件_使用HDFS java api 创建文件出错。

    //创建文件核心代码 public static void createNewHDFSFile(String toCreateFilePath, String content) throws IOEx ...

最新文章

  1. android相机截取矩形框,Android自定义照相机实现只拍摄矩形区域(重传)
  2. 【数字信号处理】基本序列 ( 单位阶跃序列 | 单位阶跃序列与单位脉冲序列关系 | 矩形序列 | 矩形序列与单位阶跃序列关系 | 矩形序列作用 )
  3. rust(54)-字符串
  4. mysql触发器学习的一个小错误
  5. 【蓝桥杯每日一练】 汉诺塔
  6. 三分钟入门电力系统之----------三道防线
  7. Tomcat原理系列之一:整体架构,抓住主线
  8. 速读原著-TCP/IP(端口映射器)
  9. web版ppt制作插件impress.js源码注释翻译
  10. php getdigest,http digest
  11. 免费域名邮箱申请教程
  12. wechat4j获取用户昵称乱码修复
  13. 使用Arduino Tone()函数演奏旋律
  14. LOJ 10155. 「一本通 5.2 例 3」数字转换
  15. sql server获取库名,表名
  16. pytorch安装,torch.cuda.is_available()返回False解决方案
  17. SAP委外加工业务系统逻辑及控制指导
  18. Vue3 高级语法以及自定义组件
  19. HTTP长链接与短连接?
  20. linux一键电影网站脚本,Linux下HTML5播放器一键生成脚本

热门文章

  1. mysql类型float_Mysql数据类型---FLOAT
  2. python开发ios程序_使用Python开发iOS程序
  3. 果真A站完了是B站,B站后台工程源码疑似泄露,已被GitHub删除!
  4. UE5 使用Spine插件
  5. CocosCreator之KUOKUO带你简单使用Spine骨骼动画
  6. 链队列约瑟夫环c++代码_数据结构之约瑟夫环C语言实现
  7. steam一键授权工具_您有【小米电话手表、小米手写板或STEAM实验套装】待领取...
  8. 三菱plc编程软件gx-developer在win10中无法使用及工程无法建立解决方法
  9. java视频教程下载
  10. 安徽医科大学计算机二级证书,勇追梦 终圆梦 安徽医科大学2021届推免生成绩喜人...