目录
一、什么是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集群包含一个单独的NameNode和多个DataNode。HDFS采用一种称为rack-aware的策略。Rack1、Rack2....
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 中。
SecondaryNameNode:分担 namenode 的工作量;是 NameNode 的冷备份;合并 fsimage 和 fsedits 然后再发给 namenode。
合并fsimage和fsedits文件,然后发送并替换NameNode的fsimage文件, 同时自己留下一个副本。这个副本可供 NameNode 毁灭之后的部分文件恢复。
DataNode:Slave 节点,奴隶,干活的。负责存储 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可靠性和性能的关键。HDFS采用一种称为rack-aware的策略来决定备份数据的存放。通过一个称为Rack Awareness的过程,NameNode决定每个DataNode所属rack id。缺省情况下,一个block块会有三个备份,一个在NameNode指定的DataNode上,一个在指定DataNode非同一rack的DataNode上,一个在指定DataNode同一rack的DataNode上。这种策略综合考虑了同一rack失效、以及不同rack之间数据复制性能问题。
示例写入流程:
分析,通过写过程,我们可以了解到:
①写 1T 文件,我们需要 3T 的存储,3T 的网络流量带宽。
②在执行读或写的过程中,NameNode 和 DataNode 通过 HeartBeat 进行保存通信, 确定 DataNode 活着。如果发现 DataNode 死掉了,就将死掉的 DataNode 上的数据,放 到其他节点去。读取时,要读其他节点去。
③挂掉一个节点,没关系,还有其他节点可以备份;甚至,挂掉某一个机架,也没关系; 其他机架上,也有备份。
副本的选择:为了降低整体的带宽消耗和读取延时,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。那么读取的时候,遵循的规律是:优先读取本机架上的数据。
1、HDFS 优点
高容错性
数据自动保存多个副本
副本丢失后,自动回复
适合批处理
移动的计算和操作
数据位置暴漏给计算框架
适合大数据处理
GB、TB、PB 甚至更大
百万规模以上的文件数量
10K+节点
可构建在廉价的机器上
通过副本提高可靠性
提供了容错和恢复机制
低延迟数据访问
毫秒级读取
低延迟与高吞吐量
2、HDFS 缺点
小文件存取
占用 NameNode 内存空间
寻址时间超过读取时间
并发写入、文件随即修改
一个文件同时只能由一个写入者
仅支持 append