文章目录
1. 简介
- HDFS属于Master与Slave架构,一个集群中只有一个Namenode,可以有多个Datanode
- HDFS存储机制保存了多个副本,当写入1T文件时,我们需要3T的存储,3T的网络流量带宽;系统提供容错机制,副本丢失或宕机可自动恢复,保证系统高可用性
- HDFS默认会将文件分割成block,然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中,如果小文件太多,会导致内存的负担很重
- HDFS采用的是一次写入多次读取的文件访问模型。一个文件经过创建,写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能
- HDFS存储理念是以最少的钱麦最栏的机器并实现最安全,难度高的分布式文件系统(高容错性低成本),HDFS认为机器故障是种常态,所以在设计时充分考虑到单个机器故障,每个磁盘故障,单个文件丢失等情况。
- HDFS容错机制:
– 节点失败监测机制:DN每隔3秒向NN发送心跳信号,10分钟受到不到,NN认为DN宕机
– 通信故障监测机制:只要发送了数据,接收方就会返回确认码
– 数据错误监测机制:在传输数据时,同时会发送总和校验码
- HDFS由4部分组成:HDFS Client,NameNode,Dataode和Secondary Nameode
- Client与NN连接并互相通信,SN也只与NN连接并互相通信,NN与所有DN连接并互相通信
1. 客户端:
- 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储
- 与NN交互,获取文件的位置信息
- 与DN交互,读取或者写入数据
- Client提供一些命令来管理和访问HDFS,比如启动或者关闭HDFS
2. Namenode
- 就是master,实际管理节点
- 管理HDFS的namespace
- 管理数据块(Block)映射信息
- 配置副本策略
- 处理客户端读写请求
- 有点类似于硬盘的引导区间
3. Datanode
- 存储实际的数据块
- 执行数据块的读/写操作
4. Second Namenode
- 并非NN的热备,当NN挂掉的时候,并不能马上替换NN并提供服务
- 辅助Namenode,分担其工作量
- 定期合并fsimage和fsedits,并推送给NN
2. 工作机制:
2.1 数据存储:
Client将数据按block切好后,NN接收到它的需求:三备份,128M数据块
NN返回给Client的是三个DN的地址,且已经按距离生序排列好;给三个原因是防止列表中的地址对应的DN宕机
Client与DN
client可与dn在一起:
第一个肯定会在和client同一位置的dn上。由于迁移计算的成本要明显低于迁移数据的成本,调度计算的本质是开启程序;第二,三个副本是在不同机架上的两个dn上
client在集群的外部时:
首先是机架,一个机架包含多个dn,机架一般类似于机房,包含多个主机。若设置的是保存三个副本,存储时的策略一般是会随机选择一个机架的dn存储,然后再选择一个其他机架的两个dn进行存储。即包含机架的冗余机制和跨dn的冗余机制。
DN上一般是第一个节点首先进行存储,存储完成后再去给其他节点复制。客户端只给第一个DN发送数据和列表;
完成后各个DN会反馈给NN写入完成的信号
这样,一个数据块即完成了在HDFS中的存储,接下来重复对其他数据块的操作;
当所有数据块的存储完成后,NN永久储存元数据,并关闭连接
2.2 读取数据
客户端发出读取数据请求给NN
NN返回给客户端所要文件的所有数据块的列表,以及每个数据块对应的DN的列表(从远到近)
客户端在拿到需要下载的数据块s后,也拿到每个数据块存储的DN(列表由近到远)后,开始按顺序下载
2.3 容错
如果DN挂了,后者里面没有数据,或者数据被损坏时,就会涉及HDFS的容错:故障类型和其监测方法
故障类型:节点故障,通讯故障(DN到NN失联),数据损坏(网络传送中损坏或磁盘损坏)
针对故障类型的故障监测:
节点故障:NN挂了,整个集群就挂了。对于DN,每3秒给NN发送一个心跳检测,10分钟没收到消息,NN判定DN宕机
网络故障:每当发送数据时,接受者都会回复一个应答信号;如果多次没有收到应答信号,发送者就会认为主机已经挂掉,或者发生了网络错误;
数据损坏:NN在DN硬盘上存储数据的时候,也会存储校验和,DN也会校验检验和确保数据完整;
硬盘故障:所有DN定时发送数据块报告给NN,在发送数据块报告之前,DN会自己检测检验和是否正常,损坏或者不匹配的数据块信息不会发送给NN,NN通过数据块报告可知道哪些数据块挂掉了。
即DN发送两种信号:心跳信号证明活着,数据块报告让NN知道损坏的数据块