【大数据】HDFS 理解(图文)

 基础架构(HDFS:Hadoop Distributed File System)

 

1:NameNode(名称节点):NameNode 是HDFS的主要组件之一,负责管理文件系统的命名空间和元数据(记录了文件和数据块的映射关系,以及数据块在数据节点的位置信息)。

2:DataNode(数据节点):DataNode 是存储实际数据块的节点,它负责存储和管理文件的数据块。

3:Secondary NameNode(辅助名称节点):负责定期合并并压缩 NameNode 的编辑日志,以减少 NameNode 运行期间的压力。它还定期从 NameNode 备份元数据,以防止元数据丢失。

 

 储存原理

 

1.数据切片 :HDFS将大文件切分成多个固定大小的数据块(默认大小为128MB),每个数据块通常会被复制到多个数据节点上,以提高数据的可靠性和容错性。

2.数据复制 :HDFS将每个数据块的多个副本分布在不同的数据节点上,这些副本通常包括一个主副本和多个备份副本。主副本存储在一个数据节点上,而备份副本存储在其他数据节点上,以实现数据的冗余和容错。副本的数量可以通过配置进行调整。

3.元数据存储:HDFS使用一个单独的服务器称为NameNode来管理整个文件系统的元数据。元数据包括文件和目录的层次结构、文件的属性信息、数据块的位置信息等。NameNode将元数据存储在内存中,并定期将其持久化到本地磁盘上。

4.数据节点存储:数据节点是HDFS存储集群中的实际存储服务器,负责存储数据块的副本。每个数据节点上都有一个本地文件系统用于存储数据块。数据节点通过与NameNode的通信来获取元数据信息,并根据元数据信息来执行读取和写入数据的操作。

5.数据访问:HDFS支持高吞吐量的数据访问模式,适合用于大规模数据的批量读写操作。HDFS通过移动计算而不是数据来实现数据的本地化,即将计算任务分配给存储数据块的数据节点进行处理,以减少数据移动的开销。

6.总结:HDFS采用了数据分布和冗余的策略,将大文件切分成多个数据块并进行多副本存储,通过NameNode来管理元数据,数据节点存储实际的数据块,并通过移动计算的方式实现高性能的数据访问。这些原理使得HDFS能够适应大规模数据的存储和处理需求,并提供高可靠性和容错性。

 

权限控制

 

1:用户和组:HDFS使用Unix样式的用户和组来管理访问权限。每个文件和目录都有一个所有者和一个所属组,可以分别设置权限。

2:权限模式:HDFS使用三种权限模式来控制对文件和目录的访问:读取(r)、写入(w)和执行(x)。权限可被设置为所有者、所属组和其他用户。

3:访问控制列表(ACL):HDFS还支持访问控制列表(ACL),允许对文件和目录的权限进行更详细的控制。ACL可以为特定用户或组设置特定的权限。

4:超级用户:HDFS有一个超级用户(类似于Unix的root用户),拥有对所有文件和目录的完全访问权限。哪个用户登录就是哪个,hadoop这个用户。

5:NameNode权限:HDFS的权限控制是由NameNode负责的,NameNode存储了文件系统的元数据和权限信息。

 

NameNode元数据管理维护(NameNode基于edits和FSImage的配合,完成整个文件系统文件的管理)

 

1:每次对HDFS的操作,均被edits文件记录

2:edits达到大小上线后,开启新的edits记录

3:定期进行edits的合并操作:

3-1:如当前没有fsimage文件,将全部edits合并为第一个fsimage

3-2:如当前已存在fsimage文件,将全部edits和已存在的fsimage进行合并,形成新的fsimage

 

 

读写流程

 

数据写入流程:

      1:客户端向NameNode发起请求

      2:NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址

      3:客户端向就近的一个DataNode发送数据包

      4:被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其它DataNode

      5:DataNode1复制给DataNode2,然后基于DataNode2复制给Datanode3和DataNode4

      6:写入完成客户端通知NameNode,NameNode做元数据记录工作,并向客户端响应

      注意:

        1:NameNode不负责数据写入,只负责元数据记录和权限审批

        2:客户端直接向1台DataNode写数据,这个DataNode一般是离客户端最近(网络距离)的那一个

        3:数据块副本的复制工作,由DataNode之间自行完成(构建一个PipLine,按顺序复制分发)

 

数据读取流程:

      1:客户端向NameNode申请读取某文件

      2:NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表

      3:客户端拿到block列表后自行寻找DataNode读取即可

      注意:

        1:数据同样不通过NameNode提供

        2:NameNode提供的block列表,会基于网络距离计算尽量提供离客户端最近的,这是因为1个block有3份,会尽量找离客户端最近的那一份让其读取

 

 基本命令

  1. 查看HDFS文件系统:hadoop fs -ls <路径>
  2. 创建目录:hadoop fs -mkdir <目录路径>
  3. 复制本地文件到HDFS:hadoop fs -put <本地文件路径> <HDFS目标路径>
  4. 从HDFS复制文件到本地:hadoop fs -get <HDFS文件路径> <本地目标路径>
  5. 删除文件或目录:hadoop fs -rm <HDFS文件路径> 或 hadoop fs -rm -r <HDFS目录路径>
  6. 移动文件或目录:hadoop fs -mv <源路径> <目标路径>
  7. 查看文件内容:hadoop fs -cat <文件路径>
  8. 查看文件块信息:hadoop fsck <文件路径>
  9. 设置文件副本数:hadoop fs -setrep -w <副本数> <文件路径>
  10. 查看集群使用情况:hadoop dfsadmin -report
posted @ 2023-10-06 10:53  PythonNew_Mr.Wang  Views(236)  Comments(0)    收藏  举报