HDFS是怎么设计架构的

技术HDFS是怎么设计架构的这篇文章给大家分享的是有关HDFS是怎么设计架构的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Hadoop 简介Hadoop版本刚出来的时候是为了解决两个问题

这篇文章是关于HDFS如何设计建筑的。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。

一、Hadoop 简介

Hadoop版本刚出来的时候,是为了解决两个问题:一个是如何存储海量数据,另一个是如何计算海量数据。Hadoop的核心设计是HDFS和Mapreduce。HDFS解决了如何存储海量数据的问题,而Mapreduce解决了如何计算海量数据的问题。HDFS的全称是:Hadoop分布式文件系统。

二、分布式文件系统

HDFS是怎么设计架构的

图中的HDFS实际上可以理解为一个分布式文件系统。如图1所示,假设每台服务器的存储空间存储10G的数据,可以看出这四台服务器是否都有自己的文件系统来存储数据。假设在数据量很小的情况下存储10G的数据是可以的,那么当数据量大于服务器的存储空间时,单个服务器是否不可能存储呢?我们能否在服务器中部署一个Hadoop,这样我们就可以构建一个集群(超级计算机)?这样就存储了4*10=40G的数据量,这样当我们面对用户时,是不是只有一台超大型计算机相当于一个分布式文件系统?

HDFS是一个主从架构,只有一个NemeNode作为主节点。从节点中有多个数据节点。

三、HDFS 架构

HDFS是怎么设计架构的

图片:假设我们这里有五个服务器,每个服务器都是用Hadoop部署的。让我们只选择一台服务器部署名称节点,其余服务器部署数据节点。

客户端上传文件时,假设文件大小为129MHDFS,默认拆分大小为128M m,此时会生成两个blkNameNode通知DataNode上传文件(这里有一定的策略),所以我们假设这些文件会分别存储在四个服务器上。为什么要分开存放?假设有一天数据节点服务器突然挂起。我们还能通过DataNode4或者2、3读取数据,防止数据丢失吗?

NameNode

管理元数据信息(文件目录树):文件与数据块、数据块与数据节点主机之间的关系。

名称节点将元数据信息加载到内存中,以便快速响应用户的操作。

DataNode

数据存储,将上传的数据划分为固定大小的文件块(blocks),从Hadoop2.73之前的64M变为后来的128M。

为了确保数据安全,默认情况下每个文件有三个副本。

SecondaryNamenode

定期从NameNode拉Edtis和fsimage文件,将这两个文件添加到内存中,然后将这两个文件添加到内存中进行合并,以生成新的fsimage并将其发送到NameNode。

四、HDFS写入数据流程

客户端将使用文件路径向名称节点发送写请求,通过RPC与名称节点建立通信。NameNode将检查目标文件并返回是否可以上传。

客户端请求第一个数据块应该传输到哪个数据节点服务器;

NameNode根据副本数量和副本放置策略分配节点,并返回DataNode节点,如a、b和c。

请求客户端A节点建立管道,A收到请求后会继续调用B,然后B调用C,整个管道建立完成后,会一步步向客户端返回消息;

接收到客户端A返回的消息后,开始向A上传第一块,该块被切割成64K数据包,在pepiline管道中连续传输,并从A复制存储到B and B到c。

当一个数据块传输完成后,客户端请求NameNode再次上传第二个数据块的存储节点,并保持来回存储。

当传输完所有块块后,客户端调用FSDataOutputSteam的close方法关闭输出流,最后调用FileSystem的complete方法通知NameNode数据写入成功。

五、HDFS读取数据流程

客户端首先用读取路径向NameNode发送读取请求,通过RPC与NameNode建立通信,NameNode检查目标文件,确定请求文件所在块的位置信息。

NameNode将根据需要返回文件中的部分或全部块列表。对于每个块,名称节点将返回包含该块副本的数据节点地址。

这些返回的DataNode地址会根据集群拓扑得到DataNode和Client之间的距离,然后按照两个规则进行排序:网络拓扑中距离客户端最近的排第一;心跳机制超级联赛上报的DN状态为STALE,较低;

客户端选择排名靠前的数据节点,并调用FSDataInputSteam的读取方法来读取块数据。如果客户端本身是数据节点,块数据将直接在本地获得。

读取一批块块后,如果文件读取尚未完成,客户端将继续从NameNode获取下一批的块列表并继续读取。

读取所有块块后,客户端调用FSDataInputStream.close()方法关闭输入流,并将所有读取的块块合并到一个完整的最终文件中。

六、HDFS缺陷

注:早期版本

单点问题

记忆限制

感谢阅读!这篇关于“HDFS如何设计建筑”的文章就分享到这里。希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/139136.html

(1)

相关推荐

  • 如何解决jvm内存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded问题

    技术如何解决jvm内存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded问题如何解决jvm内存溢出java.lang.OutOfMemoryError: GC

    攻略 2021年10月23日
  • IP代理软件怎么助力新媒体增长

    技术IP代理软件怎么助力新媒体增长小编给大家分享一下IP代理软件怎么助力新媒体增长,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、在各种方式

    攻略 2021年11月1日
  • Mac电脑上怎么设置五笔输入法教程

    技术Mac电脑上怎么设置五笔输入法教程本篇内容介绍了“Mac电脑上怎么设置五笔输入法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,

    攻略 2021年10月23日
  • 抖音点赞1.8元一单,抖音点赞技巧!

    技术抖音点赞1.8元一单,抖音点赞技巧!大家务必要可以客观的应对抖音短视频粉丝领域的收费标准价钱规范,并并不是贵的才算是好的自然也并不一定划算的价钱全是不靠谱的,只是要可以融合自身的要求选择专业靠谱的服务平台,而且必须可

    测评 2021年10月26日
  • IE6下使用CSS定义DIV高度行的办法是什么

    技术IE6下使用CSS定义DIV高度行的办法是什么这篇文章给大家介绍IE6下使用CSS定义DIV高度行的办法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IE6下CSS定义DIV高度的问题IE

    攻略 2021年11月11日
  • JQuery怎么删除UL最后一个li

    技术JQuery怎么删除UL最后一个li本篇内容主要讲解“JQuery怎么删除UL最后一个li”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JQuery怎么删除UL最后一个l

    2021年11月17日