HDFS分布式文件系统基础理论指南!

前言

一:必备理论基础

1.1:什么是HDFS?有什么作用?

  • HDFS(Hadoop Distributed File System),是Hadoop的核心子项目,是一个分布式文件系统,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用

1.2:HDFS的适用与不适应的场景

  • 1、高容错性、可构建在廉价机器上
  • 2、适合批处理
  • 3、适合大数据处理
  • 4、流式文件访问
  • 5,、可移植性
  • 还有以下不适合的场景
  • 1、不支持低延迟访问
  • 2、不适合小文件存储
  • 3、不支持并发写入
  • 4、不支持修改

1.3:HDFS架构图

  • mark

  • HDFS是一个主/从(Mater/Slave)体系结构,HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据

  • 数据块

    • HDFS旨在支持非常大的文件。HDFS使用的典型块大小为64 MB。因此,HDFS文件被切成64 MB的块
  • **Client:**HDFS客户端

    • 1、提供一些命令来管理、访问 HDFS,比如启动或者关闭HDFS。
    • 2、与 DataNode 交互,读取或者写入数据;读取时,要与 NameNode 交互,获取文件的位置信息;写入 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
  • **NameNode:**即Master

    • NameNode执行文件系统名称空间操作,例如打开,关闭和重命名文件和目录。
    • 它还确定块到DataNode的映射
    • 配置副本策略
    • 处理客户端读写请求
  • **DataNode:**就是Slave

    • 存储实际的数据块

    • 数据节点负责处理来自文件系统客户端的读写请求

1.4:HDFS读写数据工作机制

1.4.1:HDFS读取数据过程
  • mark
  • 1、HDFS客户端打开要读取的文件
  • 2、文件系统通过RPC调用namenode获取数据块的几个起始位置
  • 3、客户端通过反馈的信息,调用read方法
  • 4、客户端通过read方法向最近的数据块起始位置读取信息,使得数据节点将数据传回客户端
  • 5、客户端读到数据块的末端的时候,关闭与当前数据块的连接,继续读取下一个数据块
  • 6、所有的数据库都读完了,客户端会关闭连接
1.4.2:HDFS写入数据过程
  • mark
  • 1、客户端调用create()函数新建文件
  • 2、文件系统通过RPC在namenode中创建文件
  • 3、创建完成后,客户端向namenode返回的FSDataOutputStream对象中开始写入数据
  • 4、FSDataOutputStream对象将写入的数据分成一个一个的数据包,并通过内部数据队列将他们发送到相应的合适的DataNode中
  • 5、当数据列队中的DataNode都表示收到数据包后,会将数据包从管道中删除
  • 6、客户端写入关闭,关闭连接
  • 7、namenode确认完成,写入成功

1.5:HDFS副本存放策略

  • 需要对可靠性,写入带宽和读取带宽进行权衡,一般情况下副本系数为3
  • mark
  • 将第一个副本放在本地节点,将第二个副本放在本地机架上的另一个节点,而第三个副本放到不同机架上的节点。
  • 此策略减少了机架间的写流量,通常可以提高写性能。机架故障的机会远小于节点故障的机会。此策略不会影响数据的可靠性和可用性保证。但是,由于一个块仅放置在两个唯一的机架中,而不是三个,因此它确实减少了读取数据时使用的总网络带宽。使用此策略,文件的副本不会均匀分布在机架上。三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,其余三分之一则平均分布在其余机架上。此策略可提高写入性能,而不会影响数据可靠性或读取性能。

1.6:HDFS的可靠性

  • 数据磁盘故障,心跳和恢复
    • 每个DataNode定期向NameNode发送心跳消息。
    • 网络分区可能导致DataNode的子集失去与NameNode的连接。NameNode通过缺少心跳消息来检测到这种情况。
    • NameNode将没有最近心跳的DataNode标记为已死,并且不转发任何新IO向他们提出要求。已注册到失效DataNode的任何数据都不再可用于HDFS。DataNode死亡可能导致某些块的复制因子降至其指定值以下。
    • NameNode不断跟踪需要复制的块,并在必要时启动复制:DataNode可能不可用,副本可能损坏,DataNode上的硬盘可能发生故障或文件的复制因子增加。
  • 数据的完整性–校验和
    • 从DataNode提取的数据块可能会损坏。HDFS客户端软件对HDFS文件的内容执行校验和检查。
    • 客户端创建HDFS文件时,它将计算文件每个块的校验和,并将这些校验和存储在同一HDFS命名空间中的单独的隐藏文件中。
    • 客户端检索文件内容时,它将验证从每个DataNode接收的数据是否与存储在关联的校验和文件中的校验和匹配。如果不是,则客户端可以选择从另一个具有该块副本的DataNode中检索该块。

1.7:文件的删除

  • 用户或应用程序删除文件后,不会立即将其从HDFS中删除。相反,HDFS首先将其重命名为/ trash目录中的文件。只要文件保留在/ trash中,就可以快速恢复该文件。
  • 文件在/ trash中保留可配置的时间。当前的默认策略是从/ trash中删除超过6小时的文件,在/ trash中到期后,NameNode将从HDFS命名空间中删除该文件。文件的删除导致与文件关联的块被释放。
  • 只要文件保留在/ trash目录中,用户就可以在删除文件后取消删除该文件。
    trash中到期后,NameNode将从HDFS命名空间中删除该文件。文件的删除导致与文件关联的块被释放。
原创文章 172 获赞 97 访问量 5万+

猜你喜欢

转载自blog.csdn.net/CN_TangZheng/article/details/105124477