大数据_HDFS原理

目录

一、什么是HDFS

二、HDFS架构角色

三、HDFS工作流程

四、HDFS的优缺点


一、什么是HDFS

1、定义

HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。

2、特点

① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存 3 份。

② 运行在廉价的机器上。

③ 适合大数据的处理。多大?多小?HDFS 默认会将文件分割成 block,64M 为 1 个 block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中(namenode)。 如果小文件太多,那内存的负担会很重。

二、HDFS架构角色

个HDFS集群包含一个单独的NameNode和多个DataNode。HDFS采用一种称为rack-aware的策略。Rack1、Rack2....

大数据_HDFS原理_第1张图片

NameNode是 Master 节点,是管理者。管理数据块映射;处理客户端的读写请求;配置副本策略;管理 HDFS 的名称空间;NameNode 保存的 metadata 包括文件 ownership 和 permission文件包含的 block 信息。Block 保存在那些 DataNode 节点上(数据并非保存在 NameNode 磁 盘上的,它是在 DataNode 启动时上报给 NameNode 的,NameNode 接收到之后 将这些信息保存在内存中)NameNode 的 metadata 信息在 NameNode 启动后加载到内存中,Metadata 存储到磁盘上的文件名称为 fsimage,Block 的位置信息不会保存在 fsimage 中,Edits 文件记录了客户端操作 fsimage 的日志,对文件的增删改等。用户对 fsimage 的操作不会直接更新到 fsimage 中去,而是记录在 edits 中。

大数据_HDFS原理_第2张图片

SecondaryNameNode分担 namenode 的工作量;是 NameNode 的冷备份;合并 fsimage 和 fsedits 然后再发给 namenode。

     合并fsimage和fsedits文件,然后发送并替换NameNode的fsimage文件, 同时自己留下一个副本。这个副本可供 NameNode 毁灭之后的部分文件恢复。

  1. 可以通过配置 fs.checkpoint.period 修改合并间隔时间,默认 1 小时
  1. 也可以通过配置 edits 日志文件的大小,fs.checkpoint.size 规定 edits 文 件的最大值,来让 SecondaryNameNode 来知道什么时候该进行合并操作了。 默认是 64M

大数据_HDFS原理_第3张图片

DataNodeSlave 节点,奴隶,干活的。负责存储 client 发来的数据块 block;执行数据 块的读写操作。

热备份:b 是 a 的热备份,如果 a 坏掉。那么 b 马上运行代替 a 的工作。

冷备份:b 是 a 的冷备份,如果 a 坏掉。那么 b 不能马上代替 a 工作。但是 b 上存储 a 的 一些信息,减少 a 坏掉之后的损失。

fsimage:元数据镜像文件(文件系统的目录树。)

edits:元数据的操作日志(针对文件系统做的修改操作记录)

namenode 内存中存储的是=fsimage+edits。

SecondaryNameNode 负责定时默认 1 小时,从 namenode 上,获取 fsimage 和 edits 来 进行合并,然后再发送给 namenode。减少 namenode 的工作量。

大数据_HDFS原理_第4张图片

三、HDFS工作流程

备份数据的存放:备份数据的存放是HDFS可靠性和性能的关键。HDFS采用一种称为rack-aware的策略来决定备份数据的存放。通过一个称为Rack Awareness的过程,NameNode决定每个DataNode所属rack id。缺省情况下,一个block块会有三个备份,一个在NameNode指定的DataNode上,一个在指定DataNode非同一rack的DataNode上,一个在指定DataNode同一rack的DataNode上。这种策略综合考虑了同一rack失效、以及不同rack之间数据复制性能问题。

示例写入流程:

  1. 将 64M 的 block1 按 64k 的 package 划分;
  2. 然后将第一个 package 发送给 host2;
  3. host2 接收完后,将第一个 package 发送给 host1,同时 client 想 host2 发送第 二个 package;
  4. host1 接收完第一个 package 后,发送给 host3,同时接收 host2 发来的第二个 package。
  5. 以此类推,如图红线实线所示,直到将 block1 发送完毕。
  6. host2,host1,host3向NameNode,host2向Client发送通知,说“消息发送完了”。 如图粉红颜色实线所示。
  7. client 收到 host2 发来的消息后,向 namenode 发送消息,说我写完了。这样就 真完成了。如图黄色粗实线
  8. 发送完 block1 后,再向 host7,host8,host4 发送 block2,如图蓝色实线所示。
  9. 发送完 block2 后,host7,host8,host4 向 NameNode,host7 向 Client 发送通 知,如图浅绿色实线所示。
  10. client 向 NameNode 发送消息,说我写完了,如图黄色粗实线。。。这样就完 毕了。

分析,通过写过程,我们可以了解到:

①写 1T 文件,我们需要 3T 的存储,3T 的网络流量带宽。

②在执行读或写的过程中,NameNode 和 DataNode 通过 HeartBeat 进行保存通信, 确定 DataNode 活着。如果发现 DataNode 死掉了,就将死掉的 DataNode 上的数据,放 到其他节点去。读取时,要读其他节点去。

③挂掉一个节点,没关系,还有其他节点可以备份;甚至,挂掉某一个机架,也没关系; 其他机架上,也有备份。

大数据_HDFS原理_第5张图片

大数据_HDFS原理_第6张图片

副本的选择:为了降低整体的带宽消耗和读取延时,HDFS会尽量读取最近的副本。如果在同一个rack上有一个副本,那么就读该副本。如果一个HDFS集群跨越多个数据中心,那么将首先尝试读本地数据中心的副本。安全模式:系统启动后先进入安全模式,此时系统中的内容不允许修改和删除,直到安全模式结束。安全模式主要是为了启动检查各个DataNode上数据块的安全性

示例读流程:

读操作就简单一些了,如图所示,client 要从 datanode 上,读取 FileA。而 FileA 由 block1 和 block2 组成。那么,读操作流程为:

a. client 向 namenode 发送读请求。

b. namenode 查看 Metadata 信息,返回 fileA 的 block 的位置。

block1:host2,host1,host3

block2:host7,host8,host4

c. block 的位置是有先后顺序的,先读 block1,再读 block2。而且 block1 去 host2 上读取; 然后 block2,去 host7 上读取;这个例子中,client 位于机架外,那么如果 client 位于机架内某个 DataNode 上,例如,client 是 host6。那么读取的时候,遵循的规律是:优先读取本机架上的数据。

大数据_HDFS原理_第7张图片

大数据_HDFS原理_第8张图片

四、HDFS的优缺点

1HDFS 优点

高容错性

数据自动保存多个副本

副本丢失后,自动回复

适合批处理

移动的计算和操作

数据位置暴漏给计算框架

适合大数据处理

GB、TB、PB 甚至更大

百万规模以上的文件数量

10K+节点

可构建在廉价的机器上

通过副本提高可靠性

提供了容错和恢复机制

低延迟数据访问

毫秒级读取

低延迟与高吞吐量

2HDFS 缺点

小文件存取

占用 NameNode 内存空间

寻址时间超过读取时间

并发写入、文件随即修改

一个文件同时只能由一个写入者

仅支持 append

你可能感兴趣的:(大数据,hadoop,hdfs,大数据)