HDFS之组件


简单说下hadoop和HDFS的关系
hadoop的组件看这篇文章
组件图:
在这里插入图片描述
通过心跳机制datanode向namenode通信,datanode每个3s向namenode发送信息,namenode如果10min之内没有收到某一个datanode发送的信息,则认为它宕机了.

1.NameNode

  • 1.NameNode就像班主任,主要负责管理文件系统的命令空间,文件元数据存放在内存中
  • 2.fsimage镜像文件,edits log编辑日志:两种方式在Namenode中进行持久化

2.SecondaryNameNode

  • 1.SecondaryNameNode就像学生,为NameNode内存中的文件系统元数据生成检查点(checkpoint).定期合并faimage和edits log文件
  • 2.SecondaryNameNode请求namenode生成新的edits log文件并向其中写日志.NameNode会在所有的存储目录中更新seen_txid文件
  • SecondaryNameNode通过HTTP GET方式从NameNode下载fsimage和edits log文件到本地
  • SecondaryNameNode将fsimage加载到自己的内存,并根据edits log更新内存中中的fsimage信息,然后将更新完毕之后的fsimage写道磁盘上.
  • SecondaryNameNode通过HTTP PUT将新的fsimage文件发送到NameNode,NameNode将该文件保存为.ckpt的临时文件备用
  • NameNode重命名该临时文件并准备使用.此时NameNode拥有一个新的fsimage文件和一个新的很小的edit log文件(可能不是空的,因为在SecondaryNameNode合并期间可能对元数据进行了读写操作).
  • 那么secondarynamenode什么时候进行文件的合并呢?
    1.1小时进行fsiamge和edits log的合并
    2.如果不够一小时,但是写入edits log的事务记录数达到一个阈值100w,进行合并
    3.事务数量检查默认每分钟进行一次
fsimage和edits log合并过程图

在这里插入图片描述

3.DataNode

  • 存储结构
    1.HDFS块数据存储于blk_前缀的文件中,包含了被存储文件原始字节数据的一部分
    2.每个block文件都有一个.meta后缀的元数据文件关联.该文件包含了一个版本和类型信息的头部,后接该block中每个部分的校验和
    3.每个block属于一个block池,每个block池有自己的存储目录,该目录名称就是该池子的ID(跟NameNode的VERSION文件中记录的block池ID一样)
  • 存储模型
    1.文件线性切割成块(Block)(按字节切割)
    2.Block分散存储在集群节点中
    3.单一文件Block大小一致,文件与文件可以不一致
    4.Block可以设置副本数,副本分散在不同节点中,副本数不要超过节点数量,承担计算容错
    5.文件上传可以设置block大小和副本数
    6.已上传的文件block副本数可以调整,大小不变
    7.只支持一次写入多次读取,同一时刻只有一个写入者对同一个文件,一个时刻只有一个写入者
    8.可以使用append追加数据
  • 副本放置策略
    1.第一个副本:放置在上传文件的datanode;如果是集群外提交,则随机挑选一台不太满,CPU不太忙的节点(磁盘)
    2.第二个副本:放置在于第一个副本不同的机架的节点上
    3.第三个副本:与第二个副本相同的机架节点上
    4.更多副本:随即节点
发布了262 篇原创文章 · 获赞 491 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/qq_42859864/article/details/105312335