HDFS分布式文件系统设计原理

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

4、HDFS读过程

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

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

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

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

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

在这里插入图片描述
客户端并行从不同的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上。

7、HDFS优缺点

优点:
在这里插入图片描述
缺点:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Magicodes.IE已支持导出Word、Pdf和Html

关于Magicodes.IE导入导出通用库,通过导入导出DTO模型来控制导入和导出,支持Excel、Word、Pdf和Html。GitHub地址:https://github.com/xin-lai/Magicodes.IE特点需配合相关导入导出的DTO模型使用,支持通过DTO以及相关特性控制导入…

AOP框架Dora.Interception 3.0 [1]: 编程体验

.NET Core正式发布之后,我为.NET Core度身定制的AOP框架Dora.Interception也升级到3.0。这个版本除了升级底层类库(.NET Standard 2.1)之外,我还对它进行大范围的重构甚至重新设计。这次重构大部分是在做减法,其目的在…

分布式缓存——一致性哈希算法

本文主要来自:http://www.zsythink.net/archives/1182 摘录防丢失 一致性哈希算法定义 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初…

H264学习_基本数据结构

原文地址:http://blog.csdn.net/yangzhongxuan/article/details/8003494 名词解释 场和帧 : 视频的一场或一帧可用来产生一个编码图像。在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场。 片&#xff1a…

【巴马火麻茶】调节三高、治疗失眠、排毒减肥,轻松get长寿的秘密!

水,无色无味,是人类的生命源泉对于长期坐办公室的程序员朋友来说每日都得喝水但又觉得寡淡的白开水缺少点乐趣于是,茶叶就成了大家泡水的首选今天,队长要为大家介绍一款养生好茶巴马火麻茶每天一杯,轻松get长寿的秘密火…

「合规」震惊!地图可视化竟能如此玩,零门槛,全免费,效果远胜主流作图工具!...

在数据可视化领域,早晚会遇上地图可视化的需求,一个高大上的地图可视化,瞬间拔高整个报告的层次。Excel催化剂有幸接触并将地图可视化完全落地于Excel中完成。相对主流Python、R、PowerBI等作图工具,在易用性、灵活性和功能的强大…

Opencv SVM demo

转载自http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html 支持向量机 (SVM) 是一个类分类器,正式的定义是一个能够将不同类样本在样本空间分隔的超平面。 换句话说&#xff…

BeetleX之FastHttpApi服务使用详解

BeetleX是一个轻量级高性能的开源TCP通讯应用框架,通过BeetleX可以轻松扩展不同场的TCP应用服务和客户端组件。框架开源地址:https://github.com/IKende/BeetleX组件特点高性能TCP通讯组件,轻易实现百万级RPS通讯交互提供完善的会话管理机制和协议分析规则提供简洁的…

康威定律

本文来自:http://www.dockone.io/article/2691 1、概述 微服务架构是一种非常流行的新概念,即便可供以借鉴的经验比较少,当然不能阻挡它成为热门话题与研究对象。 令人惊讶地是,其实微服务的概念早在五十多年前就已经被提出&…

Cannot find or open the PDB file

http://blog.chinaunix.net/uid-11765716-id-3074932.html 遇到问题 SVM_demo.exe (Win32): Loaded ...\SVM_demo\Debug\SVM_demo.exe. Symbols loaded. SVM_demo.exe (Win32): Loaded C:\Windows\System32\ntdll.dll. Symbols loaded. SVM_demo.exe…

基于ASP.NET Core 3.0的ABP v0.21已发布

在微软发布仅仅一个小时后, 基于ASP.NET Core 3.0的ABP v0.21也紧跟着发布了.v0.21没有新功能.它只是升级到稳定的ASP.NET Core 3.0. 查看v0.20发行说明以获取新功能,增强功能和错误修复.关于v1.0ABP框架越来越接近v1.0.我们打算在今年10月中旬发布1.0. 现在,我们将完善测试和文…

SOA和微服务

一、面向服务的架构SOA SOA代表了面向服务的架构。 SOA是一种使用松耦合的黑盒子服务构建业务应用的体系架构,这些服务可以通过编排连接在一起以实现特定的功能。 面向服务的架构(Service-Oriented Architecture)是一种软件体系结构&#x…

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的.NET程序员,相信传统的.NET应用的开发方式已经深深地烙印…

下一代微服务架构基础:ServiceMesh?

最近,ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础。作为架构师,如果你现在还不了解 ServiceMesh 的话,是否感觉有点落伍了&…

ASP.NET Core 2.0 Web API项目升级到ASP.NET Core 3.0概要笔记

本文结构先决条件升级目标框架(Target Framework)的版本过时的IHostingEnvironment与IApplicationLifetime对象Endpoint Routing与AddMvc中间件Swashbuckle.AspNetCore总结手头有个ASP.NET Core 2.0的项目,打算将里面的依赖包进行一个版本升级…

常见消息队列对比

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,Rabbit…

Precision-Recall Curve

原文出自:http://blog.csdn.net/pirage/article/details/9851339 最近一直在做相关推荐方面的研究与应用工作,召回率与准确率这两个概念偶尔会遇到, 知道意思,但是有时候要很清晰地向同学介绍则有点转不过弯来。 召回率和准确率是…

2019 中国.NET 开发者峰会正式启动

2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.NET基金会,Google,微软,AWS三大云厂商已经齐聚.NET基金会,在平台项目中,.NET平台上有…

聊一聊顺序消息(RocketMQ顺序消息的实现机制)

本文来自:https://www.cnblogs.com/hzmark/p/orderly_message.html 当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系。 比如事件A发生在下午3点一刻&#…

如何摆脱「技术思维」的惯性?

大家好,我是Z哥。虽然从标题上看,这篇文章是写给“技术人”的,但从广义上来说,只要你是一位以理性见长的人,那么这篇文章要讲的东西可能会与你有关。先问大家一个问题。如果你现在打算做一件事A,它的目的是…