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  合并时小于等于块大小

HDFS文件块剖析、架构设计、SNN剖析

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进行一个备份:备份指的是全部数据进行备份