HDFS初认识

HDFS初认识


文章目录

  • HDFS初认识
    • HDFS是什么?
    • HDFS的假想和设计目标
    • HDFS的优缺点
      • 优点
      • 缺点
    • HDFS的架构组成
      • 客户端
      • NameNode
      • DataNode
      • Secondary NameNode
        • 职责
        • checkpoint机制
    • 参考


HDFS是什么?

Hadoop分布式文件系统(HDFS)是一个分布式文件系统,HDFS与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的差异是很大的。

  • HDFS全称为Hadoop Distribute File System

  • HDFS解决了海量数据无法单台机器存储的问题,将海量的数据存储在不同的机器中,有HDFS文件系统统一管理和维护, 提供统一的访问目录和API 。

HDFS的假想和设计目标

  • 硬件故障

硬件故障是常态而非例外。一个HDFS实例可能由数百或数千台服务器机器组成,每台机器都存储着文件系统的部分数据。事实上,有大量的组件,而且每个组件都有一个非微不足道的故障概率,这意味着HDFS的某些组件总是不能正常工作。因此,检测故障和快速自动恢复故障是HDFS的一个核心架构目标。

  • 流式数据访问

  • 大数据集
    在HDFS上运行的应用程序有大量的数据集。

  • 简单的一致性模型

  • 移动计算比移动数据更便宜

如果应用程序要求的计算是在它所操作的数据附近执行的,那么它的效率会高很多。当数据集的大小很庞大时,这一点尤其正确。这可以最大限度地减少网络拥堵,增加系统的整体吞吐量。其假设是,将计算迁移到离数据所在地更近的地方,而不是将数据迁移到应用程序运行的地方,这样做往往更好。HDFS为应用程序提供了接口,使其更接近数据所在的位置。

  • 在不同的硬件和软件平台上的可移植性

  • 名称节点和数据节点

HDFS的优缺点

优点

  • HDFS具有高容错性,安全性,并被设计成可以部署在低成本的硬件上。

数据存储在不同的机器中,并且每个数据块默认存储3个副本(存储在不同的机器中),当集群中的某个数据块的副本由于某种原因(宕机,磁盘损坏等)丢失以后,HDFS会自动恢复!

  • 扩展性

HDFS的存储能力可以通过添加机器来扩容,并且极易横向扩容,整个集群中所有机器的存储能力就是HDFS的存储能力

  • 可以存储海量数据

单个很大的文件可以存储在HDFS中,也可以存储百万个以上的文件数据量。

  • HDFS提供了对应用数据的高吞吐量访问,适用于拥有大型数据集的应用。

  • HDFS放宽了一些POSIX要求,以实现对文件系统数据的流式访问

缺点

  • 不适合低延迟的数据访问 , 比如毫秒级的数据访问和数据存储

数据底层存储在不同的机器中,并且大文件会被切块存储在不同的机器中,读取数据极可能需要RPC远程网络请求获取数据,所以数据的访问时间比较长

  • 不适合存储大量的小文件数据

    • 每个数据文件在NameNode中记录元数据信息,存储大量小文件增加NameNode的压力,占用NameNode的内存,影响集群的整体存储能力,这样往往是不可取的。

    • 大量小文件的寻址时间会超过读取时间(读取时间/寻址时间=100/1),这也违背了HDFS起初的设计目标。

  • 不支持并发写随机修改

    • 一个文件仅支持单个线程写,不支持多个线程写

    • 仅支持数据的append(追加)操作,不支持数据的随机写

注意:HDFS文件系统适合一次写入多次读取的数据操作;主要用于存储数据。

HDFS的架构组成

Hadoop官网的HDFS架构图如下所示:

HDFS初认识_第1张图片

HDFS采用的是主从结构模式 , 主节点[MASTER]NameNode ➕ 从节点[SLAVES] DataNode,HDFS组成架构还包括SecondaryNameNode 客户端,接下来逐个介绍!

客户端

  • HDFS提供了两种客户端操作 Shell命令JAVA接口 都可以和HDFS系统交互!

  • 用户可以通过一些命令来访问HDFS,进行文件的上传,下载,读取,以及追加数据内容,删除,移动等操作

  • 文件切分。文件上传HDFS的时候,Cliet将文件切分成一个一个的Block,然后进行上传;

  • 与NameNode交互,获取文件的位置信息

  • 与DataNode交互,读取或者写入数据

  • Client提供一些命令来管理HDFS。比如NameNode格式化

NameNode

NameNode就是Master节点,是一个主管、管理者。

  • 用于记录文件存储的元数据对象(NameNode将这些数据的元数据信息记录在内存中,并且将这些元数据信息定期的序列化到本地磁盘上),记录用户操作的行为日志、记录用户存储的文件的大小、切分的块数、每一块的副本数和存储在DataNode上的位置

  • 处理客户端的读写请求,给DataNode分配存储任务 , 或者是给客户端请求数据的元信息

  • NameNode可以认为是HDFS的老大 , 维护集群中的节点的数量,接收DataNode的注册, 维护了一个统一的集群版本

  • 维护集群中数据的负载均衡副本个数

  • 接收DataNode的心跳汇报

  • 接收DataNode的数据的汇报 , 更新节点映射(元数据)

DataNode

DataNode节点是HDFS系统正在查处用户数据的节点,即Slave节点。NameNode下达命令,DataNode执行命令实际的操作

  • 存储实际的数据块,将数据以物理切块的形式存储在本地指定的磁盘目录中

  • 处理客户端的请求

  • 接收NameNode分配的任务

  • 接收NameNode的指令完成容错工作,副本的复制与移动

  • 定期地向NameNode心跳响应请求,默认每间隔3s一次

  • 汇报自己存储的数据数据,默认间隔时间为1小时

  • 执行数据块的读/写操作

Secondary NameNode

并不是NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。

2NN是帮助NameNode管理元数据,具体内容涉及到 chekpoint机制

职责

  • 辅助NameNode,分担NameNode工作量,比如定期合并Fsimage和Eidts,并推送给NameNode;
  • 在紧急情况下,可辅助恢复NameNode。

checkpoint机制

引入Secondary NameNode 用来对存储数据的元数据处理 (checkpoint机制) , 大致如下:

  • 下载 NameNode 的 Fsimage_000000文件(初始化文件,只下载一次),

  • 下载生成好的日志文件,没有_inprocess的日志文件

  • 加载镜像文件生成内存对象

  • 加载日志文件,修改镜像对象

  • 序列化镜像对象

  • 将镜像对象上传到 NameNode 中

  • 清理 NameNode 上没用的日志数据和序列化的镜像文件

  • 定期下载日志文件, 合并镜像对象,并上传到 NameNode 上

参考

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

全文结束!

你可能感兴趣的:(大数据技术栈文档,Hadoop,hdfs,hadoop,大数据)