0


HDFS-学习日记

HDFS

1.HDFS的定义

HDFS

是一款分布式文件管理系统(Hadoop Distribute File System)。

HDFS是一个文件系统,使用

树形目录结构

管理、存储数据,其次它是分布式的系统,可以使用若干个服务器联合实现功能,并且在集群中担任不同的角色。

HDFS适合一次写入,多次读取的应用场景,文件一经写入就不需要修改。

2. HDFS的优缺点

1.优点

  1. HDFS具备高容错性:每台机器上的DataNode默认情况下每个6小时NameNode汇报一次,一旦发现DataNode上的数据块丢失,NameNode会发送指令从副本中再复制一份已丢失的数据块。
  2. 适合处理百万规模以上的数据存储。
  3. 可一个构建在廉价的服务器上,并且可以通过脚本机制提高可靠性。

2.缺点

  1. 不适合低延时数据访问,毫秒级的数据存储无法实现。
  2. 无法对大量的小文件、散碎文件进行存储 - 因为每个文件都对应生成一个NameNode来存储文件的目录和数据块信息,每个NameNode占用大概150个字节,而NameNode内存是有限的,所以会造成资源浪费,并不可取。- 小文件的寻址时间超过文件的读取时间,违反设计初衷。
  3. HDFS只支持数据的追加(append),不支持直接修改。
  4. HDFS不支持并发写入,只能单线程写入。即一次只能传输一个数据块

3.HDFS的文件块

  1. HDFS的寻址时间是传输时间的==1%==为最佳状态。
  2. 文件块设置太小会增加文件块的数量,从而增加寻址时间;设置太大会增加硬盘的读写时间,降低读写效率
  3. 现阶段版本,HDFS的默认文件块大小是128MB,默认大小是由当前的硬盘写入的速度决定的,实际使用中可以结合服务器的存储磁盘的性能灵活修改。
  4. 在1.x版本的默认文件块大小是64MB,2.x版本开始更改为128MB。

4.HDFS的组成架构

1.NameNode

NameNode是HDFS中的重要组成部分(Master、HDFS老大哥):

  • 负责管理HDFS的名称空间(文件的目录结构)
  • 配置副本策略(备份文的件数量)
  • 管理数据块的映射信息(管理DataNode信息)
  • 处理客户端读写请求。数据上传下载归HDFS管,跟Yarn没关系!

2.DataNode

接收NameNode下达的命令,由DataNode执行命令。

  • 用于存储真实数据块
  • 执行数据块的读写操作

3. Client

就是客户端:

  • 按照文件块大小设置切分文件(每读取够设置的文件块大小,自动拆分为文件块),上传时Client负责将切好的文件块(Block)上传到HDFS。
  • 与NameNode通信,获取目标文件的位置信息
  • 与DataNode通信,完成数据的读写操作
  • Client还提供了一些命令管理HDFS,如NameNode的格式化命令
  • Client可以通过一些命令访问HDFS,对HDFS进行操作,如HDFS文件增删改等

4.SecondaryNameNode

2NN

并不是NameNode的热备,当NameNode挂掉时

2NN

并不能代替NameNode提供服务。

  • 2NN只是辅助NameNode,定期合并Fsimage和Edits,并推送给NameNode,分担NameNode的工作量
  • 紧急情况下,能够辅助恢复部分NameNode的文档信息
  • 但是2NN并不能百分百的恢复NameNode的信息

5.

HDFS的Shell操作命令
[[email protected] hadoop-3.1.3]$ bin/hadoop fs

[-appendToFile <localsrc>... <dst>][-cat [-ignoreCrc]<src>...][-chgrp [-R] GROUP PATH...][-chmod [-R]<MODE[,MODE]... | OCTALMODE>PATH...][-chown [-R][OWNER][:[GROUP]]PATH...][-copyFromLocal [-f][-p]<localsrc>... <dst>][-copyToLocal [-p][-ignoreCrc][-crc]<src>... <localdst>][-count [-q]<path>...][-cp [-f][-p]<src>... <dst>][-df [-h][<path>...]][-du [-s][-h]<path>...][-get [-p][-ignoreCrc][-crc]<src>... <localdst>][-getmerge [-nl]<src><localdst>][-help [cmd ...]][-ls [-d][-h][-R][<path>...]][-mkdir [-p]<path>...][-moveFromLocal <localsrc>... <dst>][-moveToLocal <src><localdst>][-mv <src>... <dst>][-put [-f][-p]<localsrc>... <dst>][-rm [-f][-r|-R][-skipTrash]<src>...][-rmdir [--ignore-fail-on-non-empty]<dir>...]<acl_spec><path>]][-setrep [-R][-w]<rep><path>...][-stat [format]<path>...][-tail [-f]<file>][-test -[defsz]<path>][-text [-ignoreCrc]<src>...]

6.

HDFS的读写流程

6.1 HDFS的写入数据流程

客户端通过HDFS Client向HDFS提交上传数据申请:

  1. 首先由DFS(Distributed FileSystem模块)向NN(NameNode)提交上传数据申请,并附带文件的全路径。NN会检查上传数据是否合法,之后回应请求。
  2. DFS再次向NN申请DN(DataNode)作为数据存储节点,NN会根据Client的实际情况默认返回3个DN给DFS。
  3. 获取DN节点信息后,FSOS(FileSystem OutputStream模块)会向DN1请求建立传输通道,DN1连接DN2,DN2连接DN3,之后逐级返回应答。
  4. 建立通道后,FSOS会以1个Packet(64K)为单位,向DN1发送数据包存放到DN的应答队列等待,发送完成之后由DN1发个DN2,DN2发送给DN3。
  5. 一个Packet完成传输后,所有的DN会并行将数据包写入磁盘中保存。
  6. 一个Block传输完成后,会重复3~5步,直到数据全部完成上传。
  7. 当所有数据完成上传后,FSOS会通知NN数据已完成。

