HDFS的读写流程和文件块大小设置

仅供复习时使用。
HDFS写入数据:

  1. client端按128MB的块切分文件。
    在这里插入图片描述
    注意:
  • 在数据流式传输过程中,最小传输单位是Packet,大小为64k,其中Packet是由512bytes的chunk和4bytes的chunksum(chunk校验码)组成;
  • 客户端向NameNode发出写文件请求。
  • client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。
    (注:并不是写好一个块或一整个文件后才向后分发)
  • datanode之间传递时,数据会产生一个ACK队列(里面存放的就是Packet数据),即一个缓冲区队列,当应答成功后(要注意应答也是从后往前,逐级应答的,收到了应答说明这个节点之后的节点已经完成写入操作),缓冲区内的数据才会被删除;
  • 一个Block传输完成后,客户端再次请求 NameNode 上传第二个 Block 的服务器。(重复图中步骤)

datanode写入数据过程中如果发生故障:首先关闭管线,队列中的数据的所有数据包都添加到数据队列的最前端,(确保故障节点下游的datanode不会漏掉任何一个数据;另一正常的datanode的当前数据块指定一个标识,并发送给namenode,方便在后续故障datanode恢复后删除存储的部分数据;)然后从管道线中删除故障datanode,基于正常的datanode重新建立管道线,余下的数据块写入管道中正常的datanode;

HDFS读数据:
在这里插入图片描述
读取DataNode的选择条件:

1、与客户端的距离;2、负载均衡;
(1)客户端通过 DistributedFileSystem 向 NameNode 请求下载文件,NameNode 通过查询元数据,找到文件块所在的 DataNode 地址。
(2)挑选一台 DataNode(就近原则,然后随机)服务器,请求读取数据。
(3)DataNode向输入流中中写数据,以packet为单位来校验。
(4)关闭输入流。

文件块大小和小文件处理:
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop2.x和3.x中是128M,在1.x中式64M;
为什么这么定大小:
​ 比如寻址时间是10ms,而寻址时间为传输时间的1%时为最佳状态,即传输时间大致为1秒,现在硬盘的传输速度约为100MB/S,所以大致为128MB,为什么不选100MB,因为磁盘是以1024为基础单位的;
为什么块的大小不能太大,也不能太小;
​ 块太小,会增加大量的寻址时间,程序一直在找块的位置;
​ 块太大,磁盘传输时间太长,导致程序在处理这个块时,非常慢;

补充内容:
2NN的作用:
第一阶段:NameNode启动
(1)第一次启动 NameNode 格式化后,创建 Fsimage 和 Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode 记录操作日志,更新滚动日志。
(4)NameNode 在内存中对元数据进行增删改。

fsimage:元数据镜像文件(文件系统的目录树。)
edits:元数据的操作日志(针对文件系统做的修改操作记录)
namenode内存中存储的是=fsimage+edits

存储数据位置:fsimage(存储着HDFS文件系统的所有目录和文件inode的序列化信息);
Edits文件:追加内容(只记录过程,不计算结果);
服务器启动后:fsimage和Edits文件会综合数据,并存入内存中,开始工作;(启动时会进行一次合并)可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。

2NN作用:定期帮助这两个文件进行合并;
(了解)
在hadoop102主服务器中/opt/module/hadoop-3.1.3/data/dfs/name/current目录中有这两种文件;
在hadoop104secondaryNameNode所在服务器中/opt/module/hadoop-3.1.3/data/dfs/namesecondary/current目录中也有这两种文件;
两个目录的文件内容差不多,但102主服务器中会多一个edits_inprogress_…(镜像文件)文件和一个seen_txid文件(保存最后一个edits的数字);
seen_txid文件保存的是一个数字,就是最后一个edits_的数字

HDFSHadoop Distributed File System)是Hadoop生态系统中的一部分,它是一个可伸缩的分布式文件系统,可以在大型集群中存储和处理超大型数据集。下面是HDFS读写流程和原理: 1. 写入流程 (1)客户端向NameNode请求写入文件,NameNode返回一个DataNode列表,客户端接收到后与DataNode进行数据通信。 (2)客户端将数据划分为一个个数据,并与DataNode建立连接,将数据写入DataNode。 (3)DataNode接收到数据后,先将数据写入本地磁盘,然后将数据复制到其他DataNode上,以实现数据备份。 (4)客户端在写入完数据后,向NameNode发送文件元数据,即文件名、数据ID、数据所在的DataNode等信息,NameNode将这些信息保存在内存中,并更新元数据信息。 2. 读取流程 (1)客户端向NameNode请求读取文件,NameNode返回一个DataNode列表和对应的数据位置信息。 (2)客户端与DataNode建立连接,请求数据,DataNode将数据返回给客户端。 (3)客户端读取完所有数据后,将数据组合成完整的文件HDFS的主要原理是数据分片和复制。HDFS将大文件划分为多个数据,每个数据默认大小为128MB,每个数据会复制到多个DataNode上,以实现数据备份和容错。NameNode负责管理文件系统的元数据,包括文件名、文件目录、数据位置等信息,而DataNode则负责数据的存储和读写。这种分布式存储方式可以实现高可用性和高可靠性,并且可以通过增加DataNode数量来提高存储和读写性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值