hadoop系列(2)---HDFS 设计原理

·  阅读 56

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

Hadoop-NameNode&DataNode.jpg

______ 从上图可以看出客户端是将文件的元数据(metadata)元数据包含块指针(也就是文件的每一个Block副本 (这里的副本不存在主备关系) 存放在NN(NameNode)节点上).

NN(NameNode)会告诉客户端(client)切割的大小与每一块block提交到哪一个DN(DataNode)上.

接下来客户端就会依据NN所提供的的信息,将数据依据对应的大小进行切割,并将块文件上传到依次的DN(DataNode)上

DataNode会在特定时间对块文件进行repalication(复制)到其他的DataNode节点上

所以客户端在进行文件读取的时候都是需要先向NameNode提取元数据,依据对应元数据的信息,再去相应的DataNode进行下载。

所以可以得出HDFS系统的特点如下:

HDFS系统的文件特征

  • 存储极大数目的信息(terabytes or petabytes),将数据保存到大量的节点当中。
  • 支持很大单个文件。
  • 提供数据的高可靠性,单个或者多个节点不工作,对系统不会造成任何影响,数据仍然可用。
  • 提供对这些信息的快速访问,并提供可扩展的方式。
  • 能够通过简单加入更多服务器的方式就能够服务更多的客户端。
  • HDFS是针对MapReduce设计的,使得数据尽可能根据其本地局部性进行访问与计算。

但是对应的也会有对应的缺陷如下:

HDFS的缺陷

  • 低延迟数据访问

    • 比如毫秒级 比如低延迟与高吞吐
  • 小文件存取

    • 占用NameNode大量内存 寻道时间超过读取时间
  • 并发写入/文件随机修改

    • 一个文件只能有一个写者 仅支持append

HDFS 架构

HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成:

  • NameNode :负责执行有关 文件系统命名空间 的操作,例如打开,关闭、重命名文件和目录等。它同时还负责集群元数据的存储,记录着文件中各个数据块的位置信息。

    • 完全基于内存存储文件元数据、目录结构、文件block的映射
    • 需要持久化方案保证数据可靠性
    • 提供副本放置策略
  • DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建,删除等操作。

    • 基于本地磁盘存储block(文件的形式)
    • 并保存block的校验和数据保证block的可靠性
    • 与NameNode保持心跳,汇报block列表状态
  • Block :

    • 文件线性按字节切割成块(block),具有offset,id
    • 文件与文件的block大小可以不一样
    • 一个文件除最后一个block,其他block大小一致
    • block的大小依据硬件的I/O特性调整
    • block被分散存放在集群的节点中,具有location
    • Block具有副本(replication),没有主从概念,副本不能出现在同一个节点
    • 副本是满足可靠性和性能的关键
    • 文件上传可以指定block大小和副本数,上传后只能修改副本数
    • `一次写入多次读取,不支持修改
    • 支持追加数据
分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改