大数据存储技术HDFS

  • 一、概述
  • 1.1 分布式文件系统(DFS)的概念和作用
  • 1.2 HDFS概述
  • 二、HDFS的相关概念
  • 2.1 块
  • 2.2 NameNode
  • 2.3 Secondary NameNode
  • 2.4 DataNode
  • 三、HDFS体系架构与原理
  • 3.1 HDFS体系结构
  • 3.2 HDFS高可用机制


一、概述

1.1 分布式文件系统(DFS)的概念和作用

  • 一台计算机的存储容量有限,分布式文件系统将文件分布存储在网络中的多个计算机节点上的文件系统,设计多台计算机。

1.2 HDFS概述

  • 是Hadoop的核心组件。
  • 运行于通用x86服务器之上

设计理念:

  1. 硬件失效:HDFS被设计成在某个节点发生故障时,可以及时由其他正常的节点继续向用户提供服务。
  2. 流式数据访问:HDFS的上层应用更多用于批量处理,而不是用户的交互式使用,采用流式数据访问提高数据吞吐率。
  3. 超大文件:运行在HDFS的应用程序通常需要处理较大的数据集,典型从GB到TB级别。
  4. 简化的数据一致性模型:HDFS采用一次写入多次读取的数据读写模型,文件一旦写入完成,只支持尾部追加,不允许在他位置上修改。
  5. 多硬件平台支持:HDFS可方便的运行在不用的平台上。
  6. 移动的计算能力比移动的数据更加划算:计算和存储采用就近原则,应用程序在其运行的数据附近执行,不将数据移动到其他节点进行计算。

HDFS不适合的场景:

  • 低延迟的访问需求:适合用HBase
  • 大量的小文件
  • 多用户写入,任意修改文件。

二、HDFS的相关概念

2.1 块

  • 每个磁盘都有固定的数据块大小,数据块是对磁盘进行读写操作的最小单位,一般为512个字节。
  • 在单个磁盘上构建的文件系统也有自己的数据块大小,一般为几千字节为磁盘数据块的整数倍
  • HDFS默认块大小128MB,HDFS上的文件会被分为若干个块进行存储,小于一个块的数据不会占整个块的存储空间。
  • 每个块以冗余副本的形式存储在多个节点上,发生故障时可以防止丢失。

2.2 NameNode

  • 是HDFS集群的管理节点。
  • namenode上有两个重要文件:EditLog和FSImage. EditLog用于记录对文件的操作,FSImage用于维护整个系统的命名空间包括数据块到文件的映射和文件的属性。
  • 启动时不对外提供写服务。

2.3 Secondary NameNode

  • 当运行namenode的服务器发生故障,文件系统上所有文件将会丢失,无法仅根据datanode的块来重建文件Hadoop提供两种机制:
  1. 备份文件系统元数据。
  2. 运行Secondary NameNode,Secondary NameNode不是NameNode的备份,它的作用是定期将EditLog合并到FSImage,以防止EditLog过大。
  • Hadoop2.x开始,HDFS推出了两个新的节点,CheckpointNode和BackupNode。CheckpointNode和Secondary NameNode作用一致,BackupNode是NameNode的完全备份。

2.4 DataNode

  • 是HDFS的数据节点。
  • 根据系统的需要存储并检索数据块。
  • 定期向NameNode发送他们所存储的块列表和心跳信息。

三、HDFS体系架构与原理

3.1 HDFS体系结构

  • Master/Slave架构(NameNode/DataNode)
  • 一个HDFS集群包括一个NameNode和多个DataNode
  • NameNode对DataNode进行调度和响应客户端的请求。
  • DataNode在NameNode的调度下进行数据块的创建、删除和复制,处理客户端的读写请求。

3.2 HDFS高可用机制

  1. NameNode的高可用:当NameNode发生故障无法提供服务时,备用NameNode可以及时地接管他的任务并对客户端提供服务。备用NameNode同时也会合并EditLog到FSImage,创建Checkpoint,不需要运行Secondary NameNode或CheckpointNode和BackupNode。
  2. 故障切换与规避:
  • 共享存储的规避:同一时刻只允许一个NameNode编辑EditLog
  • DataNode的规避:每个NameNode改变状态是会向DataNode发送自己的状态和一个序列号。
  • 客户端的规避:客户端通过配置文件实现故障切换的控制。