目录
1.1HDFS 的架构
1.2 HDFS 的架构
1.3 HDFS 采用的是主从架构模型(Master/Slave)
2.1 HDFS 的优势
2.2 HDFS 的劣势
3.1 HDFS 写流程
3.2 HDFS 写流程
4.1 HDFS 读流程
4.2 HDFS NameNode 的元数据
5.1 Checkpoint
1.1HDFS 的架构
HDFS:Hadoop 中的分布式文件系统
Hadoop Distributed File System,存储和管理海量数据
文件系统( File System ):为了管理文件,在存储系统上建立的一些文件组织和结构,主要包括文件目录和文件本身
分布式(Distributed):由多台服务器组成 ,每台服务器执行不同的功能,不同的功能配合起来形成完整的功能
1.2 HDFS 的架构
HDFS 上存储的文件由块和元数据组成
block(块): 文件按照 block size(128M)切分为不同的 block, 不同的 block 存储在不同的 DataNode 上 (数据节点)
每个 block 会冗余存储 repliaction (3) 份, 514M 的文件会切分为 5 个 block,每个 block 存储 3 份;在 HDFS 上存储 15 个 block,共占用 1542M 存储空间
meta data(元数据):存储在 NameNode 上,文件的描述信息:名字,大小,创建时间等等;文件的 block 信息:每个 block 的存储位置; {block1: 1, 2,5; block2: 1,3,4; …}
1.3 HDFS 采用的是主从架构模型(Master/Slave)
1 个 NameNode(Master/主人/分配任务):接收客户端请求,管理元数据,维护文件系统的目录树
多个 DataNode(Slave/奴隶/执行任务):存储 block,实现上传下载功能,定期(默认每隔 3 秒)汇报自身信息 (心跳时间)
1 个 SecondaryNameNode:辅助 NameNode 维护目录树
2.1 HDFS 的优势
设备低成本: 可以部署在廉价服务器搭建的集群上
高容错: 数据自动保存多个副本,副本丢失后,自动恢复
适合批处理: 一次写入,多次查询
适合存储大文件, TB 甚至 PB 级别的数据量,百万规模以上的文件数量 1TB = 1024GB
10K+ 的节点数量
2.2 HDFS 的劣势
不适合低延迟访问, 注重吞吐量,牺牲实时性, 达不到毫秒级别的延迟
不适合存储大量小文件(小于 block size 的文件);
占用 NameNode 大量内存, 寻道时间超过读取时间
不适合修改文件, 文件的修改只支持追加操作, 一个文件只能有一个修改者;
3.1 HDFS 写流程
写流程(上传文件流程)中的三个角色
Client(客户端) :用户通过客户端与 HDFS 进行交互
NameNode: 接受客户端的请求,指定一组用于存储数据的 DataNode
DataNode:存储数据
3.2 HDFS 写流程
1. Client 向 NameNode 申请上传文件
2. NameNode 判断是否允许上传文件 ; 文件是否已存在, 用于存储文件的目录是否存在
3. NameNode 返回允许上传
4. Client 对文件按照 blocksize 进行切片, block size 默认是 128M
5. Client 向 NameNode 申请上传 block1
6. NameNode 挑选 replication 个 DataNode, replication 默认值是 3, 尽量避免挑选存储太满或者工作太忙的 DataNode, 多个 DataNode 的位置尽可能分散
7. 返回挑选的 DataNode 列表dn1, dn2, dn6
8. Client 发送 block1 给 DataNode1,DataNode1 发送 block1 给 DataNode2, DataNode2 发送 block1 给 DataNode6
9. DataNode6 回复 DataNode2 接收完毕, DataNode2 回复 DataNode1接收完毕, DataNode1 回复 Client 接收完毕
10. DataNode1,DataNode2,DataNode6 , 向 NameNode 汇报接收 block1 完毕
4.1 HDFS 读流程
读流程(下载文件流程)中的三个角色
Client(客户端)用户通过客户端与 HDFS 进行交互
NameNode接受客户端的请求 指定一组用于下载数据的 DataNode
DataNode 下载数据
1. Client 向 NameNode 申请下载文件
2. NameNode 查询文件的元数据,为每个 block 挑选一个用于下载的 DataNode
3. 返回挑选的 DataNode 列表
block1: DataNode1
block2: DataNode2…
4. Client 向 DataNode1 申请下载 block1
5. DataNode1 发送 block1 给 Client
6. Client 依次从 DataNode 下载所有 block
7. Client 合并所有 block 为文件
4.2 HDFS NameNode 的元数据
HDFS 的元数据(meta data)包含三部分
目录树 文件的普通属性 文件的数据块信息
NameNode 维护目录树
meta data
NameNode 在内存中维护的元数据 目录树改变时直接修改 meta data meta data 始终是最新的目录树关闭 HDFS,数据丢失
fsimage NameNode 在磁盘上存储的元数据 为了避免频繁读写磁盘,目录树改变时不会修改 fsimage fsimage 存储着 HDFS 启动时的目录树
关闭 HDFS,数据不丢失 edits 记录了目录树的每一次变更操作NameNode 维护目录树
HDFS 重启后,NameNode 可以加载 fsimage 中的目录树到内存, 对目录树执行一遍 edits 中的操作, 即可获得最新目录树
如果 edits 中积累的操作数量非常多, 这个还原过程会消耗很长的时间
5.1 Checkpoint
定期更新 fsimage 中存储的目录树可以缩短还原时间
触发条件(满足其一即可):
1 小时 edits 文件的大小超过 64M
检测周期:五分钟为了提高效率,这个操作交给 SecondaryNameNode 执行



