3,Hadoop中常用概念的深入理解

HDFS中角色:

NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。

DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。

fsimage:元数据镜像文件(文件系统的目录树。)

edits:元数据的操作日志(针对文件系统做的修改操作记录)

namenode内存中存储的是=fsimage+edits。

SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。

 

NameNode:

NameNode是基于内存存储的,不会和磁盘发生交换。存储的是客户端上传文件维度的元数据,文件会由客户端切成块给不同的DataNode,DataNode在存储这个块的时候会基于这个块存储一个元数据信息

Hdfs服务器受NameNode内存大小影响,NameNode内存满了后,就无法再存入任何东西。

NameNode(NN)的持久化:

NameNode保存的信息包括文件的所属,权限,文件大小,时间,block块列表,block块偏移。但是不会持久化block块的位置信息(block块每个副本的位置由DataNode上报)。那么意味着NameNode重启的时候能从磁盘读回那些持久化信息,但是无法读回block块的位置信息,没有位置信息那么就无法确定从哪里取回block块信息,此时NameNode会处于一个不可用的状态(安全模式),但是等到某一个时间点,DataNode启动后上报位置信息给NameNode,等上报完的时候集群才真正可用。

安全模式:

namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。

一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。

此刻namenode运行在安全模式。即namenode的文件系统对于客户端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。

在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束

当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。

fsimage:

NameNode在开机的时候会产生一个fsimage(文件系统快照镜像)这个恢复的时候无需计算因此速度快,但是会耗费大量的IO对内存某一状态的快照。基于某一时间点的,由于比较耗费IO因此不可能实时发生。

Edits:记录metadata的操作日志(实时发生),记录的是和NameNode发生增删改操作的日志,有一个增删改的操作就会往文件中添加一条增删改操作的记录,这些操作要变成内存状态是需要cpu去执行的。理论上如果没有fsimage,仅仅靠edits恢复也是可行的,但是会因为计算edit log中的记录而耗费大量时间。

NameNode采用二者结合的方式更高效的更新fsimage。

fsimage产生的时间:

在集群刚搭建格式化的时候,会产生一个空的fsimage;

当NameNode启动成功的时候,会将此时内存的状态往下写一次fsimage;

在关机之前会将fsimage和edits整合产生一个新的fsimage,这个fsimage的时间点可以说是关机的时间点也可以说是开机的时间点。服务器开机开始运行将实时不会产生fsimage。

SecondaryNameNode的由来:

由于fsimage记录的是某一个时间点内存的状态,edits记录的一段时间内的内存发生变化的过程,如果一台服务器从开启一直运行了十年,突然断电了,那么此时fsimage记录的还是十年前的内存状态,edits文件中记录的是这十年之间的操作记录。显然这样会导致恢复的过程非常漫长。因此我们可以想象用另一台服务器在每一段固定的时间点(比如每隔24小时)将fsimage和edits复制到这台服务器上整合一次,产生一个此时新的时间点的fsimage然后去覆盖旧的fsimage,那么此时服务器中的fsimage记录的将会是最新的内存状态。即便是突然断电了,那么最糟糕的情况是fsimage回到了24小时前的状态,我们只需要根据这个24小时前的fsimage和这24小时的edits记录来恢复到目前状态即可。这台服务就是SecondaryNameNode。

DataNode(DN)中两个元数据的概念差异:

DataNode中也有一个元数据,NameNode存储的是客户端上传文件维度的元数据文件会由客户端切成块给不同的DataNode,DataNode在存储这个块的时候会基于这个块存储一个元数据信息。通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN。

DataNode的元数据中有一个非常重要的叫做MD5验证

保证文件的完成可靠性,这台服务器存的数据可能因为磁盘有坏道再读出数据会错误或者数据在传输过程中可能出现各种问题, 例如一般大型的视频,音频等文件在通过网络传输的时候,一般都会有一个md5的码值,这个码值一般是由服务端计算出来的,等文件通过传输下载到本地后,拿着MD5软件再计算出码值,如果两个码值一致,代表文件的任何一个二进制位都没有被破坏。我们客户端此时将数据交给了HDFS管理,这些块通过网络传输传给DataNode后,DataNode立刻计算出这些块的md5,后期某个时间点客户端想下载回这个块,DataNode将块传输回客户端,客户端要先计算下md5与原数据的md5进行对比,如果两次的md5值一致,则客户端无需去考虑下载其它副本,再去下载其它块的内容回客户端进行拼接。只要每个块都正确,那么拼接的内容就是正确的。如果一旦客户端发现下载回块的md5码值变了,这个块就丢失,再找另外一台副本的服务器再下载这个块。

SecondaryNameNode(SNN):

它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值