2020-10-26

HDFS原理

HDFS是Hadoop分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。
易于扩展的分布式文件系统
运行在大量普通廉价机器上提供容错机制
为大量用户提供性能不错的存取服务

HDFS的假设前提和设计目标

1.硬件错误

硬件组件错误是常态,而非异常情况。HDFS可能由成百上千的服务器组成,每一个服务器都是廉价通用的普通硬件,任何一个组件都有可能一直失效,因此错误检测和快速、自动恢复是HDFS的核心架构目标,同时能够通过自身持续的状态监控快速检测冗余并回复失效的组件。

2.大规模数据集

运行在HDFS上的应用具有很大的数据集。HDFS上的一个典型文件,大小一般都在GB至TB。因此,需要调节HDFS以支持大文件存储。HDFS应该能提供整体较高的数据传输带宽,能在一个集群里扩展到数百个节点。一个单一的HDFS实例应该能支撑千万计的文件。

3.简单的一致性规模

HDFS应用需要一个“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变了。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。MapReduce应用或网络爬虫应用都非常适合这个模型。目前还有计划在将来扩充这个模型,使之支持文件的附加写操作。

4.移动计算比移动数据更划算

一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在之处显然更好,HDFS提供给应用这样的接口。

5.异构软硬件平台间的可移植性

HDFS在设计时就考虑到平台的可移植性,这种特性方便了HDFS作为大规模数据应用平台的推广。

HDFS的基本组件

(1).namenode:管理整个文件系统的元数据
namenode工作职责:管理元数据、维护目录结构、响应客户端请求
(2).datanode:复制管理用户的文件数据块
datanode的工作职责:管理用户提交的数据 心跳机制 块报告
(3).secondarynamenode:namenode的助理,帮助加载元数据,紧急情况下(例如namenode宕机),可以帮助恢复数据。

HDFS数据复制

背景知识:

1、HDFS采用多副本方式对数据进行冗余存储,即一个数块的多个副本分布到不同的数据节点上。

2、集群内部发起写操作请求,把第一个副本放置在发起写操作请求的数据节点上,实现就近写入数据。 如果来自集群外部写操作请求,命名空间从集群中挑选一台磁盘不太满、CPU不太忙的数据节点,作为第一个副本存放地

数据复制技术:

1、当客户端要往HDFS中写入一个文件时,该文件首先写入本地,并切分成若干文件块,每个文件块的大小由HDFS的设定值来决定。

2、每个数据块向名称节点发起写请求,名称节点会根据集群中数据节点的使用情况,选择一个数据节点列表返回给客户端。

3、第一个数据节点接受到4KB数据的时候,写入本地,并且向列表中的第二个数据节点发起连接请求,把自己已经接收到的数据和列表传送给第二个数据节点;

4、第二个数据节点接受到数据,写入本地,并且向列表中的第三个数据节点发起连接请求,以此类推,列表中的多个数据节点形成一条数据复制的流水线。

5、列表中最后一个数据节点写完,会沿着列表逆序发送数据写完毕信号。

HDFS 健壮性

HDFS 的主要目标就是即使在出错的情况下也要保证数据存储的可靠性。 常见的三种出错情况是: Namenode 出错 , Datanode 出错和网络割裂 ( network partitions) 。

1. 磁盘数据错误,心跳检测和重新复制

每个 Datanode 节点周期性地向 Namenode 发送心跳信号。网络割裂可能 导致一部分 Datanode 跟 Namenode 失去联系。 Namenode 通过心跳信号的缺 失来检测这一情况,并将这些近期不再发送心跳信号 Datanode 标记为宕机 ,不会再将新的 IO 请求发给它们。任何存储在宕机 Datanode 上的数据将不 再有效。 Datanode 的宕机可能会引起一些数据块的副本系数低于指定值, Namenode 不断地检测这些需要复制的数据块,一旦发现就启动复制操作。 在下列情况下,可能需要重新复制:某个 Datanode 节点失效,某个副本遭 到损坏, Datanode 上的硬盘错误,或者文件的副本系数增大。

2. 数据完整性

从某个 Datanode 获取的数据块有可能是损坏的,损坏可能是由 Datanode 的存储设备错误、网络错误或者软件 bug 造成的。 HDFS 客户端软 件实现了对 HDFS 文件内容的校验和 (checksum) 检查。当客户端创建一个新 的 HDFS 文件,会计算这个文件每个数据块的校验和,并将校验和作为一个 单独的隐藏文件保存在同一个 HDFS 名字空间下。当客户端获取文件内容后 ,它会检验从 Datanode 获取的数据跟相应的校验和文件中的校验和是否匹 配,如果不匹配,客户端可以选择从其他 Datanode 获取该数据块的副本。

3 . 元数据磁盘错误

FsImage 和 Editlog 是 HDFS 的核心数据结构。如果这些文件损坏了,整个 HDFS 实例都将失效。因而, Namenode 可以配置成支持维护多个 FsImage 和 Editlog 的副本。任何对 FsImage 或者 Editlog 的修改,都将同步到它们的副 本上。这种多副本的同步操作可能会降低 Namenode 每秒处理的名字空间事 务数量。然而这个代价是可以接受的,因为即使 HDFS 的应用是数据密集的 ,它们也非元数据密集的。当 Namenode 重启的时候,它会选取最近的完整 的 FsImage 和 Editlog 来使用。
Namenode 是 HDFS 集群中的单点故障 (single point of failure) 所在。如果 Namenode 机器故障,是需要手工干预的。目前,自动重启或在另一台机器 上做 Namenode 故障转移的功能还没实现。

4.快照

快照支持某一特定时刻的数据的复制备份。利用快照,可以让 HDFS 在 数据损坏时恢复到过去一个已知正确的时间点。 HDFS 目前还不支持快照功 能,但计划在将来的版本进行支持。

HDFS数据组织

1.数据块的存储

HDFS最适合的应用场景是处理大数据集合,同时这些应用多是一次写入多次读取,并且读的速度要满足流式读取得需要。

2.流水线式的复制

当某个客户端向HDFS文件写数据的时候,一开始是写入本地的临时文件,假设该文件的replication因子为3,那么客户端会从NameNode获取一张DataNode列表来存放副本。然后客户端开始向第一个DataNode传输数据,第一个DataNode会一小部分一小部分(4KB)地接收数据,将每个部分写入本地仓库,同时传输该部分到第二个DataNode。第二个DataNode也是这样,边收边传,一小部分一小部分地接收,将每个部分存储在本地仓库,同时传给第三个DataNode。第三个DataNode仅仅接收并存储。这就是流水线式的复制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值