当前位置:   article > 正文

HDFS架构

HDFS架构
  • HDFS 是一个主从 Master/Slave 架构
  • 一个 HDFS 集群包含一个 NameNode,这是一个 Master Server,用来管理文件系统的命名空间,以及协调客户端对文件的访问
  • 一个 HDFS 集群包含多个 DataNode,用来存储数据
  • HDFS 会对外暴露一个文件系统命名空间,并允许用户数据以文件的形式进行存储
  • 在内部,一个文件被分成多个块并且这些块被存储在一组 DataNode 上
    在这里插入图片描述

NameNode

  • 文件的元数据采用集中式存储方案存放在 NameNode 当中
  • NameNode 负责执行文件系统命名空间的操作,如打开、关闭、重命名文件和目录
  • NameNode 同时也负责将数据块映射到对应的 DataNode 中

DataNode

  • DataNode 是文件系统的工作结点
  • DataNode 根据需要存储并检索数据块,并且定期向 NameNode 发送他们所存储的块的列表
  • 文件数据块本身存储在不同的 DataNode 当中,DataNode 可以分布在不同机架上
  • DataNode 负责服务文件系统客户端发出的读/写请求
  • DataNode 同时也负责接收 NameNode 的指令来进行数据块的创建、删除和复制
    Client
  • HDFS 的 Client 会分别访问 NameNode 和 DataNode 以获取文件的元数据信息及真实数据内容
  • HDFS 集群的 Client 将直接访问 NameNode 和 DataNode,相关数据会直接从 NameNode 或者 DataNode 传送到客户端;
    NameNode 和 DataNode 都是被设计为在普通 PC 上运行的软件程序
  • HDFS 是用 Java 语言实现的,任何支持 Java 语言的机器都可以运行 NameNode 或者 DataNode
  • Java 语言本身的可移植性意味着 HDFS 可以被广泛地部署在不同的机器上
  • 一个典型的部署就是,集群中的一台专用机器运行 NameNode,集群中的其他机器每台运行一个 DataNode 实例
  • 该架构并不排除在同一台机器上运行多个 DataNode 实例的可能,但在实际的部署中很少会这么做;
    单一 NameNode 的设计极大地简化了集群的系统架构,它使得所有 HDFS 元数据的仲裁和存储都由单一 NameNode 来决定,避免了数据不一致性的问题

HDFS 数据复制

HDFS 可以跨机架、跨机器,可靠地存储海量文件。
HDFS 把每个文件存储为一系列的数据块,除了最后一个数据块以外,一个文件的所有数据块都是相同大小的。
HDFS 为了容错,一个文件的数据块会被复制。对于每个文件来说,文件块大小和复制因子都是可配置的。应用程序可以声明一个文件的副本数。复制因子可以在文件创建时声明,并且可以在以后修改。
通用场景下,当复制因子是 3 时,HDFS 的放置策略:

  • 副本1放在本地机架的某个结点上
  • 副本2放在本地机架的不同结点上
  • 副本3放在不同机架的不同结点上

上述策略的优点:

  1. 该策略并不影响数据可靠性和可用性,因为机架不可用的概率要比结点不可用的概率低很多.
  2. 该策略与把3个副本放在3个不同机架上的策略相比,减少了机架之间的写操作,从而提升了写性能.
  3. 该策略减少了读取数据时的聚合网络带宽,毕竟一个数据块是放置在2个不同的机架上,而不是 3 个.

上述策略的缺点:
该策略没有均匀地分布副本,三分之二的副本在一个机架上,另三分之一的副本分布在其他机架上.

NameNode和DataNode的关系

  • NameNode 控制所有的数据块的复制决策,如下图所示:
    在这里插入图片描述它周期性地从集群的 DataNode 中收集心跳和数据块报告:
    收集到心跳意味着 DataNode 正在正常提供服务
    收集到的数据块报告会包含相应 DataNode 上的所有数据块列表

  • DataNode主动发送心跳:
    当一切运行正常时,DataNode 会周期性发送心跳信息给 NameNode(默认是每 3 秒钟一次).

  • NameNode主动监测心跳:
    如果 NameNode 在约定的时间内没有收到心跳信息(默认是 10 分钟);
    会认为 DataNode 出现了问题,就会把该 DataNode 从集群中移除,并且启动一个进程去恢复数据.

  • DataNode节点挂掉的影响:
    DataNode 脱离集群的原因有多种:如硬件故障、主板故障、电源老化和网络故障等.

  1. 对于 HDFS 来说,丢失一个 DataNode 意味着丢失了存储在它的硬盘上的数据块的副本.
  2. 假如在任意时间总有超过一个副本存在,故障将不会导致数据丢失;
    当一个硬盘故障时,HDFS 会检测到存储在该硬盘上的数据块的副本数量低于要求,然后主动创建需要的副本,以达到满副本数状态.

机架感知

机架感知的概念:
告诉Hadoop,集群中哪台机器属于哪个机架
机架感知的目的:

  1. 作业计算本地化
  2. 正确执行副本放置策略
    机架感知的配置:
    默认情况下,Hadoop机架感知是没有启用的,需要在NameNode机器的core-site.xml里配置一个选项:
<property>  
    <name>topology.script.file.name</name>
    <value>/path/to/script脚本</value>
</property>
  • 1
  • 2
  • 3
  • 4

这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值。
接受参数—datanode机器的ip地址.
输出的值—该ip地址对应的datanode所在的rackID,例如"/rack1".
NameNode启动时,会判断该配置选项是否为空–如果非空,则表示已经启用机架感知的配置:
此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的心跳时,
将该datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/545623
推荐阅读
相关标签
  

闽ICP备14008679号