1、Block 是HDFS中的数据块,默认大小为128MB,可以根据实际磁盘的读写速度进行修改。

2、Packet是数据上传下载的基本单位,大小为64KB。又将一个Packet拆分为多个516字节的chunk。

​ 一个Packet中存储的信息为: 512byte chunk(真实数据) + 4byte sumchunk(数据校验和)

6.2 HDFS的读取数据流程

客户端通过HDFS Client向HDFS请求下载数据:

  1. 客户端向NN发送下载数据请求,NN做出应答,并返回目标数据的元数据。
  2. 客户端拿到元数据后解析元数据信息,找到目标数据所在的DN的位置。
  3. 客户端会找到最近的DN发送建立数据传输通道请求,如果数据没有全部存放在一个DN上,则由客户端按照就近原则找到下一个文件位置。注意:DN在上传数据时,只能串行传输数据,DN1传输结束再由DN2传输数据。
  4. DN将数据以Packet为单位上传到本地缓存,缓存完成之后再写入磁盘。

6.3HDFS副本节点的选择

NN会根据Client的请求地址,如果Client的本地有DN,则选择本地DN作为DN1,然后再另一个机架选择一个DN作为DN2,再DN2的机架随机选择一个DN3。

6.4NN和2NN的工作流程

NN中存储集群数据的元数据:

  1. 保存在磁盘中:优点是数据安全,不易丢失;缺点是读写速度慢,效率低。
  2. 保存在内存中:优点是读写速度快,效率高;缺点是断电内存信息就会消失,数据不安全
  3. 因此:元数据信息保存在NN的内存和磁盘中
内存中和磁盘中都存储着集群数据的元数据,磁盘中的不允许随即修改,内存中的元数据支持随即修改,因此修改的是内存中的元数据信息

NN中元数据管理:

NN中存有两份存储元数据文件,fsimage存放真实的元数据,存放在磁盘中保存。edits_inprocess是在内存中记录编辑元数据操作的日志文件。当满足一定条件时,2NN会通知NN进行元数据合并,NN会生成一份新的edits_inprocess追加编辑日志,2NN合并完成后会将新的fismage文件上传到NN保存,并将之前的fsimage作为历史备份保存,2NN也会保留一份fsimage作为备份。

合并元数据:

  1. 启动集群时,NN会将最大编号的fsimage文件和edits_inprocess文件进行合并作为最新的元数据文件保存,并在内存中生成一份新的edits_process文件追加元数据操作记录。
  2. 2NN会每隔1分钟向NN发送CheckPoint请求,检查edits_inprocess文件中的操作记录是否达到100万条。如果记录达到要求,2NN会通知NN进行元数据合并。
  3. 合并文件时,NN会停止向正在使用的edits文件中追加记录,并产生一个新的edits文件作为日志追加操作记录。2NN将NN中的fsimage和edits文件拷贝到2NN本地内存并完成合并。
  4. 合并之后2NN会将新的元数据文件fsimage.chkpoint发送给NN。NN会将文件改名后保存作为最新的元数据记录,之前的元数据作为历史记录保存。2NN在上传的同时会保存一份文件作为备份。
  5. 如果NN中edits的编辑日志一直没有达到100万条,则2NN会自集群启动开始每隔一小时完成一次上述的合并操作。

7. DN的工作机制

  1. DN首次启动后会向NN注册信息。成功后会每隔6个小时向NN汇报一次DN的所有数据信息。
  2. DN工作时每3秒向NN发送一次心跳,从NN处返回的心跳信号包括NN向DN下达的指令。
  3. 如果DN掉线,并且心跳信号超过10分钟 + 30秒,则NN会将此DN判定为死亡状态,不可用的节点。

DN保证数据完整性

  1. 当DN读取到Block数据块信息时,每隔10分钟计算该Block的校验和CheckSum。
  2. 如果CheckSum跟创建Block时的校验和不一致则判定当前数据块损坏。
  3. 损坏数据的DN会找到最近的保存文件副本的DN,并完成Block更新。

8.新节点的服役、退役

服役

当需要扩展新的存储节点时,只需要将新的服务器设置好目标集群的配置,并更该主机名、IP信息。之后启动DataNode和NodeManager就完成了新节点的扩展。

#单点启动命令
    hdfs --daemon start datanode        启动datanode
    yarn --daemon start nodemanager        启动nodemanager

退役

当一台服务器需要移出集群,但是服务器的数据需要保留备份时,需要退役服务器。

使用

黑名单、白名单

的机制管理集群服务器。

在NN的节点服务器的**/opt/module/hadoop-3.1.3/etc/hadoop**目录下创建黑名单和白名单文件。

白名单的服务器就是正常运行的服务器。

黑名单中的服务器会在完成数据迁移后退出集群。

创建好黑白名单后,需要向hdfs-site.xml中追加配置信息。并将配置文件和黑白名单文件分发到所有集群服务器。

<!-- 白名单 --><property><name>dfs.hosts</name><value>/opt/module/hadoop-3.1.3/etc/hadoop/whitelist</value></property><!-- 黑名单 --><property><name>dfs.hosts.exclude</name><value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value></property>

服务器完成退役后,不需要重启集群,只需要刷新集群就可以。

    hdfs dfsadmin -refreshNodes        刷新hdfs节点信息
    yarn rmadmin -refreshNodes        刷新yarn节点信息
标签: hdfs hadoop 学习

本文转载自: https://blog.csdn.net/weixin_51631347/article/details/126289984
版权归原作者 不太会 ๑ 所有, 如有侵权,请联系我们删除。

“HDFS-学习日记”的评论:

还没有评论