Hadoop Hdfs 存储模型&架构模型

hdfsarchitecture.png

存储模型

  • 按照字节存储
    文件线性切割成块(Block):偏移量 offset (byte)
    一个文件切割成5块,一块3个字节,第二块的偏移量是4
  • Block分散存储在集群节点中
    单一文件Block大小一致,文件与文件可以不一致
  • Block可以设置副本数,副本分散在不同的节点中
    可靠性
    副本不要超过节点数量
  • 已上传的文件的Block副本数可以调整,大小不变
  • 只支持一次写入多次读取,同一时刻只有一个写入者???
  • 可以append追加数据

架构模型

  • 主从架构
  • NameNode节点保存文件的元数据(单节点),DateNode保存文件Block数据(多节点)
    元数据:文件描述信息
  • DateNode与NameNode保持心跳,提交Block列表
  • HdfsClient与NameNode交互元数据信息
  • HdfsClient与DateNode交互文件Block数据

角色介绍

NameNode(NN)

  • 基于内存存储
    1.不会和磁盘发生交换
    2.只存在内存中
    3.持久化
    内存掉电易失,通过快照(fsimage)+日志文件(edits)实现持久化
    快照只能是定时记录,容易丢失部分数据,所以要结合日志文件
    掉电后,上电时先把快照加载到内存,然后增量执行日志
  • NameNode主要功能
    1.接受客户端的读写服务
    2.收集DateNode汇报的Block列表信息
  • NameNode保存的metadata(元数据)信息
    1.文件overship和permissions
    2.文件大小、时间
    3.Block列表:Block偏移量
    Block每个副本的位置(由DateNode上报,NameNode不保存)

DateNode(DN)

  • 本地磁盘目录存储数据(Block),文件形式
    同时存储块的md5(校验文件完整性)
  • 启动DN时会向NN汇报Block信息
  • 通过向NN发送心跳保持与其联系(3s一次),如果NN10分钟没有收到DN心跳,则认为其已经lost,并copy其上的Block到其他DN

Block副本放置策略

block location.png
  • 第一个副本:放置在上传文件的DN。如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点
  • 第二个副本:放置在与第一个副本不同机架的节点上
  • 第三个副本:与第二个副本相同机架的节点
  • 更多副本:随机节点

Hdfs读写流程

写流程

write.png
  • 客户端和NameNode请求块的3个位置
  • NameNode根据副本存放规则返回3个位置
  • 客户端根据3个位置做pipeline,以更小的包做流式传输
    更小的包:把一个块切分成更小的块逐个传输
    流式:第一个小块传输到DN1后,第二个小块继续向DN1传输的同时,DN1上一个小块就可以同步进行副本传输到DN2,实现了时间上的并行传输
  • 第一个块传完后线性处理第二个块
  • 节点各自心跳汇报,时间也重叠,块的副本数对客户端透明,传输时间约等于一个文件的传输时间,不会因为副本数增加

读流程

read.png
  • 客户端和NameNode获取文件信息
    1.距离优先:每个块有多个副本,每个副本和客户端的距离排序
    2.下载任意块:全部,部分,一个
  • 客户端根据NameNode返回信息从DateNode获取文件
  • hdfs很好的支持了本地化读取

安全模式

  • NameNode启动的时候,首先将印象文件载入内存,并执行编辑日志中的各项操作
  • 一旦内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件和一个空的编辑日志
  • 此刻NameNode运行在安全模式,即ND的文件系统对于客户端是只读的
  • 此阶段ND收集个DN的报告,当数据块被确定安全后,再过若干时间,安全模式结束
  • 当检测到副本数不足的数据块时,该块会被复制知道达到最小副本数,系统中数据块的位置信息并不是ND位数的,而是以块列表形式存储在DN中
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容