分析HDFS架构并读写数据流的文章

到目前为止,Hadoop已经开发了10多年,并且该版本已经更新和迭代了无数次。

当前,行业中的每个人都将Hadoop的主要版本分为Hadoop1.0,Hadoop2.0和Hadoop3.0三个版本。

1. Hadoop简介首次发布Hadoop版本时,它要解决两个问题:一个是如何存储海量数据,另一个是如何计算海量数据。

Hadoop的核心设计是HDFS和Mapreduce。

HDFS解决了如何存储海量数据的问题,而Mapreduce解决了如何计算海量数据的问题。

HDFS的全名:HadoopDistributedFileSystem。

2.分布式文件系统Picture HDFS实际上可以理解为分布式文件系统。

如图1所示,假设每台服务器都有自己的文件系统,那么这四台服务器是否有自己的文件系统可以存储数据。

存储空间存储10G数据。

假设数据量较小,则可以存储10G数据。

当数据量大于服务器的存储空间时,单个服务器是否无法存储数据?我们可以在服务器中部署Hadoop以便构建集群(超级计算机)吗?这样,存储了4 * 10 = 40G的数据,因此当我们面对用户时,是否只有一台相当于分布式文件系统的超大型计算机? HDFS是一种主从架构,主节点只有一个NemeNode。

该节点中有多个DataNode。

3. HDFS架构图假设我们这里有5台服务器,并且每台服务器都部署在Hadoop上,我们随机选择一台服务器来部署NameNode,其余服务器来部署DataNode。

客户端上载文件时,假设文件大小为129M。

HDFS的默认拆分大小为128M。

此时,将生成2个blkNameNodes来通知DataNode上载文件(这里有某种策略),我们假设这些文件分别存储在4个服务器上。

为什么我们需要分别存储它们?假设DataNode服务器突然停运一天。

我们是否仍可以通过DataNode4或2和3读取数据,以防止数据丢失? NameNode管理元数据信息(文件目录树):文件与块,块和DataNode主机之间的关系NameNode是为了快速响应用户操作,因此将元数据信息加载到内存中,DataNode存储数据,而上传的数据为分成固定大小的文件在Hadoop 2.73之前,块在64M之后更改为128M。

为了确保数据安全性,每个文件默认为三个副本。

SecondaryNamenode会定期从NameNode节点提取Edtis和fsimage文件,并将这两个文件添加到中。

然后将内存添加到内存中,以合并这两个文件以生成新的fsimage并将其发送到NameNode。

4. HDFS写入数据过程客户端将向文件节点发送写入请求和文件路径,并通过RPC与NameNode建立通信。

NameNode检查目标文件并返回是否可以上传。

客户端请求将第一个块传输到哪个DataNode服务器; NameNode根据副本数和副本放置策略分配节点,并返回到DataNode节点,例如:A,B,CClient请求节点A建立管道,A收到请求后将继续调用B,然后B将调用C建立整个管道。

完成后,该消息将逐级返回到客户端。

客户端收到A返回的消息后,客户端开始将第一个块块上传到A。

该块块分为64K数据包,并在pepiline管道中从A到B连续传输,从B到C复制存储空间。

块块的传输完成后,客户端再次请求NameNode上载第二块块的存储节点,并保持往复存储。

所有块块的传输完成后,客户端将调用FSDataOutputSteam的close方法以关闭输出流。

调用FileSystem的完整方法来通知NameNode数据已成功写入。

5. HDFS读取数据的过程。

客户端将首先向具有读取路径的NameNode发送读取请求,通过RPC与NameNode建立通信,然后NameNode检查目标文件以确定所请求的文件。

视具体情况而定,块块NameNode的位置信息将返回文件的部分或全部块块列表。

对于每个块块,NameNode将返回包含该块副本的DataNode地址。

这些返回的DataNode地址将根据群集拓扑进行计算。

然后按照两个规则对客户端的距离进行排序:在网络拓扑中最接近客户端的位置排名第一;心跳机制中超时机制报告的DN状态为STALE,排名较低;客户选择

联系方式

ARF系列片式电阻器设计为低内部电抗。薄膜技术应用于电阻器是适当的,以减少寄生电感和电容。 低内部电抗允许这些器件在高频下保持非常好的电阻器行为。

查看详情

在线咨询