HDFS1.0
HDFS组成
- NameNode(master) NN
- SecondaryNameNode(master) SNN
- DataNode(slave) DN
NameNode :主节点,因为在HDFS1.0中只有一个,因此有单点故障的风险,其中存储一些元数据,有两种映射关系
(1)已知路径(HDFS上)——>blockid list列表
(2)blockid 数据块——>DataNode节点地址
元数据:存储在内存中。元数据的持久化(fsimage),目的:为了避免数据丢失
fsimage:元数据的镜像文件,机器重启的时候加载fsimage
元数据持久化过程(SNN):内存 -> edit logs(磁盘上) -> fsimage
SecondaryNameNode:并不是NameNode的备份,其存在的意义在于数据的备份以及恢复
Namenode 和 edit logs关系:Namenode需要把每一次改动都存在edit log中
整个过程谁来主动推进的?(Datanode与Namenode之间的心跳机制)
除了单点问题之外,还有那些问题:
不适合存储太多小文件,导致block太多,内存可能放不下
DataNode(从节点,slave,多个机器)
(1)block数据块 -> 真实数据
心跳机制
副本机制,默认3个副本,作用:数据冗余做到数据高可用的目的,利用空间换取高可用
本地化原则(就近原则),MapReduce:主Jobtracker(Namenode) 从tasktracker(DataNode)
可靠性保证:
(1)数据检验:md5,crc32
在整个过程中数据需要校验几次
1)client给DataNode写数据时候:要针对所写的数据,每个检查单位(512字节),
创建一个单独校验码(crc32),将数据和校验码一起发送给DataNode
2)DataNode接收数据的时候:用同样加密算法生成校验码,并校验
在后台有一个扫描进程:DataBlockScanner:
一旦检测出问题的block,通过心跳,通知NN,于是NN让DN进行修复(拷贝一个无问题的备份)
(2)可靠性保证
1)心跳机制
2)多副本机制
3)crc32数据校验
4)SNN:保证元数据避免丢失
5)回收站(.Trash目录)
6)报告
]# hdfs fsck /passwd -files -blocks -locations
7)快照:备份,有助于快速还原
3)回收站
-Trash目录
HDFS特点:write-once read-many
不适合随机读,原因:无法被系统做大寻址方面优化(预读)
同步与异步
同步:速度慢,但能保证全局数据一致性
异步:无法保证全局数据一致性,但是速度快
数据本地化:
Namenode和Jobtracker是可以部署不同机器(可以拆开)
通过yarn,会将jobtracker拆为ResourceManage 和 ApplicationManager
而RM就是取代了Jobtracker中的资源调度的功能,降低负重
解决单点问题的方法 将Hadoop元数据写入到本地文件系统的同时 同步到一个远程挂载的网络文件系统(NFS)
运行一个secondary NameNode,它的作用是与NameNode进行交 互,定期通过编辑日志文件合并命名空间镜像,当NameNode发生故 障时它会通过自己合并的命名空间镜像副本来恢复。需要注意的是 secondaryNameNode保存的状态总是滞后于NameNode,所以这 种方式难免会导致丢失部分数据
机架感知策略
• 第一个副本,在客户端相同的节点(如果客户端是集群外的一台机器,就随机算节 点,但是系统会避免挑选太满或者太忙的节点)
• 第二个副本,放在不同机架(随机选择)的节点
• 第三个副本,放在与第二个副本同机架但是不同节点上。
HDFS写流程
HDFS读流程
HDFS API