技术细节
1.HDFS在存储数据的时候会将数据进行切换。
2.HDFS中两类主要节点:NameNode和DataNode。
3.在HDFS中,会对每一个块进行备份,这些备份称之为副本(replication)。默认的副本数量为3。
Block
1.表示数据块,HDFS中数据存储的基本形式也是Block。
2.每Hadoop2.X中,每一个Block默认是128M。可以通过dfs.blocksize调节Block的大小,单位默认是字节。
3.如果一个文件本身不到一个Block的大小,那么这个文件会作为一个Block进行存储,在存储的时候,这个文件本身是多大那么就占用多大的空间。例如一个文件只有10M,那么这个文件对应的Block也就只有10M。
4.切块的意义:
a.切块是为了能够存储一些超大文件。
b.为了快速进行备份保证副本数量。
5.在切块的时候,并不是不同的块就一定放在不同的节点上。
6.HDF会对每一个块分配一个递增的编号。-BlockID。
NameNode
1.NameNode在HDFS中负责管理DataNode以及存储元数据(metadata)
2.元数据-是对上传的文件的描述信息:
a.文件的存储路径
b.文件的权限
c.记录文件大小以及Block的大小
d.Block和DataNode的映射关系
e.记录每一个文件的副本的数量
3.元数据在NameNode中存储在内存以及磁盘中
4.元数据存储在内存中的目的:快速操作
5.元数据在磁盘中的目的:崩溃恢复。
6.元数据在磁盘中的存储位置由hadoop.tmp.dir属性来决定
7.元数据在磁盘上的存储和fsimage和edits文件有关
edits文件记录的是HDFS的写操作
fsimage文件记录的是元数据-fsimage中的元数据和内存中的元数据不是实时的。-fsimage中的元数据往往会落后于内存中的元数据。
8.当NameNode接收到写操作的时候,先将写操作记录到edits_inprogress,如果记录成功,则将该操作更新到内存中修改内存中的元数据。更新完内存之后就会给客户端返回一个元数据修改成功的信号。
9.fsimage在更新的时候,会先将edits_inprogress滚动成edis_XXXX-XXXX,然后再将滚动出来的edits文件中的数据转化成命令执行到fsimage中。生成一个新的edits_inprogress。
10.fsimage的更新条件:
a.时间角度:当距离上一次的更新过去了指定的时间(默认是3600s,即1h)之后,就会将edits中