HDFS-架构原理
Posted 码农大腿哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS-架构原理相关的知识,希望对你有一定的参考价值。
前言:
在HDFS入门第一课我们对HDFS的核心思想有所了解。本篇将深入HDFS的底层细节,看看HDFS是如何解决一个分布式存储系统面临的诸多问题
本篇目标
1.掌握HDFS框架的核心组件及其作用
2.掌握各组件底层的主要运行机制
3.理解HDFSZ中Block的概念
4.学会解决HDFS的小文件问题
01
架构组成与作用
1.NameNode
NameNode(NN)是集群的Master,相当于一个管理者。主要作用有:
1)管理HDFS的名称空间(就是管理文件目录)
2)管理数据块Block的映射信息(每个Block会被存储在哪台机器上)
3)配置副本策略(一个Blcok配置几个副本,放在那里)
4)处理客户端读写请求(读取哪些数据,写入哪些数据)
DataNode(DN)就是Slave,相当于一个打工人,执行NameNode下达的命令。主要作用有:
1)存储实际的数据块Blocak
2)执行Block的读写、创建、删除操作
Secondary NameNode(SN)相当于一个秘书,辅助NameNode完成一些工作。主要作用有:
1)辅助NN,分担其工作量,比如定期合并fsimage和edits.log并推送给NN(后面会介绍SN的工作机制)
2)紧急情况下,辅助恢复NameNode
Client就是客户端,主要作用有:
1)文件切分。上传文件时,Client将文件切分成Block后进行上传
2)与NameNode交互,获取文件位置信息
3)与DataNode交互,读取或写入数据
4)提供一些命令管理和访问HDFS,如对HDFS进行增删改查
02
各组件工作机制
1.NameNode
1)元数据持久化机制
元数据存储在内存里,这样修改的时候比较快。不过元数据迟早要持久化到内存里,不然一断电就全没了
首先来了解两个文件:
EditLog:该文件记录了元数据的每一次改动,由于只进行追加操作,所以效率很高
FsImage:在磁盘里备份的内存中的元数据
NameNode启动时,会从磁盘读取FsImage和EditLog,根据EditLog的修改记录对FsImage进行修改,二者合并后应用到内存中
然后,刷新磁盘中的FsImage文件,EditLog文件从当前位置截断
2)高可用机制-HA
集群只有一台NN时,如果它发生了故障整个集群都无法使用。为了消除NN的单点故障,我们可以设置两个NN
HDFS HA功能可以配置Active/Standby两个NN,如果其中一台故障,可以很快的切换到另一台NN
HDFS HA的工作机制如下:
③ 同一时刻仅有一个NN对外提供服务
2.DataNode
1)DataNode心跳监测
① DN启动后向NN注册,成功后,周期性的向NN上报所有块信息
② 心跳3s一次,心跳的返回结果带有NN给该DN的命令(复制块数据到另一节点或删除数据块等)
③ 如果超过10分钟没有收到某个NN的心跳,则认为该节点不可用
2)校验和机制(CheckSum)
HDFS采用校验和机制,保障了数据的完整性
当DN创建Block时,会先计算这个Block的校验和并存储在一个隐藏文件中
当DN读取Block时,会验证接收数据的校验和与之前保存的是否一致
如果不一致,Client将查找另一个副本
DN在创建完Block会周期性的验证CheckSum
3)退役DataNode
如果某DN需要退役,可以将DN添加到黑名单
此后,该节点的数据会复制到其他节点。所有块复制完成,则停止该节点及节点资源管理器
3.Secondary NameNode
1)检查点机制-CheckPoint
2)CheckPoint的流程
如果设定时间到或者Edits写入了指定的条数,会触发CheckPoint执行;
03
Block
04
小文件存档
//将/bigleg/input目录下的文件归档为one.har文件并存在/bigleg/output
bin/hadoop archive -archiveName one.har –p /bigleg/input /bigleg/output
//查看归档文件
hadoop fs -lsr har:///bigleg/output/one.har
//解归档文件
hadoop fs -cp har:///bigleg/output/one.har/* /bigleg/input
以上是关于HDFS-架构原理的主要内容,如果未能解决你的问题,请参考以下文章