前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop分布式文件系统HDFS

Hadoop分布式文件系统HDFS

原创
作者头像
一身黑Lil
修改2024-05-10 20:12:26
1340
修改2024-05-10 20:12:26
举报
文章被收录于专栏:HDFSHDFS

HDFS中的角色

HDFS中主要有四个角色:

  1. NameNode(管理NameSpace):NameNode是Hadoop分布式文件系统的核心,架构中的主角色。它是访问HDFS的唯一入口,仅存储HDFS的元数据,包括文件系统中所有文件的目录树,并跟踪整个集群中的文件,但不存储实际数据。

NameNode不一定只有一个,在高可用配置中NameNode至少会有两个,下面会讲。

  1. DataNode:DataNode是Hadoop HDFS中的从角色,负责具体的数据块存储。DataNode的数量决定了HDFS集群的整体数据存储能力。它通过和NameNode配合维护着数据块。
  2. Secondary NameNode:Secondary NameNode充当NameNode的辅助节点,但不能替代NameNode。它主要是帮助主角色进行元数据文件的合并动作,可以通俗的理解为“秘书”。
  3. Client:Client(客户端)是用户与HDFS进行交互的主要接口,它负责文件的上传、下载、读取、写入等操作,以及与NameNode和DataNode进行通信以获取文件的位置信息和执行数据的读写操作。

基本常识

数据和元数据

在HDFS中,数据和元数据是两种不同的概念,它们有着明显的区别。

数据

  • 数据是HDFS中存储的实际内容,它是用户需要处理和操作的对象。在HDFS中,数据被切分成多个Block(数据块)进行存储,这些Block是HDFS文件存储的最小单位。

元数据

  • 元数据是描述数据的数据,它保存了文件的属性、长度、存储位置、类型等信息。在HDFS中,元数据主要指的是文件相关的元数据,通过NameNode进行管理维护。
  • 从广义的角度来说,因为NameNode还需要管理众多的DataNode结点,因此DataNode的位置和健康状态信息也属于元数据。

单位存储Block

Block是HDFS中文件存储的基本单位。

  • HDFS中的文件会被分割成固定大小的数据块进行存储,这些数据块是HDFS存储和管理数据的基本单元。HDFS的默认数据块大小为128MB,但可以根据实际需求进行配置。

另外还有两个单位chunk和packet

  • 客户端的数据以字节(byte)流的形式写入chunk(以chunk为单位计算checksum(校验和))。若干个chunk组成packet,数据以packet的形式从客户端发送到第一个Datanode,再由第一个Datanode发送数据到第二个Datanode并完成本地写入,以此类推,直到最后一个Datanode写入本地成功,可以从缓存中移除数据包(packet)

可以这样理解,我们向DataNode写数据时,不是一下把128M的数据写到DataNode当中,这不现实。是缓慢的写入到DataNode。先在客户端本地以字节(byte)流的形式写入chunk,由若干个chunk组成packet,此时客户端会把数据(以packet的形式)发送给DataNode,而有若干个packet组成Block,这意味着写一次Block的过程中,客户端会有多次向DataNode写的过程。

副本机制

HDFS的副本机制是其保证数据可靠性和可用性的重要方式

为了保证数据的可靠性和容错性,HDFS会为每个数据块创建多个副本(默认为3个),并将这些副本分布到不同的DataNode上。当某个DataNode出现故障时,可以从其他DataNode上获取数据块的副本,从而确保数据的可靠性。

基本结构

NameNode和Secondary NameNode作为节点也是要搭建在机架上的,会和一些DataNode搭建在同一个机架上。

一个NameNode管理所有的DataNode

一个机架上有多个DataNdoe节点,每个节点中会有多个Block数据块。

Block数据块存储时会在备份两个(总共3个),副本不会在同一和DataNdoe中。

单机和高可用的区别

图中,只画了一个NameNode,表示单机运行,此时如果集群出现故障,整个集群就直接无法使用,还可能造成数据丢失。

在实际搭建(高可用)中至少会有2个NameNode,只有一个NameNode处于active状态,其他的NameNode处于standby状态。

active状态的NameNode负责所有的客户端操作,standby状态的NameNode处于从属地位,维护着数据状态,随时准备切换。

HDFS的写流程

(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,其父目录是否存在。

(2)NameNode返回是否可以上传。

(3)客户端请求上传第一个Block到哪几个DataNode服务器上。

(4)NameNode返回3个DataNode节点地址,分别为dn1、dn2、dn3。

(5)客户端通过FSDataOutputStream模块向dn1请求建立Block传输通道,dn1收到请求会继续调用dn2,然后 dn2调用dn3,直到这个通信管道建立完成。

(6)dn1、dn2、dn3逐级应答客户端。

(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;并且dn1每传一个packet会放入一个应答队列等待应答。

(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行 3-7步)。

HDFS的读流程

(1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据, 找到文件块所在的DataNode地址。

(2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

读完本章你可能会有的其他问题

  1. Name的工作机制是什么。
  2. 元数据存储在哪里。
  3. DataNode的工作机制。
  4. Secondary NameNode的工作机制。
  5. 高可用配置下多个NameNode的意义,以及其工作机制。

等等

这些都是比较重要的常识,有助于你对分布式框架的理解。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HDFS中的角色
  • 基本常识
    • 数据和元数据
      • 单位存储Block
        • 副本机制
        • 基本结构
        • HDFS的写流程
        • HDFS的读流程
        • 读完本章你可能会有的其他问题
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档