HDFS数据的读写过程(重点)

HDFS数据的读写过程(重点),第1张

(1)客户端通过FileSystem.open()打开文件,相应地,在HDFS文件系统中DistributedFileSystem具体实现了FileSystem。因此,调用了open()方法后,DistributedFileSystem会创建输入流FSDataInputStream,对于HDFS而言,具体的输入流就是DFSInputStream.

(2)DFSInputStream的构造函数中,输入流通过ClientProtocal.getBloackLocations()远程调用NameNode,获得文件开始部分数据块的保存位置。对于该数据块。名称节点返回保存该数据块的锁哟数据节点的地址,同时根据距离客户端的远近对数据节点进行排序,然后DistributedFileSystem会利用DFSInputStream来实例化FSDataInputStream返回给客户端,同时返回了数据块的数据节点的地址。

(3)获得输入流FSDataInputStream后,客户端调用read()函数开始读取数据。输入流根据前面的排序结果,选择距离客户端最近的数据节点建立连接,然后读取数据。

(4)读取完毕后,关闭流,如果还有下一个数据块,就与下一个DN建立连接,读取数据块。

(1)客户端发起创建文件请求

(2)DistributedFileSystem通过RPC远程调用名称节点,在文件系统的命名空间中创建一个新的文件。名称节点会执行一些检查,比如这个文件是否存在,客户端是否有权限等。通过检查,名称节点会狗仔一个新文件,并且添加文件信息。然后返回给客户端一个输出流,客户端通过这个输出流,用它来写入数据。

(3)获得输出流FSDataOutputStream以后,客户端调用输出流的write方法想HDFS中对应的文件写入数据

客户端向输出流FSDataOutputStream中写入的数据会首先被分成一个个的分包,这些分包被放入DFSOutputStream对象的内部队列。每个包64K,包中有数据块,块是512字节,这些包被放入DFSOutputStream对象的内部队列,FSDataOutputStream向名称节点申请保存文件和副本数据块的若干数据节点。这些数据节点形成一个数据流管道,队列中的分包最后被打包成数据包,发往数据流管道第一个节点,第一个节点又复制到第二、三个节点,采用流水线复制策略(在写入磁盘时候 是每次4k往磁盘写)

(5)为保证所有数据节点的数据准备DataNode返回确认包 Client收到应答,将对应分宝从内部队列移除。开始下一个分包。

认识HDFS

HDFS的特点:

HDFS不适用的场景

HDFS的组成

HDFS的数据复制

HDFS复制的选择

HDFS的安全模式

HDFS的元数据持久化

HDFS架构

数据块

为什么HDFS默认的Block为128MB(64MB)?

分布式文件系统中的块进行抽象带来的好处:

NameNode

NameNode主要功能如下:

DataNode

SecondaryNameNode

SecondaryNameNode合并Fsimage和EditsLog文件过程如下:

CheckPoint过程如下:

SecondaryNameNode会周期性地将EditsLog文件进行合并,合并前提条件如下:

机架感知

HDFS的RPC机制

RPC的实现流程

RPC的实体模型

HDFS的文件读取

文件读取的流程如下:

HDFS的文件写入

写入文件的过程比读取复杂,步骤如下:

HDFS的HA(High Availability,高可用性)机制

HA架构解释如下:

HDFS的federation机制

HDFS Federation使用了多个独立的NameNode/NameSpace使得HDFS的命名服务能够水平扩展

HDFS Federation中的NameNode之间是联盟关系,它们之间相互独立且不需要相互协调。HDFS Federation中的NameNode提供了名字空间和块关联功能.HDFS Federation中的DataNode被所有的NameNode用作公共存储块的地方.每一个DataNode都会向所在集群中所有的NameNode注册,并周期性的发送心跳和块信息报告,同时处理来自NameNode的指令

在HDFS中,所有的更新、回滚都是以NameNode和BlockPool为单元发生的.即同HDFS Federation中不同的NameNode/BlockPool之间没有什么关系

多个名字空间的管理问题

HDFS Federation中名字空间管理的基本原理:

维护HDFS

追加数据

并行复制

升级与回滚

两种升级升级都简单分为以下几步:

添加节点

删除节点

HDFS权限管理

当用户通过命令行或者JavaAPI向Hadoop集群发起写入文件 *** 作时,将触发写文件流程,分为3个阶段:创建文件,建立数据流管道和写数据。

数据传输过程中,如果datanode2突然挂掉了,HDFS会启动如下步骤进行容错。

namenode负责HDFS集群的元数据管理,要保证快速检索,namenode必须将数据放到内存中,但一旦断电或者故障,元数据会全部丢失,因此还必须在磁盘上做持久化。HDFS集群做元数据持久化的方式是edits.log+FSImage。edits.log存储近期的 *** 作,FSImage存储以前的 *** 作,这样是为了尽可能地保障namenode的启动速度。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11795174.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存