HDFS文件块剖析、架构设计、SNN剖析
一、HDFS块剖析
block:块
块的大小:128M
块的副本数:3
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
面试题:例如一个文件260M,(生产上hdfs不适合存储小文件,为什么不适合存储小文件,如果真的有小文件该怎么合并处理)
将文件以块的方式去分割去存储
实际存储 规格
块A:128M 128M A0 A1 A2
块B:128M 128M B0 B1 B2
块C: 4M 128M C0 C1 C2
Q:每个瓶子容量128ml,一碗水260ml
A瓶 128ml
B瓶 128ml
C瓶 4ml
面试题:一个文件160M,副本数为2,块大小128M
问:几个块,实际存储多少
答:4个块 160/128=1....32(进1得2),实际存储320M
二、HDFS架构设计
- namenode nn 名称节点
- secondarynamenode snn 第二名称节点
- datanode dn 数据节点
主从架构 Rack 机架
nn 文件系统的命名空间
存储a:文件名称
b.文件目录结构
c.文件属性 创建时间 权限 副本数
d.文件对应哪些数据块
-->数据块对应哪些datanode节点上
blockmap,nn节点不会持久化存储这种映射关系
dn定期发送blockreport 给nn,一次nn在内存中动态维护这种映射关系。
nn节点的作用:nn维护文件系统
维护文件系统树,以两种文件永久保存在磁盘上
命名空间、镜像文件 fsimage
编辑日志editlog
假设 nn 8g,小文件:nn节点需要250字节
1亿:1亿*250字节
假如真的有小文件 合并的动作
100个小文件合并成一个大文件 nn节点需要300字节
1亿/100 * 300字节 小
hdfs合并小文件方法
建议:合并为一个文件尽量在块大小 120M 合并时小于等于块大小
2.2
datanode:
存储:数据块 和 数据块的校验和
与nn节点通信:两件事情
a.每隔三秒发送一个心跳告诉老大nn(我还活着)
b.每10次心跳发送一次当前节点的blockreport
作用:读写文件的数据块
2.3
snn:(万年老二)
存储:fsimage+editlog
作用:定期合并fsimage+editlog文件为新的fsimage文件,还负责推送给nn节点,简称为检查点(checkpoint)参数:dfs.namenode.checkpoint.period 每隔一小时进行备份
举例snn每隔一小时进行备份nn节点的内容;11:00~12:00,12:00 snn备份了nn的数据,但是12:30nn节点挂了,此时snn未进行数据备份,所以这半个小时的数据就丢失了。
高级班中HA,有热备份,一个节点挂了另一个节点就起来了standby.
三、snn剖析
整理:第一步:1 roll edits 一个新的回滚
第二部:copy相当于是retrieve fsimage and edits from nn
第三步:merge:合并
第四步:transfer:传输 checkpoint to nn
说白了每一个小时对nn进行一个备份:备份指的是全部数据进行备份